Разница между первичным ключом и уникальным индексом (или ограничением) является то, что нулевые значения не допускаются в столбец первичного ключа. Нет необходимости иметь первичный ключ в таблице, но облегчает внешнему приложению редактирование строк в таблице, и даже тогда это не обязательно для большинства внешних приложений.
С точки зрения производительности, это ничего не меняет. Важным является наличие или отсутствие индексов (уникальных или нет, сгруппированных или нет и с нулевыми значениями или нет), а первичный ключ по существу является просто еще одним уникальным индексом без нулевого значения.
Для кластерного индекса столбец не обязательно должен быть уникальным и/или без нуля. Столбец с дубликатами и нулевыми значениями подходит для создания кластерного индекса.
Для внешнего ключа он должен ссылаться на столбец с уникальным индексом на нем, но необязательно на первичный ключ или без нулевого значения. Совершенно легально ссылаться на столбец, который не является первичным ключом, и допускает нулевое значение, поскольку на нем есть уникальный индекс. Обратите внимание, что, поскольку на нем должен быть уникальный индекс, этот столбец не может иметь больше одного значения null.
Не существует ограничений на столбец внешнего ключа (столбец на чужом столе), но производительность по умолчанию, установка индекса на нем часто бывает хорошей.
Я считаю, что уникальные кластеризованные ключи также получат до 4 байтов для определения данных. Поэтому колонка имени не обязательно должна быть уникальной. –
Рассмотрите вопрос, например, на [DBA.SE] (http://dba.stackexchange.com/). У нас очень целевая аудитория, которая хотела бы ответить на такие вопросы. –