В логической модели таблица должна иметь хотя бы один ключ. Нет причин для арбитражного определения того, что один из ключей является «основным»; все ключи равны. Хотя понятие «первичный ключ» можно проследить до ранней работы Теда Кодда, ошибка была поднята на ранней стадии уже давно исправлена в реляционной теории.
К сожалению, PRIMARY KEY
нашел, что это путь в SQL, и с тех пор нам пришлось жить с ним. Таблицы SQL могут иметь повторяющиеся строки и, если вы считаете, что набор результатов запроса SELECT
также является таблицей, то таблицы SQL также могут иметь дублирующие строки. Теоретики отношения не очень любят SQL. Тем не менее, только потому, что SQL позволяет вам делать всевозможные дурацкие нереляционные вещи, это не значит, что вы должны их действительно делать. Является хорошей практикой, чтобы каждая таблица SQL имела хотя бы один ключ.
В SQL, используя PRIMARY KEY
сам по себе, имеет значение, например. NOT NULL
, UNIQUE
, ссылка по умолчанию для внешних ключей. В SQL Server использование PRIMARY KEY
само по себе имеет последствия, например. кластеризованный индекс таблицы. Однако во всех этих случаях неявное поведение можно сделать явным, используя специальный синтаксис.
Вы можете использовать UNIQUE
(ограничение, а не индекс) и NOT NULL
в сочетании с принудительным применением ключей в SQL. Поэтому нет, первичный ключ (или даже PRIMARY KEY
) не требуется в SQL Server.
Только для записей (и людей, ищущих google или bing): Я считаю, что ответ на этот вопрос действителен для каждой базы данных SQL (MySQL, Oracle, PostgreSQL, ...). – BlaM