web-dev-qa-db-ja.com

リレーションがBCNFにあるかどうかを確認します

以下の関係と機能の依存関係があります。

R = ABCDE
F: C->AB, D->A, BE->CE, E->B

この関係がBCNFにあるかどうかを確認する必要があります。

ウィキペディアはこう述べています:

...すべての依存関係X→Yの場合に限り、次の条件の少なくとも1つが成立します。[4] X→Yは自明な機能依存関係(Y⊆X)XはスキーマRのスーパーキー

それで、私は最初にスーパーキーを見つけました。

Dは右側にないため、スーパーキーにDが含まれている必要があります。

私が思ったのは、唯一のスーパーキーはDEだということです。これは正しいです?

そして、唯一のスーパーキーがDEである場合、機能依存関係のいずれにも左側にスーパーキーがないため、BCNFでは関係is notになります。

私が間違っていると誰かが指摘できますか?

2
Tool

「アームストロングの公理は、リレーショナルデータベースのすべての機能的な依存関係を推論するために使用される公理(またはより正確には、推論規則)のセットです」( link )。

  • R:ABCDE
  • F:C-> AB、D-> A、BE-> CE、E-> B

BE-> CEは、BE-> CとBE-> Eに分割できます。些細な機能依存関係BE-> Eはスキップできます。 BE-> CとE-> BからE-> Cを推定できるため、BE-> CはE-> Cに置き換えることができます。したがって、機能の依存関係のセットは次のように削減できます。

  • R:ABCDE
  • F:C-> AB、D-> A、E-> C、E-> B

AとBは、機能的な依存関係の左側のサイトに見つからないため、キーのメンバーにすることはできません。したがって、リレーショナルシステムのすべてのキーを検索するだけで十分です(Rから属性A Bを削除し、AとBを含むすべての機能依存関係を削除します)。

  • R:CDE
  • F:E-> C

Cは機能依存関係の左側にないので、システムを次のように削減できます。

  • R:DE
  • F:

したがって、機能IDのリストFは空です。このリレーショナルシステムの唯一のキーはDEであり、これは還元されていないシステムの唯一のキーでもあります。だからあなたの最初の質問のあなたの答えは真実です。

このページ を使用して候補キーを見つけることができます

システムがBCNFにあるかどうかを確認するために、すべての候補キーを見つける必要はありません。キーではない左側を持つ1つの機能依存関係を見つけるだけで十分です。

C-> ABはそのような機能的な依存関係です。Cの閉包がCであるため、Cはキーではありません。これは、Cに機能的な依存関係を適用することによって、それ以上の属性を生成できないことを意味します。

このページ を使用して、関係が通常の形式であるかどうかを確認できます。

3
miracle173