2

Stack Overflowや他のWebサイトで、コンポジットキーとサロゲートキーに関する白熱した議論を読んでいます。与えられた議論のいくつかに戸惑いましたが、それぞれの長所と短所を認識していると感じています。

代理キーを探したくなりますが、別の質問があります。私の状況を説明させてください。一意の組み合わせを構成する5つの整数で構成されるテーブルがあり、このエンティティを参照するテーブルがいくつかあります。現在、すべてのテーブルには5つのフィールドすべてが含まれており、すべてのJOIN操作では5つのフィールドすべてを結合基準として指定する必要があります。これで、代理キーを追加しました。しかし、「メイン」テーブルを参照する代理外部キーを優先して、すべてのテーブルから5つのフィールドすべてを削除する必要がありますか?

他の表では、5つのフィールドのそれぞれが選択基準として頻繁に使用されるため、これを行うことに不安を感じています。選択操作が高速に実行されるように、特定の自然な順序でインデックスが定義されています。5つのフィールドすべてを別のテーブルに移行する場合、最初の3つを選択する場合は、JOINを定義してそこから選択する必要がありますが、インデックスは定義されていません。そのJOINは生成されたばかりなので、パフォーマンスが低下します。

または、5つのキーを含む各テーブルのVIEWを何らかの方法で定義し、そのインデックスを作成する必要がありますか?

私は混乱していると感じ、これらすべてを入力した後、再び自然キーを使い続ける傾向がありました。ヘルプ?

4

2 に答える 2

2

5つの一意のフィールドと代理の主キーを含む1つのテーブルを用意することをお勧めします。そのテーブルでは、各フィールドにインデックスを作成し、5つのフィールドに一意性制約を設定できます。次に、他のテーブルに5つのフィールドがある代わりに、1つの列だけがあります。

于 2010-02-04T19:38:51.503 に答える
1

サロゲートキーを導入するという非常に具体的な目標がない限り、それが機能する限り、私はおそらくそれをそのままにしておきます。

于 2010-02-04T19:32:20.803 に答える