データベース設計
E-R図による概念設計、主キーと外部キー、第1から第3正規形までの正規化、物理設計の考慮点を理解できるようになります。
ねらい
矛盾のないデータベースを設計する方法を学びます。このレッスンを終えると、E-R図でデータの関連を表し、主キーと外部キーの役割を説明し、正規化の目的と第1から第3正規形までの手順を説明できるようになります。
ストーリー
注文管理の表に、注文のたびに顧客の住所を書き込んでいたお店がありました。ある顧客が引っ越すと、過去の注文行に古い住所が残ったまま。どれが正しい住所か分からなくなりました。原因は「同じ情報を何か所にも書く」設計にあります。重複をなくし、事実を1か所にだけ書く。これがデータベース設計の鉄則です。
データ分析:設計の前にデータを整理する
設計の第一歩は、業務に必要なデータを洗い出し、意味と関連を整理するデータ分析です。同じものを違う名前で呼ぶ異音同義語や、同じ名前で違うものを指す同音異義語が混ざらないように、データ項目を標準化します。データの重複の排除もこの段階の目標です。データ項目の定義(メタデータ)を集めて管理する辞書をデータディクショナリといいます。
概念設計:E-R図で関連を描く
DBMSに依存せずにデータの関連を表す設計を概念設計といい、概念データモデルをE-R図やUMLで表します。E-R図は、管理対象のもの(エンティティ)、その性質(属性)、エンティティどうしの関連(リレーションシップ)で構成されます。
関連には対応の多重度(カーディナリティ)があり、1対1、1対多、多対多を区別します。たとえば「顧客と注文」は、1人の顧客が多くの注文を持つ1対多の関連です。多対多の関連は、そのままでは表にしにくいため、設計の過程で中間の表に分解します。
論理設計:主キー・外部キー・制約
概念設計をもとに、実際の表(テーブル)を設計するのが論理設計です。表はレコード(行)とフィールド(項目)で構成されます。
- 主キーは、表の中の行を一意に特定する列です。重複してはならず、値が入っていない状態(NULL)も許されません。
- 外部キーは、別の表の主キーを参照する列です。表と表を結びつけ、参照先に存在しない値が入らないように守ります。
このほか、値の重複を禁じる一意性制約など、データの矛盾を防ぐ一貫性制約を定義します。
正規化:重複をなくして矛盾を防ぐ
冒頭のお店の問題を解決する体系的な手順が正規化です。表を段階的に分解して、同じ事実が1か所にだけ書かれる形に整えます。
| 段階 | 満たす条件 |
|---|---|
| 第1正規形 | 繰返しの項目をなくし、すべての値を単一の値にする |
| 第2正規形 | 主キーの一部だけに従属する属性(部分関数従属)を別の表に分離する |
| 第3正規形 | 主キー以外の属性を経由して従属する属性(推移関数従属)を別の表に分離する |
ある属性の値が決まると別の属性の値が一意に決まる関係を関数従属といいます。主キー全体に従属することを完全関数従属、主キーの一部にだけ従属することを部分関数従属、「主キーが決まると属性Aが決まり、Aが決まると属性Bが決まる」という間接的な従属を推移関数従属といいます。第2正規形は部分関数従属の排除、第3正規形は推移関数従属の排除、と対応させて覚えましょう。
顧客の住所を顧客表に1か所だけ持たせれば、引っ越しのときも1行を直すだけで済みます。これが正規化の効果です。
物理設計:格納の仕方を決める
論理設計で決めた表について、実際の記憶装置にどう格納するかを決めるのが物理設計です。データ量の増加を見込んだディスク容量見積り、論理データ構造のマッピング、検索や更新が要求時間内に終わるかの性能評価を行います。
例題
次の問いに答えてください。
問1 E-R図で、管理対象のものどうしの関連を何といいますか。
問2 表の中の行を一意に特定するための列で、重複もNULLも許されないものを何といいますか。
解答と解説
問1の答えはリレーションシップです。管理対象のものはエンティティ、その性質は属性と呼び、3つの要素でデータの構造を表します。
問2の答えは主キーです。別の表の主キーを参照して表どうしを結ぶ列は外部キーといいます。
応用
本試験を意識した問題を解いてみましょう。
問 第2正規形にする過程で表から分離して取り除く対象となる、主キーの一部の属性だけに従属する関係はどれでしょうか。次の中から選んでください。
- 部分関数従属
- 推移関数従属
- 完全関数従属
- 一意性制約
解答と解説
答えは1の部分関数従属です。主キーが複数の列の組であるとき、その一部だけで値が決まる属性を別の表に分離すると第2正規形になります。2の推移関数従属は、主キー以外の属性を経由した間接的な従属で、これを分離するのは第3正規形にする段階です。3の完全関数従属は主キー全体に従属している正常な状態であり、取り除く対象ではありません。4の一意性制約は値の重複を禁じる制約のことで、関数従属の種類ではありません。
分からなかった点・気になった点
読み込み中です。