1

データベース内の重複データをどこまで排除できるでしょうか? あなたはOTTに行くことができ、それは夢中になるからです. 例を挙げましょう...

「name」、「species」、および「country_of_birth」を持つ「Animal」テーブルを含む Zoo データベースを作成するとします。

しかし、多くの動物が同じ国から来ている可能性があり、たとえばトラがたくさんいる可能性があるため、データが重複している可能性があります。

つまり、実際には「Species」テーブルと「Country_of_birth」テーブルが存在するはずですが、しばらくすると、大量のテーブルが作成されることになります。

この質問では、例として 1 つのテーブルを使用しています。Animal テーブルの 1 つの行には、動物園の 1 匹の動物に関する情報が格納されます。その動物の名前、種、生まれた国、そして一意のanimalID。

4

3 に答える 3

1

しかし、多くの動物が同じ国から来ている可能性があり、たとえばたくさんのトラがいる可能性があるため、そこには重複データが存在します。

これは、動物の種類だけでなく、個々の動物を追跡する必要があることを示唆しています。動物園がある種の数字のタトゥーやマイクロチップを使用して個々の動物を識別すると仮定しましょう。

このサンプル データは代表的なものであると仮定します。(そうではありませんが、教えるのには問題ありません。)

Animals
Predicate: Animal having microchip <chip_num> of species <species> 
           has name <name> and was born in <birth_country_code>.

chip_num  name       species          birth_country_code
--
101234    Anita      Panthera tigris  USA
101235    Bella      Panthera tigris  USA
101236    Calla      Panthera tigris  USA
101237    Dingo      Canis lupus      CAN
101238    Exeter     Canis lupus      CAN
101239    Bella      Canis lupus      USA
101240    Bella      Canis lupus      CAN

そのテーブルには冗長なデータはありません。そのテーブルの意味を根本的に変えることなく、これらの列を削除することはできません。これには単一の候補キー (chip_num) があります。5NFです。

非キー列で値が繰り返されます。これは、非キー (非プライム) 列の定義のようなものです。キー列 (またはキー列のセット) の値は一意です。非キー列の値はそうではありません。

「birth_country_code」の値を有効な 3 文字の ISO 国コードに制限する場合は、有効な 3 文字の ISO 国コードのテーブル追加し、外部キー参照を設定できます。これは一般的に良いことですが、正規化とは関係ありません

iso_country_code
--
CAN      
USA

「種」についても同じことができます。それも一般的には良いことであり、正規化とはの関係もありません.

于 2012-12-19T05:29:34.320 に答える
0

システムにとって何が重要かを判断することになります

何か (たとえば、「出生国」) が単なる属性であるか、それ自体が本格的なエンティティであるかの決定は、システムが国について他に何を知る必要があるか、およびシステムが完全に追跡できる属性の数に依存します。機能的に国に依存します。

また、属性が更新異常の影響を受けやすいかどうかも考慮する必要があります。動物の表に記載されている国名が正式な正式名称の形式である場合、たとえば、「ベルギーのコンゴ」が突然「コンゴ民主共和国」になった場合、危険にさらされる可能性があります。待ってください、それはすでに起こっています!

正規化のルールは神聖なものではありません。それらは、ほとんどの場合、問題を回避することを目的とした、非常に便利な経験則です。それでも、ルールは破るために作られています - しかし、故意に、そして慎重に考慮された結果を理解した上でのみ、ルールを破るべきです.

于 2012-12-16T17:14:35.863 に答える
0

まず、テーブルがに関する情報を保持するかを決定します。あなたの例では。個々の動物についての表ですか?それとも動物の種とそれぞれの種の数についてですか? あなたの出身国があるという事実は、誰かがそれを前者にしたいという指標かもしれません. その場合、個々の動物を識別するキーが必要です。個人に関連付けられた属性 (プロパティ) があるため、各行は個人を表す必要があります (すべきでしょうか?)。アイデンティティと個別化のデータベース モデリングの概念については、こちらを参照してください。

これを適切に行うには、実際には、データ モデル内の各要素に対してこれを行い、そのモデルをデータベース テーブルに変換します。

于 2012-12-16T16:38:24.203 に答える