В SQL зачем нам нужен первичный ключ, если мы можем использовать ограничения NOT NULL и UNIQUE вместо первичного ключа? - PullRequest
0 голосов
/ 01 июня 2019

Первичный ключ в SQL - это комбинация ограничений NOT NULL и UNIQUE , с той лишь разницей, что в таблице может существовать только одно ограничение первичного ключа.

Почему мы не можем справиться только с ограничениями NOT NULL и UNIQUE ? Даже они оба делают одно и то же.

Ответы [ 2 ]

3 голосов
/ 01 июня 2019

Определение первичного ключа:

  • Первичный ключ - unique.
  • Первичный ключ - not null.
  • Таблица имеет только один первичный ключ.

Вы спрашиваете о третьем условии. Ну, это определение. «Первичный ключ» - это отдельный набор ключей, которые были явно выбраны для уникальной идентификации каждой строки в таблице. Слово «основной» подразумевает, что в таблице только один. Другие клавиши или комбинации клавиш, которые удовлетворяют первым двум условиям, называются кандидатами в первичные ключи .

Хотя не строго соблюдаются, первичные ключи являются лучшим методом для ссылки на отдельные строки. Они должны использоваться, например, для ограничений внешнего ключа (и любая база данных, с которой я вступаю в контакт, применяет первичные ключи для ограничений внешнего ключа). Наличие нескольких разных ключей, ссылающихся на одну таблицу, приводит в замешательство модель данных. Подумайте о моделировании сущности-отношения. Ссылки должны быть первичными ключами.

Чтобы дать представление об использовании первичных ключей, некоторые базы данных (например, MySQL, использующие механизм хранения InnoDB) по умолчанию используют таблицы кластеров на основе первичного ключа. Таблица может быть кластеризована только один раз, поэтому используется один ключ.

1 голос
/ 01 июня 2019

Вы указали различия между первичным ключом и уникальными ограничениями, но это не единственные различия между ними.

ключ различия между первичным ключом и уникальным ключом - -кластерный индекс создается автоматически при определении первичного ключа, тогда как уникальный ключ генерирует некластеризованный индекс.Вы можете выполнить поиск в Google, чтобы получить представление о кластеризованном и некластеризованном индексе.

Другое отличие состоит в том, что первичный ключ - это уникальное поле в таблице, но оно особенное в том смысле, что таблицасчитает этот ряд своим ключом.Это означает, что другие таблицы могут использовать это поле для создания связей внешнего ключа с самими собой.Уникальное ограничение просто означает, что конкретное поле должно быть уникальным.

...