データベースの理論的な部分を
を基に学んでいく。
今日のまとめ
- 関数従属性の左辺のどの真部分列についてもであるとき、はに完全関数従属であるという。
- 関係スキーマは、すべての非キー属性が主キーに完全関数従属製するとき第2正規形であるという。
3. SQLと正規化
3.2 正規化
3.2.3 完全関数従属性と第2正規形
関数従属性はいくつか重要な性質を持つ。
1つ目に、関係スキーマの属性列の部分列に対して、
が成り立つ。ここではがの部分列であることを意味する。
2つ目の性質から、ある関数従属性が成り立つならば、左辺の属性は任意に増やしてよいということが分かる。逆に言えば、属性の部分列に対して、1つ目の性質から必ずが成り立ち、もし部分列に対して関数従属性が成り立つならば、左辺をからに縮小しても関数従属性が保存される(ただし左辺の縮小には限界がある。)。
縮小していくと、非キー属性はすべて主キーに関数従属してしまい、関数従属性ではデータのまとまりを束ねられない。しかし非キー属性を右辺とするような関数従属性の中に左辺を更に削ることができる。
定義3.2 完全関数従属性 関数従属性の左辺のどの真部分列についてもであるとき、はに完全関数従属であるという。
完全関数従属性がデータの1つの内容を束ねると考えて、関係スキーマを分解すると、更新時異常が解消される。
3つの完全関数従属性
によってテーブル
学生名 研究室名 学科名 授業名 開講時期 成績太郎 知識情報学 知識科学 人工知能 2年前期 太郎 知識情報学 知識科学 統計学 1年後期 次郎 データ解析学 データ科学 人工知能 2年後期 次郎 データ解析学 データ科学 統計学 1年後期 次郎 データ解析学 データ科学 数理論理学 2年後期 三郎 データ解析学 データ科学 統計学 1年後期 を分解すると以下のようになる。
- 学生
学生名 研究室名 学科名太郎 知識情報学 知識科学 次郎 データ解析学 データ科学 三郎 データ解析学 データ科学
- 授業
授業名 開講時期人工知能 2年前期 統計学 1年後期 数理論理学 2年後期
- 履修
学生名 授業名 成績太郎 人工知能 太郎 統計学 次郎 人工知能 次郎 統計学 次郎 数理論理学 三郎 統計学
- (1)挿入時異常の解消 単位振替作業が終了していなくても、学生テーブルに「四郎」さんを挿入できる。
- (2)削除時異常の解消 「次郎」さんについて、履修科目のデータに影響を与えることなくテーブル「学生」から削除できる。
- (3)修正時異常の解消 「統計学」の開講時期変更は履修者の数に影響されず、テーブル「授業」の1か所のみ変更すればよい。
1セル1データの条件を満たすテーブルを第1正規形といった。更に完全関数従属性による以下の条件を満たすテーブルを第2正規形と呼ぶ。
関係スキーマに含まれる完全関数従属性をすべて洗い出して、第2正規形となるいくつかの関係スキーマに分解する作業を第2正規化と呼ぶ。