北川 博之著「データベースシステム(オーム社)」を参考に,データベースシステムの知識をまとめます。
リレーショナルデータベーススキーマの導出手順
データベース設計における論理設計では,リレーショナルデータベーススキーマを導出します。Teoryらの手法に基づけば,実体関連モデルからリレーショナルデータベーススキーマを手続き的に導出できます。
集合 | 手続き |
---|---|
実体集合 | 属性をそのままリレーションとして定義 |
弱実体集合 | 属性をそのままリレーションとして定義+識別上のオーナーの主キーを付与 |
汎化階層 | 属性をそのままリレーションとして定義+上位実体集合の主キーを付与 |
関連集合($1$対$1$対応) | いずれかの実体集合に対応するリレーションを拡張 |
関連集合($1$対$N$対応) | $N$側の実体集合に対応するリレーションを拡張 |
関連集合($M$対$N$対応) | 紐づく主キーを持つ別のリレーションを作成 |
関連集合(次数が$3$以上) | 紐づく主キーを持つ別のリレーションを作成 |
適用例
下図の実体関連モデルに対して,上記の手続きを適用してみます。
まず,実体集合に関してリレーションを導出します。
- 学生(学籍番号,氏名,専攻,住所)
- 科目(科目番号,科目名,単位数)
次に,弱実体集合に関してリレーションを導出します。
- 実習課題(科目番号,課題番号,課題名)
次に,汎化階層に関してリレーションを導出します。
- TA(学籍番号,経験年数,内線番号)
次に,$1$対$1$対応の関連集合である「担当」に関して「TA」のリレーションを更新します。
- TA(学籍番号,経験年数,内線番号,科目番号)
$1$対$1$対応の関連集合であるため,「科目」のリレーションを更新してもよいです。
最後に,$M$対$N$対応の関連集合である「履修」に関してリレーションを導出します。
- 履修(学籍番号,科目番号,成績)
関連集合「実習」に対して処理を行っていませんが,これは既に弱実体集合「実習課題」に「科目」の情報が付与されているからです。弱実体集合に対する手続と$N$対$1$対応の関連集合に対する手続きがたまたま重複したということです。
以上をまとめると,下記のようなリレーショナルデータベーススキーマが導出できました。
- 学生(学籍番号,氏名,専攻,住所)
- 科目(科目番号,科目名,単位数)
- 実習課題(科目番号,課題番号,課題名)
- TA(学籍番号,経験年数,内線番号,科目番号)
- 履修(学籍番号,科目番号,成績)
弱実体集合や汎化階層,および$M$対$N$対応の関連集合に付与する属性は主キーですので,下線が必要です。一方,$1$対$N$対応の関連集合に付与する属性は主キーではありませんので,下線は不要になります。
コメント