データベース プランの開発
データベースを作成するには、まず、データベースを実装する際のガイドとしてだけでなく、実装した後のデータベースの機能仕様としても役立つプランを作成する必要があります。データベースのデザインの複雑さと詳細は、データベース アプリケーションの複雑さとサイズ、およびユーザー数によって異なります。
データベース アプリケーションの性質や複雑さ、およびその計画手順はさまざまです。1 人のユーザーを対象とした比較的単純なデータベースもあれば、何千ものクライアントを対象として銀行取引業務を扱う大規模で複雑なデータベースもあります。単純なデータベースのデザインは、メモ用紙に数行メモする程度で済みます。しかし、複雑なデータベースのデザインには、データベースに関するあらゆる詳細情報が記載された、何百ページにものぼる正式なドキュメントが必要になる場合があります。
データベースのプランを作成するときは、データベースのサイズと複雑さに関係なく、次の基本手順を使用します。
情報の収集
オブジェクトの特定
オブジェクトのモデル化
各オブジェクトに関する情報の種類の特定
オブジェクト間のリレーションシップの特定
情報の収集
データベースを作成する前に、データベースを使用して実行するジョブをよく理解しておく必要があります。これまで紙ベースまたは手動で行っていた情報システムの代わりにデータベースを使用する場合、既存のシステムを調査することによって必要な情報の大半を収集できます。システムのすべての関係者から話を聞き、データベースの用途を決定する必要があります。また、関係者が新しいシステムに何を求めているかを特定し、既存のシステムの問題、制限事項、およびボトルネックを特定することも重要です。ユーザーの意見、棚卸し表、管理報告書、および既存の情報システムで使用されているその他の文書のコピーを収集します。収集した資料は、データベースやインターフェイスをデザインするときに役立ちます。
オブジェクトの特定
情報を収集する過程で、データベースで管理する主要なオブジェクトまたはエンティティを特定する必要があります。オブジェクトは人や製品など有形物であることも、商取引、社内の部署、給与計算期間など無形物であることもあります。通常は、いくつかの主要なオブジェクトがあり、これらのオブジェクトを特定すると、関連するアイテムが明らかになります。データベースには、各アイテムに対応するテーブルが存在している必要があります。
SQL Server に同梱されている AdventureWorks2008R2 サンプル データベースの主要なオブジェクトは自転車です。この企業のビジネスの自転車に関連するオブジェクトは、自転車を製造する従業員、自転車の製造に使用する部品を販売する業者、それらの部品を購入する顧客、および顧客との販売取引です。それぞれのオブジェクトはデータベースのテーブルになっています。
オブジェクトのモデル化
システムのオブジェクトを特定したら、システムを視覚的に表現できる方法でオブジェクトを記録する必要があります。データベースを実装するときには、このデータベース モデルを参考にできます。
データベース開発者は、オブジェクトのモデル化に、技術的な知識が不要なツールから高度な知識を要するツールまで、さまざまなツールを使用します。使用するツールは広範で、鉛筆とメモ用紙からワード プロセッシング プログラムやスプレッドシート プログラム、さらにはデータベースのデザイン向けのデータのモデル化専用ソフトウェア プログラムにまで及びます。どのツールを使用する場合でも、最新のツールを使用することが重要です。
各オブジェクトに関する情報の種類の特定
データベースのテーブルの候補になる主要なオブジェクトを特定したら、次は、各オブジェクトに格納する情報の種類を特定します。この情報は、テーブルの列になります。データベースのテーブルの列に一般的に格納する情報の種類は次のとおりです。
生データ列
これらの列には、データベース外部のソースにより決められた名前などの有形情報を格納します。
カテゴリ列
これらの列には、データを分類またはグループ化する情報、真/偽、既婚/未婚、副社長/取締役/グループ マネージャーなどの、限定されたデータだけを格納します。
識別子列
これらの列では、テーブルに格納された各アイテムを識別するメカニズムを提供します。多くの場合、これらの列の名前には、id または number という表現が含まれます。たとえば、employee_id、invoice_number、publisher_id などがあります。識別子列は、ユーザーだけでなくデータベースの内部処理でテーブルのデータ行にアクセスするときに使用する主要なコンポーネントです。オブジェクトは、社会保障番号など、テーブルで使用できる有形の ID を持っていることもあります。ただし、ほとんどの場合は、行ごとに信頼できる人為的な ID が作成されるようにテーブルを定義できます。
リレーショナル列または参照列
これらの列は、あるテーブルの情報と、別のテーブルにある関連情報との間にリンクを確立する働きをします。たとえば、販売取引を追跡するテーブルと customers テーブルの間にリンクを設定すると、販売取引を完全な顧客情報と関連付けることができます。
オブジェクト間のリレーションシップの特定
リレーショナル データベースには、データベースのさまざまなアイテムに関する情報を関連付けることができるという利点があります。このため、異なる種類の情報が別々に格納されていても、必要に応じてデータベース エンジンでデータを結合できます。デザインの過程でオブジェクト間のリレーションシップを特定するには、テーブルを調査し、テーブルの論理的な関係を特定して、テーブル間にリンクを設定するリレーショナル列を追加する必要があります。
たとえば、AdventureWorks2008R2 データベースの設計者は、このデータベースに製品と製品モデルのテーブルを作成しました。Production.Product テーブルには、ProductID という識別子列、製品の名前、価格、色、サイズ、および重量を示すデータ列を含む各製品の情報が格納されています。このテーブルには、Class や Style などのカテゴリ列が含まれており、その種類ごとに製品が分類されています。各製品にはそれぞれの製品モデルがありますが、その情報は別のテーブルに格納されています。したがって、Production.Product テーブルには、製品モデルの ID のみを格納する ProductModelID 列が含まれています。製品にデータ行を追加する場合は、そのデータ行の ProductModelID の値が Production.ProductModel テーブルに存在する必要があります。