(1)図5について,(1)関係“自己記録", "目標”, “測定” の候補キー, 及び第1正規形, 第2正規形,第3正規形のうち、どこまで正規化されているかを答えよ。 また, 正規形の判別根拠を,部分関数従属性及び推移的関数従属性の“あり”又は“なし”で示せ。“あり” の場合は,その関数従属性の具体例を、 図2中の意味の欄に示した表記法に従って示せ。
解説
解答の論理構成
-
候補キーの同定
- 図5では “自己記録” の決定因子として「会員ID」「記録日」が示され、そこから体重や総歩数へ矢印が伸びている。よって {会員 ID, 記録日} が候補キー。
- “測定” も同様に「会員ID」「測定日時」から全属性へ矢印が出ているので {会員 ID, 測定日時} が候補キー。
- “目標” では中央ブロックに「会員ID」「設定日」「経過日数」が描かれ、その3属性を起点に右下へ派生している。従って {会員 ID, 設定日, 経過日数} が候補キー。
-
第1〜第3正規形の判定手順
第1正規形:繰返し集合がない(図5はすべて単一値属性)→3関係とも満たす。
第2正規形:主キーの一部 → 非キー属性 が存在しないこと。
- “自己記録”/“測定” は該当する矢印がなく部分関数従属性なし。
- “目標” は {会員 ID, 設定日} → {基準日, スタッフ ID} が存在し、主キーの一部から非キー属性が決定しているので未達。
第3正規形:非キー属性間の推移的関数従属性がないこと。
- “自己記録” と “測定” には推移的な矢印が図示されておらず、条件を満たす。
- “目標” は第2正規形を満たしていないため第3正規形にも到達しない。
-
部分・推移的関数従属性の有無
- “自己記録”:部分「なし」、推移「なし」
- “目標”:部分「あり」 {会員 ID, 設定日} → {基準日, スタッフ ID}、推移「なし」
- “測定”:部分「なし」、推移「なし」
誤りやすいポイント
- 「{会員 ID, 設定日} → 基準日」は推移と誤認しがちだが、決定因子が主キーの一部なので部分関数従属性。
- “目標” の主キーを {会員 ID, 設定日} と短絡し、経過日数を落としてしまうミス。図5では経過日数が中央枠内に描かれており候補キーに含まれる。
- “自己記録” の「入力日」矢印を推移的依存と勘違いするケース。図示されているのは主キー側からの直接依存で推移ではない。
FAQ
Q: “目標” を第2正規形にするにはどう分割しますか?
A: 例として R1(会員ID, 設定日, 基準日, スタッフID) と R2(会員ID, 設定日, 経過日数, 体脂肪率, 筋肉量, 体重, 腹囲) に分ければ部分関数従属性が解消され第2正規形になります。
Q: 推移的関数従属性はどのように見抜きますか?
A: 主キーでない属性Aが別の非キー属性Bを決定し、Bがさらに他の非キーCを決定する形(A → B, B → C)。図5にそのような二段階矢印が無いので“なし”と判断します。
Q: 第3正規形とボイス・コッド正規形(BCNF)は同じですか?
A: 第3正規形は「主キー候補か否か」を条件にするため、候補キーでない決定因子があっても主キーが絡めば許容されます。BCNFは「決定因子は常に候補キー」でより厳格です。本設問は第3正規形までの判定です。
関連キーワード: 正規化, 候補キー, 部分関数従属性, 推移的関数従属性, 第3正規形