情報が異なるテーブル(データの冗長性)で繰り返されるという事実は、3NF正規化に対して壊れていますか?
いいえ表の値または変数は、指定されたNFに含まれるかどうかです。これは他のテーブルとは無関係です。 (データベースがすべてNFにある場合は、データベースがNFにあることについても話します。)
正規化は、冗長性を除去するために合理的に言えます。しかし、正規化によって対処されていない多くの冗長性があります。そして、冗長性がたくさんあり、それは悪くありません。また、重複は必ずしも冗長性ではありません。ただデータが繰り返されているので、「情報」が繰り返されるわけではありません。テーブル内にあるかどうかによってデータが示すことは、テーブルの意味によって異なります。
しかし、違うテーブルのデータを複製しても3NFに違反しないという理由だけで、良いデザインの他の原則に違反しないと考えるようです。それは間違っている。また、重要な5NFです。 NFが低い唯一の理由は、SQL DBMSが5NFをうまくサポートしていないことです。
他のテーブルに値を入れて、別のテーブルのプライマリキーでどのような属性が識別されているのだろうか?
私は値を1つのテーブルにそれぞれ入れて、共有キーを含むクエリを介して2番目のテーブルを再構築する必要がありますか?つまり、データベースの残りの部分を照会して列の値を取得できる場合は、その列を持たないようにする必要がありますか?一般的に言えば、はい。
あなたの質問は誤解されています。それは "(排他的な)または"の問題ではない。両方をする必要があります。
私は、PerHourとHoursWorkedをPersonから取得して給与を計算してから掛けます。私はこれも冗長データであると聞きました。これは、テーブル内の既存のデータからデータを外挿することができるためです。
代わりにクエリを使用できるため、残りのデータベースでは冗長です。給与額を適切に制限しないと、冗長性が悪化します。たとえ列や制約を行っても、スキーマが複雑になります。
しかし、3NFの正規化を解除しますか?
いいえ。テーブルのNFが他のテーブルと独立しているためです。しかしそれはそれが大丈夫であることを意味しません。
(あなたは人に給与を追加した場合は、新しいテーブルが3NFではないだろう。しかし、その後、SQLのDBMSは、給与と3NFのビューを非3NFテーブルを作ることで、それがOKにする計算列を持っていますテーブルなし)
いくつかのデータベース設計方法と、それらがどのように優れた設計の原則を適用するかを学びます。あなたのテーブルは、アプリケーションの重複する側面に不必要に対処します。また、クエリを書く際のJOINについても学びます。
これは正規化の点では壊れています。なぜ "名前"がどこに現れているのですか?その情報がPersonレコードに統合されていないのはなぜですか?パフォーマンス上の理由から意図的に非正規化を行っている場合は、このデータを同期させ、各フィールドの標準ソースを理解する方法がありますか? PhoneNumberに* 2 *の数字が含まれているのはなぜですか?あなたはここで多くの仕事をして細部を細分化しています。 – tadman
あなたは[ゼロ、1つまたは無限](http://ja.wikipedia.org/wiki/Zero_one_infinity_rule)しか持っていないことを覚えておいてください。だから、テーブルとしての「セカンド・ジョー」は非常に懸念している。もし彼らが第三の仕事をしていたら?四番目? 19番?人々はキャリアを変え、昇進させられ、移転され、それは人々がN回切り替えることが期待される。同様に、給与情報は、人物ではなく職務に関連付ける必要があります。 – tadman
あなたの応答のフィードバック: 1. 2番目のポストには実際に有効なポイントがありますが、「正規化の点では壊れました」などの点を指摘しています。 2. Secondjobは単なる名前です。それがどのように形成されているのか、いくつかの異なる仕事がそれを埋めることを可能にします - IDによる外部キー参照。 3.正規化は依然として主キーと前記キーのwholy識別に依存していました。データの重複がありました。しかし、電話の部分は、変更が必要です。 –