0


report ( id , description) (key: id ) と
registration ( a , b , id_report) (key: ( a , b ));の2 つのデータベース テーブルがあります。

id_report は、レポートidを参照する外部キーです。
テーブル登録には、機能的な依存関係 a -> id_report があります。

したがって、テーブル登録は 1nf ですが、2nf ではありません。

それにもかかわらず、テーブル登録で挿入/更新/削除の問題を見つけることができません。出来ますか?

ありがとう

4

2 に答える 2

1

あなたはコメントで、「問題どのように発生するかを見つけることができなかった」と述べました。(強調を追加) 方法は次のとおりです。

テーブルの「登録」がこのようなデータから始まるとしましょう。

a  b    id_report
--
1  10   13
1  11   13
1  12   13 
2  27   14
2  33   14

機能的な依存関係 a->id_report は引き続き保持されます。「a」の値がわかると、「id_report」の値が 1 つだけ見つかります。

しかし、dbms はその依存関係を直接強制することはできません。これは、dbms がこの更新ステートメントをエラーなしで実行できることを意味します。

update registration
set id_report = 15
where a = 1 and b = 10;

a  b    id_report
--
1  10   15
1  11   13
1  12   13 
2  27   14
2  33   14

今、あなたのデータは壊れています。「a」の値がわかると、「id_report」の値が2 つ見つかります。前の表では、「a」が 1 であることがわかっているということは、「id_report」が 13 であることがわかっていることを意味していました。「a」が 1 の場合、id_report は 13 または 15 のいずれかになります。

于 2012-12-08T18:13:55.420 に答える
0

テーブルを非正規化しても、既存の参照整合性の問題は発生しません。

正規化する理由は、挿入、更新、および削除の異常を作成することをより困難または不可能にすることです。一貫性を保つようにすべての冗長データを管理することは可能ですが、非常に困難です。

トラブルを未然に防ぐためにプログラマーやユーザーに頼らないように、3NF (該当する場合はそれ以上) のデータベースを使用することをお勧めします。遅かれ早かれ間違いは起こります。

于 2012-12-08T12:52:17.423 に答える