evolutionary database design

Post on 04-Dec-2014

4.274 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

Presentation makes overview of existing database change management tools

TRANSCRIPT

April 9, 2023

Evolutionary database design

DevClub.eu,30.06.2009

Andrei Solntsev

Agenda

begin» background» my experience» tools

end;

begin

процесс разработки программного обеспечения

Плановый («водопад»)На раннем этапе • выявить требования, • согласовать, • спроектировать, • согласоватьи затем приступить к кодированию

минимизация изменений за счет обширной предварительной работы.

Эволюционный• Допускать измененияна всех стадиях• Но управлять изменениями

принципиальная позиция – максимально упростить возможность изменений

@author

1999: Refactoring: Improving

the Design of Existing Codehttp://www.amazon.com/exec/obidos/ASIN/0201485672

2000: Continuous Integrationhttp://www.martinfowler.com/articles/continuousIntegration.html

2003: Evolutionary Database Designhttp://www.martinfowler.com/articles/evodb.html

Martin Fowler

@compare

Рефакторинг базы данных сложнее, чем рефакторинг кода

• Сохранение информационной семантики• Миграция данных

• большое количество связей• период поддержки устаревшего кода

• В отличие от обычного ПО, невозможно просто удалить старый код и заменить новым.

<img src=“book.pdf”/>

@experience

My experience PRIA HireRight HireRight 2.0 ?

PRIA

ProductionProduction

Users

Developers

Testers

SalespeopleProduct Manager

Single DB environment

Deployment is not a problem

Multi-DB environment

Production

ProductionUsers

Salespeople

Developer #1

Developer #2

Tester #1

Tester #2

Demo

Deployment becomes a problem

HireRight: deployment

ALTER TABLE man ADD COLUMN length

Create index man_idx

CREATE INDEX women_id_idx

DROP TABLE raha

CREATE TABLE money ( eek NUMBER);

ALTER TABLE money ADD CONS

CVS DB

Installationscripts

Problems:• scripts reinstallation• DB recreation• DB synchronization

Database Change Management

DB Deploy - http://dbdeploy.com/

LiquiBase - http://www.liquibase.org/

My findings:

MySQL Workbench – Diff & Synchronizationhttp://dev.mysql.com/tech-resources/articles/workbench_database_management.html

Oracle Enterprise Manager (change management pack)

An automated processAn automated process is needed to make the process of is needed to make the process of upgrading out-of-date databases simpleupgrading out-of-date databases simple

We need a Database Change ManagementDatabase Change Management tool.

RedGate SQL compare - http://www.red-gate.com/products/SQL_Compare/index.htm

Ruby migrations - http://www.oracle.com/technology/pub/articles/kern-rails-migrations.html

Apache DDL Utils

<database name="testdb"> <table name="author"> <column name="author_id" type="INTEGER"

primaryKey="true" required="true"/> <column name="name" type="VARCHAR"

size="50" required="true"/> <column name="organisation" type="VARCHAR"

size="50" required="false"/> </table>

<index name="book_isbn"> <index-column name="isbn"/> </index></database>

Based on XML, automatically generates SQL scripts to update DB.

http://db.apache.org/ddlutils/

Incremental Schema Changes

All database schemas can be thought of as a compilation of incremental changes made over time to accommodate new functionality

As updates are applied to a database, the changes will be recorded in a table similar to the following:

Change Date

1_Create_Customer_Table.sql 4-15-07

2_Add_e-mail_address_column.sql 4-17-07

3_Add_fax_number_column.sql 4-18-07

4_Add_transaction_table.sql 4-21-07

5_Add_transaction_status_column.sql 4-24-07

6_Add_customer-transaction_view.sql 4-27-07

DBDeploy

1. Go to directory with SQL files:1. “1 create_customer_table.sql”2. “2 add_customer_id_constraint.sql”3. …

2. Run “ant”

Output:

[dbdeploy] dbdeploy 3.0-SNAPSHOT[dbdeploy] Reading change scripts from directory

/tmp/dbdeploy/dbdeploy-3.0-SNAPSHOT/example...[dbdeploy] Changes currently applied to database:[dbdeploy]   (none)[dbdeploy] Scripts available:[dbdeploy]   1, 2[dbdeploy] To be applied:[dbdeploy]   1, 2[dbdeploy] Generating undo scripts...     [sql] Executing resource:

/tmp/dbdeploy/dbdeploy-3.0-SNAPSHOT/example/output.sql     [sql] 7 of 7 SQL statements executed successfully

ThoughWorks.com

DBDeploy options

http://dbdeploy.com/documentation/getting-started/rules-for-using-dbdeploy/

• Naming convention for delta scripts:NUMBER COMMENT.SQL

• Re-execution – NOT POSSIBLE

• Undo section – marked by comments:

CREATE TABLE FOO ( FOO_ID INTEGER NOT NULL, FOO_VALUE VARCHAR(30) );

ALTER TABLE FOO ADD CONSTRAINT PK_FOO PRIMARY KEY (FOO_ID);--//@UNDO DROP TABLE FOO;

LiquiBase

The main XML describing all delta scripts:

<databaseChangeLog> <changeSet id="1" author="bob">

<createTable tableName="department"> <column name="id" type="int">

<constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)">

<constraints nullable="false"/> </column> <column name="active" type="boolean" defaultValue="1"/></createTable>

</changeSet> </databaseChangeLog>

LiquiBase.org

LiquiBase

Run:

liquibase --driver=com.mysql.jdbc.Driver \ --classpath=/path/to/classes \ --changeLogFile=com/example/db.changelog.xml \ --url="jdbc:mysql://localhost/example" \ --username=user \ --password=asdf \ migrate

Also possible to run:• Ant script• Maven plugin• Built-in java code• Spring• Grails• Servlet Listener

LiquiBase options

• Custom order of scripts (user-defined)

• Re-execution – POSSIBLE (with attributes)

LiquiBase options

And many other options:• DBMS• SQL checksum• context• long transaction• pre-conditions

Outcome

DB Deploy

LiquiBase

My findings:

MySQL Workbench – Diff & Synchronization

Oracle Enterprise Manager

RedGate SQL compare

Ruby migrations

1. commercial2. RDBMS-specific3. but probably good

- Seems to be cool, need to try- Written on Ruby

- Written by authoritative people- Simple- Convection over configuration

- More configuration than DBDeploy- More options than DBDeploy- Works with any RDBMS- Eclipse plugin

Written on

Java

end;

Links:http://www.refactoring.com/ - Code refactoring (1999)http://databaserefactoring.com/ - DB refactoring (2003)

Books:Рефакторинг баз данных: эволюционное проектирование. http://www.williamspublishing.com/Books/978-5-8459-1157-5.html

top related