SQL Server: ненулевой уникальный и первичный ключ - PullRequest
3 голосов
/ 15 февраля 2010

Допустим, у меня есть таблица T с некоторым ненулевым полем A. На A есть кластерный индекс. Рассмотрим следующие два варианта:

  1. Я делаю A первичным ключом.
  2. Я создаю УНИКАЛЬНОЕ ограничение для A.

Где разница? Я знаю, что такое первичный ключ, и я знаю, что есть концептуальная разница с W.r.t. теория баз данных. Но в чем фактическая разница в SQL Server? Как движок базы данных SQL Server ведет себя по-другому? В обоих случаях кластеризованный индекс таблицы находится на A; и в обоих случаях я могу обратиться к A через внешние ключи.

(связанный вопрос, который вдохновил этот вопрос: Значение первичного ключа для Microsoft SQL Server 2008 )

Ответы [ 2 ]

5 голосов
/ 15 февраля 2010

Нет. Там действительно нет разницы. Оптимизатор относится к этому так же. В некоторых кругах даже ведутся споры о том, действительно ли первичные ключи действительно необходимы. (Хотя никто не станет утверждать, что вы должны определить хотя бы один уникальный индекс / ограничение для таблицы).

Аргумент против концепции «первичного ключа» может выглядеть так: если у вас есть два столбца в таблице, и они оба уникальны и имеют одинаковый объем данных, который становится PK? Хороший вопрос действительно.

В любом случае, я всегда использую концепцию PRIMARY KEY, потому что она довольно полезна с точки зрения документации и действительно помогает людям понять ваши намерения.

3 голосов
/ 15 февраля 2010

Я никогда не получаю никакой реальной разницы, кроме концептуальной. Но я тоже думаю об этом много раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...