web-dev-qa-db-ja.com

多対多テーブルの主キーのID値と複合値

私は契約している場所で興味深い「データアーキテクチャ」のディスカッションの途中で、入力が必要です。

習慣として、私は常にSurrogate KeyPrimary Keyとしてテーブルに作成します-それらはGuid(UUID)またはIdentity値です。私見サロゲートキーの synthetic-nature は、「実際の」または「自然な」キーまたは値に侵入することなく行を識別するという明確な値を持っています。 代替キー

私には...それは自然なことのように思えますが、おそらく私は間違っています。

私がたまたまあるところ...彼らはこれを主張します good for "core" Entityテーブルですが、完全に間違っています多対多(関係)テーブルの場合。私は喜んでお客様に義務を課しますが...同意しません。

私のアプローチの背後にある考えは次のとおりです。

  • 主キー値は一意である必要があります
  • 主キーはできるだけコンパクトにする必要があります
  • 主キー値は安定している必要があります
  • 主キーはタプルを識別します...タプル内のデータではありません

私の質問:どちらが正しいですか?なぜ?
-理由などを入力してください.

注:
以下のサンプルのID列の名前は無視してください...それがここでの方法です。

enter image description here

1
Prisoner ZERO

多対多マッピングテーブルmustには、外部キー列に一意のインデックスがあります。また、通常、逆の順序で外部キー列に追加の一意のインデックスが必要です。

そのため、追加の合成キーを追加しても大きな害はありませんが、あまり役に立ちません。