Като предисловие имайте предвид, че не е необходимо първичният ключ да бъде една колона:той може да се състои от множество колони:това е известно като съставен ключ. Също така имайте предвид, че не всяка таблица има AUTO_INCREMENT
/IDENTITY
колона изобщо и можете да имате UNIQUE
ограничение върху една колона вътре в съставен ключ така или иначе.
-
Няма такъв - но няма смисъл СУБД да забранява такова излишък или защото ще ви е необходима допълнителна логика и сложност, за да се справите с това условие, докато няма реална вреда от наличието и на двете (освен въздействието върху производителността от необходимостта да поддържате два индекса).
-
Както казахме по-горе:защото алтернативната цена откриването и предотвратяването на това излишък не си струва.
Друго нещо, което трябва да имате предвид е, че дефиницията на първичен ключ на таблица не е неизменна и следователно подлежи на промяна. Една таблица може вече да има колони с UNIQUE
настройка на ограничение и след това дизайнерът на базата данни решава да включи това в нова дефиниция на първичния ключ - би било неудобно за потребителя да се изисква първо да се премахне старото ограничение, особено ако други части от тяхната приложна система зависят от това УНИКАЛНО ограничение е налице (напр. 1:0..1
дефиниция на връзка).
(Също така, AUTO_INCREMENT
не се включва взаимно с UNIQUE
или PRIMARY KEY
:можете да използвате AUTO_INCREMENT
с неуникални колони (напр. ако AUTO_INCREMENT
се добавя, след като таблица вече съдържа данни), и обратното PRIMARY KEY
може да използва уникални стойности, получени от другаде, като например друга колона за самоличност като външен ключ (съставните първични ключове могат да съдържат външни ключове!) или "естествен" източник на данни, като например използване на номер на социално осигуряване в САЩ като първичен ключ (разбира се не трябва да никога направете това в действителност)).