進化型データベース設計では、顧客の要求を反映して変更を継続的に更新できるように、データベーススキーマを段階的に改善します。世界中の人々が同時に同じソフトウェアに取り組んでいるため、設計の進展に伴ってデータベースをスムーズに進化させる技術が必要です。このような手法では、自動リファクタリングと継続的インテグレーションを利用して、ソフトウェア開発のアジャイル手法をサポートします。これらの開発手法は、プレプロダクション段階のシステムだけでなく、既にリリースされたシステムにも適用されます。これらの手法は、顧客の変化するニーズに応じてデータベーススキーマの関連する変更をカバーするだけでなく、変更されたデータをデータベースに移行し、データの意味を変更せずにそれに応じてデータベースアクセスコードをカスタマイズします。[ 1 ]
ウォーターフォールモデルを長年使用してきたソフトウェア業界では、ソフトウェア開発にアジャイル手法を採用する動きが広がっています。アジャイル手法では、ソフトウェアライフサイクルのどの段階においても要件が永続的であるとは想定していません。これらの手法は、ウォーターフォール設計手法とは対照的に、散発的な変更をサポートするように設計されています。このアプローチの重要な要素は反復開発であり、プロジェクトのライフサイクル中にソフトウェアライフサイクル全体が複数回実行されます。各反復は、数週間から数か月と短い期間であるにもかかわらず、ソフトウェア開発ライフサイクル全体を経験します。[ 1 ]
これらの手法が採用される前は、コードの開発を開始する前にシステム全体を設計していました。データベーススキーマにも同じ原則が適用され、顧客、エンドユーザー、ビジネスアナリストなどの協力によって開発されたソフトウェア要件から派生するものと考えられていました。そして、これらの要件はソフトウェア開発の進捗に伴って変更されることは想定されていませんでした。しかし、時間が経つにつれて、未使用の行や列という形で既存のデータベーススキーマに冗長性が明らかになったため、このアプローチは煩雑であることが判明しました。この冗長性とデータ品質の問題は、コストのかかる問題へと発展しました。設計を構築やテストと並行して行わない慣行は非常に非効率的であると結論付けられました。[ 1 ]
前述の通り、進化型データベース設計手法は反復的な性質を持ち、過去20年間で非常に普及しました。進化型データベース設計は、プロジェクト開始時にデータベーススキーマ全体を構築するのではなく、プロジェクトの進行に合わせてデータベーススキーマを構築していくことを目的としています。このデータベース設計手法を用いることで、プロジェクトの変化する要件を効果的に把握し、対応することができます。
開発者が反復的な方法でデータベースを構築するのに役立つ、進化型データベース設計手法が5つあります。以下に、それら5つの手法について簡単に説明します。
リファクタリングとは、プログラムの機能に影響を与えずにプログラムに変更を加えるプロセスです。データベース リファクタリングとは、データベースの機能やデータベースに格納されている情報に影響を与えずに、データベース スキーマに小さな変更を加える手法です。[ 2 ]データベース リファクタリングの主な目的は、データベースの設計を改善して、データベースが変化する要件により適合するようにすることです。ユーザーは、テーブル、ビュー、ストアド プロシージャ、トリガーを変更できます。データベースと外部アプリケーション間の依存関係により、データベース リファクタリングは困難になります。
データモデリングとは、エンティティを識別し、エンティティに属性を関連付け、属性を表すデータ構造を決定する手法です。 [ 3 ]従来のデータベースシナリオでは、エンティティとその関連属性を表す論理データモデルが最初に作成されます。進化型データモデリングでは、データモデリングの手法は反復的に実行されます。つまり、複数のデータモデルが開発され、各モデルはデータベースの異なる側面を表します。この種のデータモデリング手法はアジャイル環境で実践されており、アジャイル開発の主要な原則の1つです。[ 4 ]
システムに新しい機能が追加されるたびに、更新によってシステムが破損したり使用不能になったりしないことを確認することが不可欠です。データベースでは、ビジネスロジックはストアドプロシージャ、データ検証ルール、参照整合性で実装されており、システムに変更が実装されるたびに徹底的にテストする必要があります。回帰テストは、システムに新しい機能が追加されるたびにすべてのテストケースを実行するプロセスです。テストファースト開発(TFD)は、進化型データベース設計で採用されている回帰テストの一種です。TFDアプローチに含まれる手順は次のとおりです。[ 3 ]
構成管理とは、システムに適用されたバージョンと更新を詳細に記録することです。構成管理は、システムに悪影響を与えた更新や変更をロールバックする際に役立ちます。データベースのリファクタリングで行われた更新をロールバックできるようにするには、データ定義言語スクリプト、データモデルファイル、参照データ、ストアドプロシージャなどのデータベースアーティファクトを構成管理システムで維持することが重要です。[ 5 ]
サンドボックスとは、システムを構築、テスト、実行できる、完全に機能する環境です。データベーススキーマを段階的に変更していくためには、開発者一人ひとりが専用の物理的なサンドボックス、ソースコードのコピー、データベースのコピーを持つことが理想的です。サンドボックス環境では、開発者は他の開発者や他の環境に影響を与えることなく、データベーススキーマを変更したりテストを実行したりできます。変更が正常に実装されたら、プレプロダクション環境に移行し、そこで受け入れテストを実行します。受け入れテストが成功したら、本番環境にデプロイされます。
従来のデータベース設計手法は、進化型データベース設計手法のような変更をサポートしていません。「残念ながら、従来のデータコミュニティは、データベーススキーマを進化させるのは難しいことだと考えており、その結果、どのように行うかを検討したことがありませんでした。」[ 1 ] ある意味では、進化型設計はアプリケーション開発者にとって優れており、従来の設計はデータ専門家にとって優れています。[ 6 ]
以下に、進化的な方法でデータベースを設計および開発する機能を提供するツールの一覧を示します。