* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Рефакторинг баз данных
Survey
Document related concepts
Microsoft Access wikipedia , lookup
Microsoft SQL Server wikipedia , lookup
Oracle Database wikipedia , lookup
Entity–attribute–value model wikipedia , lookup
Navitaire Inc v Easyjet Airline Co. and BulletProof Technologies, Inc. wikipedia , lookup
Functional Database Model wikipedia , lookup
Open Database Connectivity wikipedia , lookup
Ingres (database) wikipedia , lookup
Concurrency control wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Versant Object Database wikipedia , lookup
Relational model wikipedia , lookup
Clusterpoint wikipedia , lookup
Transcript
Database refactoring For the beginning… • Avoid overspecialization Barrier Application developer Database developer Communication Cooperation Exchange of experience Developer Developer Definition • Refactoring of databases is the database schema change, improving its design, but not affecting its behavioral and information semantics. • It contains both structural and functional aspects What can we refactor in DB? DB keeps: • Data (are kept according to the scheme) • Stored code The stored code doesn’t differ from any other code (it should be tested) The scheme of data (tables, indexes, etc.) The availability of data complicates the refactoring of the scheme! Why should we refactor? • Correct the inherited database • Ensure the evolutionary development • Prevent the redundant design (over-design) Smells of bad code in database All the smells of codes can be applied to the stored code including: • • • • • Procedures-monsters Spaghetti code Code duplication Oversaturation of the conditional operators etc. Smells characteristic for DB: • • • • • • Table/column of wide destination Redundant data (repeated in several tables) Table with a huge number of columns/rows Smart columns (xml) Lack of limitations (lack of validation) Fear of changes in data scheme or procedure Fear of changes • • • • • The most «stinking» smell Prevents the development Reduces the effectiveness Suggests an even bigger mess Over time it becomes only worse How to proceed? • Create your sandbox of development • Transfer changes in the sandbox of integration • Introduce in production Sandboxes Frequent deployment Controlled deployment Highly controlled deployment The best case (the easiest) Worst case (the most complex) Trivial things • Is it possible to rename a column in the database without changing the hundreds of applications? • If we can not make such a triviality as we can do something really serious? Unit tests in the database • Is it too difficult? • Isn’t there a good testing tool (framework)? Running unit tests • Anonymous PL/SQL code • No need to change the database • Call raise_application_error a specific communication in case of an error • A rollback at the end of the test • Launch any SQL tools Example of a test Logs changes (changelog) • You must track changes • Writing delta-scripts (migration): ▫ At the beginning of the transition period ▫ At the end of the transition period • The same scripts for ▫ Update sandboxes ▫ Deployment on the production Simple script Versioning Teamwork • Developers ▫ Close cooperation with DB administrators ▫ Skills of operation with databases • Administrators of DB and designers of DB ▫ Should be involved in developing the application ▫ Skills of application development Testing tools • Delta-scripts ▫ Dbdeploy, liquibase, deltasql ▫ It's easy to write yourself • PL/SQL code, Oracle SQL Devepoler, Intellij IDEA Categories of database refactorings Category Description Example Refactoring of operation structures Changes in the definition Move a column from one of one or more tables table to another, or break the multipurpose column on the several separate columns, each of which performs the individual assignment Refactorings of data quality Changes that can improve the quality of information stored in the database Creating a column that does not allow NULL values, to ensure that there are always meaningful values Categories of database refactorings Category Description Example Refactorings of referential integrity The changes, which ensure that the referenced string exists in another table, and allow properly removing this string which are not needed Adding a trigger to realize the rule of a cascading delete, covering the two entities, to replace the code which before was implemented outside the database Refactorings of architecture Changes contributing to the improvement of interaction between external programs with database Replacement of the existing procedures in the Java language which code is in a shared library code, with the stored procedure, which are in the database. After the code is implemented in the form of stored procedures, you can use this code in an application other than Java Categories of database refactorings Category Description Example Refactoring of methods Changes in the method (stored procedure, stored function or trigger), which contribute to the improvement of its quality. To the methods of the database we can apply many of the refactorings of code Rename the stored procedure in order to simplify the understanding of its purpose Conversion other than refactorings Changes in the database schema, which lead to change in its semantics Adding a new column to an existing table