BCNFと3NFの違い
BCNF定義の使用
すべての依存関係X→Yの場合に限り、次の条件の少なくとも1つが成立します。
- X→Yは自明な機能依存(Y⊆X)、または
- XはスキーマRのスーパーキーです
と3NFの定義
その機能依存関係X→Aのそれぞれについて、以下の条件の少なくとも1つが当てはまる場合に限ります。
- XにAが含まれている(つまり、X→Aは些細な機能依存である)、または
- Xはスーパーキーです、または
- AXのすべての要素、AとXのセットの違いは主要な属性です(つまり、AXの各属性はいくつかの候補キーに含まれています)
簡単に言えば、次の違いがあります。
- BCNFの場合:すべての部分キー(基本属性)は、スーパーキーにのみ依存できます。
一方
- 3NFの場合:部分キー(素数属性)は、スーパーキーではない属性(つまり、別の部分キー/素数属性または非素数属性)にも依存する可能性があります。
どこ
- プライム属性が候補キーで見つかった属性であり、
- 候補キーは、その関係のための最小限のスーパーキーで、
- スーパーキー、それがその変数に割り当てられたすべての関係で、どの2つの別個のタプルこのset.Equivalentlyスーパーキーの属性について同じ値を持つ(行)が存在しないことを保持するための関連変数の属性の集合であることもスキーマのすべての属性が機能的に依存する関係スキーマの属性のセットとして定義されます。(スーパーキーには常に候補キーが含まれます/候補キーは常にスーパーキーのサブセットです。リレーションに任意の属性を追加して、スーパーキーの1つを取得できます。)
つまり、候補キーの部分的なサブセット(完全なセットを除く重要なサブセット)は、スーパーキー以外のものに機能的に依存することはできません。
BCNFにないテーブル/リレーションは、別のユーザーがピザの例で言及した更新異常などの異常の影響を受けます。残念ながら、
- BNCF は常に取得できるとは限りませんが、
- 常に 3NF が得られます。
3NFとBCNFの例
違いの例は現在、Wikipediaの「3NF table not BCNF(Boyce–Codd normal form)」にあります。ここでは、次の表は3NFを満たしていますが、BCNFを満たしていません。 "Rate Type"(スーパーキーではない部分的なキー/プライム属性)に依存します。これは、データベースのクライアントであるテニスクラブに尋ねることによって決定できる依存関係です。
今日のテニスコートの予約(BCNF ではなく 3NF)
Court Start Time End Time Rate Type
------- ---------- -------- ---------
1 09:30 10:30 SAVER
1 11:00 12:00 SAVER
1 14:00 15:30 STANDARD
2 10:00 11:30 PREMIUM-B
2 11:30 13:30 PREMIUM-B
2 15:00 16:30 PREMIUM-A
テーブルのスーパーキーは次のとおりです。
S1 = {Court, Start Time}
S2 = {Court, End Time}
S3 = {Rate Type, Start Time}
S4 = {Rate Type, End Time}
S5 = {Court, Start Time, End Time}
S6 = {Rate Type, Start Time, End Time}
S7 = {Court, Rate Type, Start Time}
S8 = {Court, Rate Type, End Time}
ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey
3NFの問題:部分的なキー/素数属性「コート」は、スーパーキー以外のものに依存しています。代わりに、部分的なキー/プライム属性「レートタイプ」に依存しています。つまり、コートをアップグレードする場合はユーザーがレートタイプを手動で変更する必要があり、レート変更を適用する場合は手動でコートを変更する必要があります。
- しかし、ユーザーが裁判所をアップグレードしたが、レートを上げることを忘れた場合はどうなりますか?または、誤ったレートタイプが裁判所に適用された場合はどうなりますか?
(技術的には、「レートタイプ」->「コート」機能の依存関係に違反しないことを保証できません。)
BCNFソリューション:上記のテーブルをBCNFに配置する場合、指定された関係/テーブルを次の2つの関係/テーブルに分解できます(レートタイプが裁判所とメンバーシップのステータスのみに依存していることがわかっていると仮定すると、私たちのデータベースのクライアント、テニスクラブの所有者に尋ねることによって発見してください):
レートのタイプ(BCNFおよびBCNFによって暗示されるより弱い3NF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
今日のテニスコートの予約(BCNFおよびBCNFが暗示する弱い3NF)
Member Flag Court Start Time End Time
----------- ----- ---------- --------
Yes 1 09:30 10:30
Yes 1 11:00 12:00
No 1 14:00 15:30
No 2 10:00 11:30
No 2 11:30 13:30
Yes 2 15:00 16:30
解決した問題:裁判所をアップグレードした場合、レートタイプにこの変更が反映されることを保証でき、裁判所に誤った価格を請求することはできません。
(技術的には、機能の依存関係「レートタイプ」->「コート」に違反しないことを保証できます。)