2

私はデータベースの正規化を理解しようとしています。一般的な考え方は理解していますが、正しいアプローチとは何か、そして何が過剰になるかを理解しています。

たとえば、最初のステップとして、標準の従業員部門データベースがあります。

テーブルは

EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_name

したがって、これを最初のステップとして正規化するために、部門名を別のテーブルに移動し、必要に応じて多対1で結合します。

EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_id
DEPARTMENTS
id, name

これは正規化には十分でしょうか、それとも他のすべてのフィールドdepartment_idを次のような2番目のテーブルに移動する方がよいemployees_metaでしょうか。テーブルに従業員を説明するフィールドがさらに20個あるとしたら、通常はどうなるでしょうか。

Webページの最適化について話している場合、正しい正規化は、employeeテーブルを操作するときに常に表示するフィールドと、頻繁に使用しない他のすべての情報を別のテーブルに移動することです。

4

4 に答える 4

3
EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_name

したがって、これを最初のステップとして正規化するために、部門名を別のテーブルに移動し、必要に応じて多対1で結合します。

EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_id
DEPARTMENTS
id, name

関数従属性に基づいて正規化すると、元のテーブルの列は常に少なくなります。あなたは8で始まり、8で終わりました。

元のテーブルの「department_name」を「department_id」に置き換えました。「テキストをID番号に置き換える」という正規化ガイドラインはありません。これは正規化とは何の関係もないだけでなく、以前は何も必要なかった必須の結合を導入します。

これは、必ずしもテキストをID番号に置き換えることがここで行うのが間違っていることを意味するわけではありません。それはあなたがそれを正規化と呼ぶべきではないという意味ですそうではないからです。

正規化の最初のステップは、候補キーと機能の依存関係を特定することです。

于 2012-10-20T15:51:47.433 に答える
2

都市フィールドを別のテーブルに移動します。これで十分だと思います。データベースの正規化の簡単な鍵は、重複する値を避け、それを単一のテーブルに分割することです。ただし、性別フィールドのようにデータを分離する必要がない場合は、列挙型データ型を使用してから他のテーブルに分離することをお勧めします。

注:クエリでテーブルを結合すると、パフォーマンスが低下します。

于 2012-10-20T11:04:36.553 に答える
2

正規化はエンティティを扱います。モデル内のエンティティを表すすべてのものを分離 (正規化) する必要があります。

人物 (Firstname、Lastname など) を含むテーブルがあり、これらすべての人物がログインするためのユーザー名とパスワードを持つユーザーでもある場合、正規化は必要ありません。

ただし、一部の人のみがユーザーになる場合は、2 つのテーブル (人、person エンティティへのリンクとして person_id を持つユーザー) に正規化する必要があります。また、人およびユーザー エンティティをいくつかの異なる場所に格納する必要がある場合 (人間の関係、レコードにフラグを立てる必要がある場合)を作成して最後に変更したユーザーと)、正規化することをお勧めします。

したがって、CatCall が述べたように、正規化は ID で名前を変更していません。つまり、ルックアップを作成するだけです。

于 2012-10-20T16:25:57.590 に答える
1

都市とともに特定の場所に関する他の情報がある場合は、従業員データとともに郵便番号を保存します。「米国の場所のインデックス」と呼ばれる別のテーブル、または主キー、都市、州として郵便番号を含むものを用意します。状態名の 2 つのバリアント (完全な形と省略形) を保存できます。基本的には、都市と州は郵便番号で簡単に判別できるということです...次のように考えることができます.アメリカの各州には多くの都市があり、各都市には多くの郵便番号がありますが、各郵便番号は特定の都市と州の組み合わせ。たとえば、NYC では、郵便番号 10010 は new York, NY として識別され、10001 は new York, NY として識別されます。ただし、11222 は Brooklyn, NY として識別されます。お役に立てれば。

于 2013-07-29T17:43:18.333 に答える