幼稚園時代「何組」でしたか?

http://www.techscore.com/tech/sql/16_02.html
のURLの下の方の表

受注番号、商品番号、納入業者
12345  001   業者 A
12345  002   業者 B
12346  001   業者 A
12347  001   業者 D

において、
****以下引用****
このとき、非主キー列「納入業者」は「受注番号」と「商品番号」から決まりますので、(受注番号、商品番号) →納入業者は関数従属の関係が成立しています。よって、このテーブルは第二正規形の条件を満たしていると言えます。(中略)
****引用終わり****
とありますが、私には
商品番号→納入業者
という関数従属関係があるきがするのですが違うのでしょうか?なので第二正規形の時点で、
(商品番号、納入業者)という表が新たに分離される気がするのですが…

さらに、
http://www.st.rim.or.jp/~ryoma/tips/seikika.htm
のURLの同じくボイスコッド正規形で扱われ表、

商品コード、仕入先コード、担当者コード
000120001 111 401
000120001 112 402
000120002 111 401
000120002 150 403

仕入先コード、仕入先名
001 東京商店
002 大阪商会
003 名古屋流通
で、
*引用*
商品コード、仕入先コード、担当者コードを属性とする上の表は、繰り返し部分を持たず、また商品コード+仕入先コード、あるいは商品コード+担当者コードをキーとすることができ、かつ推移従属の関係が存在しないため、第三正規形です。
*終*
とありますが、主キーを【商品コード、仕入先コード】と決めたとき、非候補キーである担当者コードは仕入先コードに関数従属している気が(私は)してしまうので第二正規形へ変形した時点で(仕入先コード、担当者コード)という表が分離されていると思うのですが。
以上の解釈で間違っている考えがあればご指摘ください。

A 回答 (1件)

最初の第二正規形の問題ですが、商品番号001の商品は、業者Aの場合(受注番号12345,12346)と業者D(受注番号12347)の場合が有るようですので、納入業者は商品番号のみでは特定できず、主キーである受注番号と商品番号の組合せによってのみ特定される(主キーに完全関数従属している)様です。


したがって、第二正規形の条件は満たしているかと。


2つ目のボイス・コッド正規形の問題ですが、

> 主キーを【商品コード、仕入先コード】と決めたとき、非候補キーである担当者コードは・・・

主キーを決定しても、他の候補キーが候補キーでなくなる訳ではないので、{ 商品コード, 担当者コード }も主キーでなくとも候補キーではある訳です。
したがって、第二正規形で、【仕入先コード、担当者コード】という表が分離されている必要は有りません。

それから、【商品コード、仕入先コード、担当者コード】の表には、下記の2つの関数従属性が含まれていますが、一つ目の関数従属性は全ての項目に関係していますので、表を分割すると、この情報は失われることになります。

{商品コード, 担当者コード} → 仕入先コード
仕入先コード → 担当者コード

この様にボイス・コッド正規形では、関数従属性が保存されない場合があります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
1つ目についてなのですが、言われて見ればそうですね。ご指摘ありがとうございます。

2つ目については「主キー」を決めてしまえばその他のキーは自動的に非候補キーになると勘違いしていました^^;主キーと候補キーは違うのですね、一緒に考えていたのが原因でした。詳しいご解説ありがとうございます。

お礼日時:2004/06/17 07:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す