2012-04-23 1 views
0

データベースに同じFKを含むテーブルがある場合は、正規化する必要がありますか?複数のテーブルで使用される外部キーのセットをさらに正規化する必要がありますか?

これらは、問題のDBテーブルです:

user (
    user_id int PK, 
    ... 
    ... 
) 

user_cat (
    user_cat_id int PK, 
    user_id int FK, 
    effective_date date, 
    location_id FK,   <-- dup 
    qualification_id FK,  <-- dup 
    business_id FK   <-- dup 
) 

user_admin_cat (
    admin_cat_id int PK, 
    user_id int FK, 
    effective_date date, 
    company_id FK, 
    location_id FK,   <-- dup 
    qualification_id FK,  <-- dup 
    business_id FK   <-- dup 
) 

は、ここで私は重複を最小限に抑えるためにやって考えたものだ:私は学びたい何

user (
    user_id int PK, 
    ... 
    ... 
) 

user_cat (
    user_cat_id int PK, 
    user_id int FK, 
    effective_date date, 
    shared_id, FK   <-- dup 
) 

user_admin_cat (
    admin_cat_id int PK, 
    user_id int FK, 
    effective_date date, 
    company_id FK, 
    shared_id, FK   <-- dup 
) 

shared_user_cat_fks (
    shared_id int PK, 
    location_id FK, 
    qualification_id FK, 
    business_id FK 
) 

は、一つ以上の答えです

(1)正規化ソリューションを使用する場合、それはなぜ優れていますか?
(2)正規化ソリューションを使用しない場合は、どうしますか?このソリューションはなぜ優れていますか?
(3)2つのテーブルに重複があるために正規化ソリューションを使用しない場合、何かを実行する前に重複テーブルがいくつありますか?どのようなソリューションを実装しますか?なぜこれは良い解決策ですか?

答えて

0

1)標準化スキームはよりクリーンな設計であり、維持が容易である。

2)正規化されていないレイアウトが効果の点で優れていることがあります。もし小さなテーブルuser_catに多くのクエリがあり、巨大なクエリuser_admin_catにほとんど問い合わせがなく、誰もUNIONを必要としないなら、効果的かもしれません。

+0

返信ありがとうございましたドミトリー。 –

3

あなたの説明から私はそれを「正規化」する理由は見当たりません。私はこれが正規化とは何の関係もないと言っています。

私の個人的な単純化された規則は次のようなものです:単一の事実の変更に対して1つ以上の挿入/更新/削除を行う必要がありますか?

また、私が表現できない事実の組み合わせもあります。

または、2つの異なる方法で表現できることはありますか?

ここには表示されません。

私の答えは2です:何も問題はないので、何もありません。

隠れた非正規化があるかもしれません。しかし、それはあなたのものではありません。

関連する問題