Иногда несколько столбцов или групп столбцов таблицы имеют уникальные значения и поэтому могут быть использованы в качестве первичного ключа. Все столбцы или группы столбцов, которые могут рассматриваться как первичные ключи, называются кандидатами в ключи. Каждый кандидат в ключи определяется с использованием предложения unique в операторе create table или alter table.
Предложение unique имеет следующую форму:
[constraint с_пате]
unique [clustered | nonclustered] ([col_namel] ,...)
Опция constraint в предложении unique назначает явное имя кандидату в ключи. Опция clustered или nonclustered соответствует тому факту, что Database Engine всегда генерирует индекс для каждого кандидата в ключи таблицы. Индекс может быть кластеризованным, т. е. физический порядок строк в индексе соответствует порядку значений столбцов индекса. Если порядок не задан, индекс является некластеризованным. Значение по умолчанию - nonclustered. Параметр coi_namei - имя столбца, который входит в состав кандидата в ключи. Максимальное количество столбцов для кандидата в ключи равно 16.
Пример 5.6 демонстрирует использование предложения unique.
Каждое значение столбца projectno в таблице projects является уникальным, включая значение null. (Точно так же, как и любое другое значение в ограничении unique, если значения null допустимы для соответствующего столбца, то в таблице может присутствовать не более одной строки со значением null для данного столбца.) Если значение, которое уже присутствует в таблице, будет помещаться в столбец projectno, то система отвергнет эту операцию. Ограничение, которое определено в примере 5.6, имеет явное имя unique_no.