応用情報技術者試験について学習中です。
そこで調べたついでに理解出来たことを載せていきます。
平成30年秋 第28問
「どの非キー属性も、主キーの真部分集合に対して関数従属しない」とは?
◇用語の確認
用語 | 意味 |
---|---|
内容A | 内容B |
主キー | レコードを一意に特定する列(複数列のこともある) |
非キー属性 | 主キーでない他の列 |
真部分集合(しんぶぶんしゅうごう) | 主キーの一部だけを取り出した集合(主キー全体ではない) |
関数従属(かんすうじゅうぞく) | A → B のとき、A が決まると B が1つに決まる |
◇結論
非キー列が、主キーの一部の列だけで決まってはいけない。
→ それを防ぐのが「第2正規形(2NF)」です。
◇具体例で説明
主キーが複合キー(2列以上)である場合
たとえば、以下のような表があるとします:
学生ID | 講義ID | 成績 | 学生名 |
---|---|---|---|
A001 | C101 | 85 | 山田太郎 |
A002 | C101 | 92 | 佐藤花子 |
主キー:学生ID + 講義ID(この2つでレコードが一意に決まる)
•非キー属性:
•成績(←OK、2つの主キーがないと決まらない)
•学生名(←問題あり)
→ 学生名は「学生IDだけで決まる」(= 主キーの一部で決まる)
→ これは「主キーの真部分集合に対して関数従属」していることになります。
→ 第1正規形ではOKだけど、第2正規形ではNG。
第2正規形(2NF)の意味は?
主キーが複合キーのとき、
非キー属性が主キーの一部だけで決まるような依存関係を禁止する
つまり:
• × 主キーの一部(例:学生ID) → 非キー属性(例:学生名)
• 〇 主キー全体(例:学生ID + 講義ID) → 非キー属性(例:成績)
⸻
◇なぜ良くないのか?
•同じ学生が複数の講義をとるたびに、学生名が繰り返し出てくる
•名前を変更するときに複数箇所を更新しなければならず、不整合が起こる可能性あり
→ 「分離(分割)」して正規化するべき
◇まとめ
条件 | 意味 |
---|---|
「どの非キー属性も、主キーの真部分集合に対して関数従属しない」 | 主キーの一部だけで決まるような非キー属性を排除する(2NFの条件) |
ChatGPT参照