2

リレーションRがBCNFと3NFにあるかどうかをどのように判断しますか?

私は教科書を読んでいて、あなたが見ている主な属性は3つあると言っていますが、彼らが言っていることを理解するのに苦労しています。 FDの。

3つの属性:属性Aを持つ関係R、およびRの属性のサブセットであるXが与えられた場合、FのすべてのFDX⟶Aについて、次のステートメントのいずれかが当てはまります。

  • A∈X; つまり、それは自明なFDです(∈は「Xにある」を意味します)
  • Xはスーパーキーです
  • AはRのキーの一部です

上位2つはBCNFに対応し、3NFには3つ目が含まれます。

4

1 に答える 1

4

BillKarwinによる本SQLAntipatternsには、303ページのBCNFと3NFに関する良い例がありますが、これは少し複雑ですが、これまで読んだ違いの説明よりも簡潔に違いを指摘していると思います。

たとえば、バグの影響を説明するタグ、バグが影響を与えるサブシステムのタグ、バグの修正を説明するタグの3つのタグタイプがあるとします。各バグには、特定のタイプのタグを最大1つ含める必要があると判断しました。候補キーはbug_idプラス である可能性がありますが、プラスtagである可能性もあります。列のどちらのペアも、すべての行を個別にアドレス指定するのに十分なほど具体的です。bug_idtag_type

bug_id tag      tag_type
------------------------
1234   crash    impact
3456   printing subsystem
3456   crash    impact
5678   report   subsystem
5678   crash    impact
5678   data     fix

次に、本はこの単一のテーブル(3NFを満たす)をBCNFを満たす2つのテーブルに変更します。

bug_id tag
----------
1234   crash
3456   printing
3456   crash
5678   report
5678   crash
5678   data

tag       tag_type
------------------
crash     impact
printing  subsystem
report    subsystem
data      fix
于 2011-10-16T00:39:46.473 に答える