序文として、主キーは単一の列である必要はないことに注意してください。複数の列で構成することができます。これは複合キーと呼ばれます。また、すべてのテーブルにAUTO_INCREMENT
があるわけではないことに注意してください。 / IDENTITY
列全体で、UNIQUE
を持つことができます とにかく、複合キー内の単一の列に対する制約。
-
何もありませんが、DBMSが禁止することは意味がありません。 このような冗長性は、その条件を処理するためにロジックと複雑さを追加する必要があるためですが、両方を使用しても実際に害はありません(2つのインデックスを維持する必要があることによるパフォーマンスへの影響を除く)。
-
上で述べたように:機会費用 その冗長性を検出して防止することは価値がありません。
考慮すべきもう1つのことは、テーブルの主キー定義は不変ではないため、変更される可能性があるということです。テーブルには、UNIQUE
の列がすでに含まれている場合があります 制約を設定してから、データベース設計者はそれを主キーの新しい定義に含めることを決定します。特に、アプリケーションシステムの他の部分が依存している場合は、古い制約を最初に削除する必要があるのはユーザーにとって不便です。そのUNIQUE制約が存在する(例:1:0..1
関係の定義)。
(また、AUTO_INCREMENT
UNIQUE
と相互に包括的ではありません またはPRIMARY KEY
:AUTO_INCREMENT
を使用できます 一意でない列を使用する(例:AUTO_INCREMENT
の場合) テーブルにすでにデータが含まれている後に追加されます)、逆にPRIMARY KEY
別のID列を外部キーとして使用するなど(複合主キーには外部キーを含めることができます)、米国の社会保障番号を主キーとして使用するなどの「自然な」データソースなど、他の場所から取得した一意の値を使用できます(もちろん絶対にしないでください 実際にこれを行ってください))。