1

データベースを作成していて、正規化のステップを完了しました。リレーションの 1 つは、部分的な依存関係によって 2NF に違反していたため、正規化のガイドラインに従って 2 つのリレーションに分割しました。私が疑問に思っていたのは、作成した新しいリレーションには、元のリレーションの主キーに依存する外部キーがあるかということでした。

例えば;

正規化前: R{PK1, PK2, attr1, attr2}

正規化後: R1{PK1, PK2, attr1} R2{PK2, attr2}

PK2 は PK1 と一緒に外部キーを持つべきですか?

助けてくれてありがとう

4

2 に答える 2

0

いいえ。

attr2 は機能的に PK2 のみに依存しているため、attr2 は、特定の値を持つ PK2 を持つすべての行に対して同じ値を持ちます。PK1 を R2 に追加した場合、2 つの選択肢があり、どちらも悪いです。

  1. PK2 の値ごとに R2 に 1 つの行のみを含めることができます。この場合、PK1 の値は 1 つに制限されます。これにより、データが過剰に制約されます。

  2. R2 には多くの行があり、PK2 の値はすべて同じですが、PK1 の値はそれぞれ異なります。もはや 2NF ではなく、元の場所に戻っています。

于 2012-09-12T18:14:43.267 に答える
0

理想的には、R1{PK2} と R2{PK2} の間に結合依存関係を適用する必要があります。残念ながら、ほとんどの DBMS (SQL ベースの DBMS) では、テーブル間の結合依存関係を強制できません。

結合の依存関係を強制できない場合は、少なくとも R1.PK2 を R2.PK2 を参照する外部キーにすることができます。

于 2012-09-12T22:36:56.887 に答える