ПЕРВИЧНЫЙ КЛЮЧ - это ограничение - это логический объект, который говорит о правилах, которых должны придерживаться ваши данные. Индекс - это структура доступа - он говорит о том, как машина может искать данные. Для реализации PRIMARY KEY большинство СУБД использует индекс.
Некоторые СУБД (например, MySQL) не проводят различия между ограничением PRIMARY KEY или UNIQUE и индексом, который используется для его реализации. Но, например, Oracle делает: в оракуле вы можете сделать что-то вроде: ALTER TABLE t DROP pk KEEP INDEX
. Это полезно, если вы хотите изменить определение первичного ключа (например, вы заменяете естественный первичный ключ суррогатным первичным ключом), но по-прежнему хотите иметь уникальное ограничение на исходные столбцы первичного ключа без перестройки индекса , Это имеет смысл, если индекс очень большой и потребует значительной таблицы и ресурсов для перестройки.
Из того, что я вижу, MS SQL не делает различий. Я имею в виду, что такой инструмент, как Management Studio, отображает «Ключи», «Индексы» и «Ограничения» в разных папках, но изменение имени одной немедленно меняет имя соответствующих объектов в других папках. Поэтому я думаю, что в данном случае различие на самом деле отсутствует.