2017-08-22 3 views
0

Iのデータは次のように2つのテーブルがあります。私は2つの外部キーは、の主キーであることの両方で別のテーブルを作成しているStudent、Subject、Student-SubjectテーブルのSecond Normal Formはどのようにして達成できますか?

ID SubjectCode 
1 PHY1 
2 PHY2 
3 MATH1 

第1表:

ID NAME GENDER AGE 
1 test1 M  18 
2 test2 F  20 
3 test3 M  18 

2表2つのテーブルの上。以下のようになる:

Student_ID  Subject_ID 
1    PHY1 
2    MATH1 
1    PHY2 
2    PHY2 

この第3のテーブルは、第2のテーブルからテーブルと被験者IDから学生IDを挿入することによって作成されます。しかし、あなたが見ることができるように、1人の学生が複数の科目を申請することができ、それは学生IDの重複を作成します。私はSQLの初心者であり、3番目の表を2番目の正規形に変換したいと考えています。どうすればいいのですか?私がそれを達成するのに役立つ操作はどれですか?

2NFに関して少し混乱しました。しかし、私は3番目のテーブルのIDを繰り返す必要はありません。私は、IDを一意にとどめ、同じIDに対応する新しいサブジェクトコードを別の列に含めるようにします。私は私が尋ねることを意味していることを伝えたいと思う。あなたはそれを達成するために何を提案しますか?

+2

なぜ学生IDの冗長性が2NFを破ると思いますか? 2NFは何と思いますか? –

+3

私は、Su_IDがSubjectCodeではなく、2番目のテーブルのID値でなければならないと推測しています。あなたが学習していると言っているので、私はあなたの主キーIDの命名を習得しないことを提案します。あいまいで挑戦的です。単一の列名は、大きな命名規則ではない使用法に基づいて名前を変更する必要があるため、混乱の原因となります。 –

+1

いいえ、他のファクト表と同じ行(学生またはサブジェクト)への複数の参照は、レディダンスと見なされません。大丈夫です 。 – Serg

答えて

-2

あなたの代わりに下記のようなsubject_code詳細をsubject_idを入力すると良いかもしれません。ここで

ID St_ID  Su_ID 
1 1   1 
2 2   3 
3 1   2 

Idは、第3表および他の2の主キーは、最初の2つのテーブルの外部キーですです

願って2番目のテーブルのIDがプライマリキーであれば、それ以外のこともできます。

+5

これにさらに別のIDを追加するのはなぜですか? St_IDとSu_IDの複合キーが適切であり、おそらくはOPに基づいて1つの学生/サブジェクト関係が存在する必要があるため、おそらくより良い選択です。 –

+0

FWIWこれも第5正規形に違反します。 – JBC

+0

@ JBC予想される解釈、すなわちIDが一意であり、それを第3のテーブルを与えて投影すると、これは5NFである。 IDを追加すると、テーブルの最高のNFは決して変更されません。 – philipxy

1

上位NF(正規形式)への正規化にはFD(機能的な依存関係)が含まれていますが、任意の。 "repeat" & "redundant"のようなあいまいではない用語を使用します。リレーション内の同じ値の複数の出現は、すべてのNFの下に表示されます。あなたはPKs(主キー)について言及していますが、CKs(候補キー)は関係ありません。デザインには複数のテーブルが含まれていますが、テーブルの正規化は他のテーブルとは独立しているため、第1の&第2のテーブルは第3の正規化とは関係ありません。だから、あなたは絶対的な基礎を理解していないことは明らかですし、教科書に従う必要があります。

2NFの2つの共通定義は、「違反している」と言われる特定の種類のFDを持たないという点で表現されています。 すべてが保持するFDを知る必要があることに注意してください。そのようなFDがもはや問題ではない小さなコンポーネントを与える特定の方法で、常に損失のない分解を行うことができます。これは、「FDをそれ自身のコンポーネントに移動して、別のコンポーネントを残す」と合理的に曖昧に呼ばれることがあります。あなたがそれを続けていれば、最終的にすべての2NFコンポーネント - 2NFデザインを持つことになります。

しかし、テーブルを2NFに分解するのは悪い方法です。なぜなら、必要以上に多くのテーブルを作成することができ、後で表示されるNFデザインの良さを排除し、FDを保存できないからです。 FDを保存する3NF algorithmを使用して、2NFを取得します。いずれにしても、より低いNFを通過することによって、より高いNFに正規化することはありません。 (なぜ2NFが重要でないのか)。

PSあなたの第3のテーブルは唯一のCK {Student_ID、Subject_ID}を持ち、5NFです。

関連する問題