
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 名古屋流通
で、
*引用*
商品コード、仕入先コード、担当者コードを属性とする上の表は、繰り返し部分を持たず、また商品コード+仕入先コード、あるいは商品コード+担当者コードをキーとすることができ、かつ推移従属の関係が存在しないため、第三正規形です。
*終*
とありますが、主キーを【商品コード、仕入先コード】と決めたとき、非候補キーである担当者コードは仕入先コードに関数従属している気が(私は)してしまうので第二正規形へ変形した時点で(仕入先コード、担当者コード)という表が分離されていると思うのですが。
以上の解釈で間違っている考えがあればご指摘ください。
No.1ベストアンサー
- 回答日時:
最初の第二正規形の問題ですが、商品番号001の商品は、業者Aの場合(受注番号12345,12346)と業者D(受注番号12347)の場合が有るようですので、納入業者は商品番号のみでは特定できず、主キーである受注番号と商品番号の組合せによってのみ特定される(主キーに完全関数従属している)様です。
したがって、第二正規形の条件は満たしているかと。
2つ目のボイス・コッド正規形の問題ですが、
> 主キーを【商品コード、仕入先コード】と決めたとき、非候補キーである担当者コードは・・・
主キーを決定しても、他の候補キーが候補キーでなくなる訳ではないので、{ 商品コード, 担当者コード }も主キーでなくとも候補キーではある訳です。
したがって、第二正規形で、【仕入先コード、担当者コード】という表が分離されている必要は有りません。
それから、【商品コード、仕入先コード、担当者コード】の表には、下記の2つの関数従属性が含まれていますが、一つ目の関数従属性は全ての項目に関係していますので、表を分割すると、この情報は失われることになります。
{商品コード, 担当者コード} → 仕入先コード
仕入先コード → 担当者コード
この様にボイス・コッド正規形では、関数従属性が保存されない場合があります。
ありがとうございます。
1つ目についてなのですが、言われて見ればそうですね。ご指摘ありがとうございます。
2つ目については「主キー」を決めてしまえばその他のキーは自動的に非候補キーになると勘違いしていました^^;主キーと候補キーは違うのですね、一緒に考えていたのが原因でした。詳しいご解説ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
沿線コード
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
ADO VBA 実行時エラー3021
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
ACCESSの集計クエリで3件ある...
-
使うべきでない文字。
-
Accessで別テーブルの値をフォ...
-
postgresql DELETE後commit...
-
Excelでセルの書式設定を使用し...
-
割合(パーセント)を求めるに...
-
MERGE文を単体テーブルに対して...
-
抽出したデータを修正して元の...
-
固定値を含む結合と複数テーブ...
-
集計後の数値が倍になる
-
SQLで複数の条件がある場合
-
データセットのレコード更新が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
沿線コード
-
CREATE テーブルでの複数外部...
-
10営業日前の日付を取得したい...
-
Order by句でバインド変数を使...
-
oracleでは出来るけど、access2...
-
【SQL】登録されているかを比較...
-
SQLの実行結果が異なる
-
困っています。ORACLE_SQL 複数...
-
Oracleビュー:同じ意味で異な...
-
SQLにて縦を横へ展開
-
他テーブルの区分を使っての集...
-
ヤマト急便のチェックデジット...
-
SQLの質問
-
オラクル 名称をコードに変換
-
XPアップロード後のアクセスの...
-
娘の学校から出た暗号解読です...
-
【SQL】またぎデータの検索の仕方
-
SQL 特定のカラムが最大値のレ...
-
Oracle 11g 表2の選択結果をキ...
おすすめ情報