2016-08-24 5 views
0

私はデータベース内のすべてのテーブルの主キーを1つのテーブルの外部キーとして参照することはできますか?

Household(Primary key - hid) 
People(Primary key - pepid) 
ParChildOld(Primary key - pcoid) 
Job(Primary key - empid) 
School(Primary key - schlid) 
Pension(Primary key - penid) 

のようなテーブルが今、私は別のテーブル内の各世帯の人々の詳細についてさまざまな属性を持っているこのデモデータベースを作成しようとしています。

すべてのテーブルのプライマリキーを取得し、1つのテーブルを作成します。たとえば、AllKeysと言い、この特定のテーブルの外部キーとして参照できますか?

すなわち:

AllKeys Table 
Primary Key: AKid 
-- Other columns include 
foreign keys- hid,pepid,pcoid,empid,schid,penid* 

これは聞いて愚かであるかない場合、私は知らないが、、

が許可され、このような参照ですか?正規化された形式とみなすことはできますか? AllKeysテーブルと他のテーブル(クエリに応じて)を結合するこのような方法で実行されたクエリは効率的に動作しますか?

+0

私は質問が何であるかを正確にわからないが、あなたはあなたの外部キーが参照しているテーブルを正確に指定する必要があります。一つだけ。 (ただし、同じ列に多くの外部キー制約があり、すべて異なるものを指しています) – Thilo

+1

それは使用できますが、それはすべてur要件に依存します.. –

+0

それは可能ですが、もっと重要なことは適切ですか?あなたのテーブル名(AllKeys)は、そのような使用を正当化するかもしれないビジネス述語を呼び起こさない。なぜあなたはこれをしたいのですか/このテーブルの意味は何ですか? – reaanb

答えて

1

これらのテーブルがすべて関連していても、テーブルに機能的および複数の値の依存関係を持つ3番目と4番目の通常のフォームが失敗する可能性があります。

1世帯(hid = 1)、2人の親(pepid = 1,2)、2人の子供(pepid = 3,4)、4人の親の関係を保存するのに必要な膨大な複製量を考慮してください(pid = 1,2,3,4)、2つの雇用(empid = 1,2)、子供(schlid = 1)と2つの年金(penid = 1,2)のための1つの学校。

AKid | hid | pepid | pcoid | empid | schlid | penid 
-----|-----|-------|-------|-------|--------|------ 
1 | 1 | 1  | 1  | 1  | null | 1 
2 | 1 | 1  | 2  | 1  | null | 1 
3 | 1 | 2  | 3  | 2  | null | 2 
4 | 1 | 2  | 4  | 2  | null | 2 
5 | 1 | 3  | 1  | null | 1  | null 
6 | 1 | 3  | 2  | null | 1  | null 
7 | 1 | 4  | 3  | null | 1  | null 
8 | 1 | 4  | 4  | null | 1  | null 

もう一つの問題は、テーブルParChildOldは、親と子の列が含まれていると仮定すると、あなたはpepidは親や子を参照するかどうか、AllKeysでpcoid参照のためかどうかを指定する方法がない、ということです。

要するに、しないでください。

+0

ありがとう..例が混乱を解消しました。 – Shachi

1

いいえ、複雑さが増します。

あなたはこれらのテーブルは、デッドロック(DBエンジンは、使用しようとしているものに応じて)を作成することが
  • により大規模なDML操作にFKSとあなたの全体のDBが停止しますを維持するために余分なコードを記述する必要があります
    1. ほとんどのクエリがこのテーブルに依存するため応答します

    データを正規化された形式で保存し、クエリに努力して維持します。

    (どのようにクエリを行うかに応じて)テーブルの適切なインデックス作成に重点を置く必要があります。

    David Scarlett has defined it with a very nice example.

  • +0

    それを得ました。 – Shachi

    関連する問題