0

ジョブポータルデータベースを作成する予定です。ここでは、いくつかの通知を購読する候補者がいくつかあります。MultiValued依存関係(4NF/5NF)でデータベースを正規化する

Table preview

(当然の候補者の名前が候補が示されていない人、に関連した多くの列を持っているID &になります。) 私はそれが第四または第五正規形の問題であるかどうか混乱しています!冗長性を減らすためにいくつかの助けが必要です。

私は冗長性を削除できるようにIsEnabled情報を失うことなく、これらのテーブルのようなものに分割することはできますか?

Candidate Table

Notification Table

それは可能ですかこれは避けられない冗長性の場合ですか?

答えて

4

どのような角度から見ても、通常のフォームの問題ではありません。

最初のテーブルをそのまま(boolean属性を含む)保持したい場合は、CONSTRAINTです。その最初の表では、(候補、通知タイプ)のすべての可能な組み合わせに対して1つの行が存在する必要があります。しかし、それはNFの問題ではありません!候補または通知タイプのみが与えられた場合、ブーリアン値が何であるべきかを決めることが何らかの形で可能であれば、NFの問題になります。

このアプローチで「冗長性」と誤って認識しているのは、その制約が存在していることと、データベースを更新しているときにあなたの生活を困難にする効果です。

ブール型属性をディッチし、その最初のテーブルに "true"を持つ行のみを書き込みます。今ではそのような制約がなくなり、世界中のデータベースに多数の「ジャンクション」テーブルがあるように、通知タイプを有効にする候補をリンクする通常の「ジャンクション」テーブルだけが存在します。

+0

@BeediKumaraN:はい、あなたのデザイン上の問題は、 '( 'Sasi'、 'Profile View')'でテーブルに行が存在しない場合、 'True'ではなく、 「偽」? –

+0

@Erwin Smout:ありがとう、間違いなくジャンクションテーブルを使用して解決します。 –