5

私はデータベース設計にかなり慣れていません。多対多の関係について、複合キーと一意のIDを作成することの違いと意味は何ですか。

Countryテーブル

CountryID
CountryName

Languageテーブル

LanguageID
LangugageName

多対多のテーブル-コンポジットを使用:

CountryID  Pkey
LanguageID Pkey

また

一意のIDの使用:

AutoID Pkey
CountryID 
LanguageID 
4

2 に答える 2

3

複合キー :

複合キーは、テーブル内の一意の行を識別するための複数の列の組み合わせです。複合キーは主キーにすることができます。

主キー

PRIMARY KEY 制約は、データベース テーブル内の各レコードを一意に識別します。

そのすべてはあなたの要件に依存します

最初のデザイン

Many to Many Table:
Using composite:
CountryID  Pkey
LanguageID Pkey

CountryID よりもこのデザインを使用する場合、LanguageID は複合主キーです。

テーブルのデータは

CountryId  LaguageID
  1           1 //valid
  1           2 //valid
  1           3 //valid
  1           1//not valid data as its form composite primary key

そして2番目のデザインで

Using Unique Id:
AutoID Pkey
CountryID 
LanguageID 

AutoID が主キーになるため、これによりデータのようなデータが許可されます

AutoId    CountryId  LaguageID
 1          1           1 //valid
 2          1           2 //valid
 3          1           3 //valid
 4          1           1 //valid as AutoID is primary key
 1          2           3 // invalid as AutoID is prinary key

このプレゼンテーションが違いを理解するのに役立つことを願っています

于 2012-11-01T08:09:52.370 に答える
0

複合キーと一意のIDを作成することの違いと意味は何ですか?

いかなる場合でも接続の重複を避けるために、{CountryID、LanguageID}に「自然」キーを作成する必要があります。唯一の質問は、{AutoID}に「代理」キー必要かどうかです。

代理キーの理由:

  • このジャンクションテーブルを参照する子テーブルがあります(FKをスリムに保つか、ON CASCADE UPDATEの伝播を防ぎたい)。
  • 単純なPKが好きなORMを使用しています。

これらの理由のいくつかが当てはまらない限り、自然キーのみを使用してください。

ところで、クラスタリングをサポートするDBMSでは、通常、このような自然キーがクラスタリングキーの候補として適しています。テーブルをクラスタリングする場合、他のすべてのインデックス(サロゲートキーの下のインデックスなど)には、クラスタリングキーデータのコピーを保持する必要があり、二重になる可能性があるため、(ヒープベースのテーブルのインデックスと比較して)余分なオーバーヘッドがあります-見上げる。

参照:主キーとしての列または主キーとしての2つの外部キー

于 2012-11-01T12:52:35.860 に答える