データベース
次の関係スキーマは第1正規形(1NF)を満たしているが、第2正規形(2NF)を満たしていない。この理由として、正しいものはどれか。 関係スキーマ: 受注明細(受注番号, 商品コード, 商品名, 数量) 主キー: {受注番号, 商品コード}
ア.商品名が,複合主キーの一部である商品コードにのみ関数従属しているから正解
イ.数量が,複合主キーの一部である受注番号にのみ関数従属しているから
ウ.受注番号から商品コードを経由して商品名が決まる,推移的関数従属性があるから
エ.主キーを構成する受注番号と商品コードの間に関数従属性があるから
解説
2NF違反の正体は「複合主キーの一部だけで決まる属性がいる」こと。宅配便の伝票で例えると、「伝票番号+商品ID」が一緒になって初めて意味をなすのに、商品名だけが商品IDを見ればわかってしまう——そんな「ズル」をしている属性が問題です。
なぜ ア が正解か
2NFの定義は「すべての非キー属性が、主キー全体に完全関数従属している」こと。この表では商品名は{受注番号, 商品コード}という複合主キー全体ではなく、商品コードだけで一意に決まります(どの受注番号であっても商品コードが同じなら商品名は同じ)。これを部分関数従属といい、2NF違反の定義そのものです。解消するには受注明細(受注番号, 商品コード, 数量)と商品(商品コード, 商品名)の2つに分解します。
出典: AI生成問題(学習用)