Между ограничениями первичного ключа и ограничениями на уникальность существует два глобальных отличия. Первое состоит в том, что первичные ключи используются вместе с внешними ключами для обеспечения целостности ссылок, чего не могут уникальные ключи. Второе отличие заключается в том, что ограничения на уникальность позволяют вставлять в поле пустые значения, чего нельзя делать с помощью первичных ключей. Во всем остальном они служат одной цели — обеспечить уникальность данных, вставляемых в поле.
Ограничение на уникальность следует использовать в тех случаях, когда нужно гарантировать, что дублированные значения не будут добавляться в поле, не являющееся частью первичного ключа.
Поскольку идеального кандидата на роль уникального ограничения в наших таблицах нет, вы можете создать его в поле Phone.
1. В SQL Server Management Studio щелкните на кнопке New Query.
2. В раскрывающемся списке баз данных в панели инструментов выберите Sales.
3. Введите и выполните следующий код:
ALTER TABLE customers
ADD CONSTRAINT CK_Phone
UNIQUE (Phone)
4. В окне Object Explorer щелкните правой кнопкой на базе данных Sales и выберите команду Refresh.
6. Ваше уникальное ограничение будет перечислено в папке Keys вместе с первичным ключом, созданным ранее (рис. 19).
Рис. 19. В папке Keys перечислено также и ограничение на уникальность
Теперь вы можете протестировать ограничение на уникальность, попытавшись добавитъ несколько дублирующихся телефонных номеров посредством Query Analyzer с помощью инструкции INSERT.
1. Выберите пункт меню Query=>New Query.
2. Введите и выполните следующий код, добавляющий новую запись в таблицу Customers:
3. Повторите выполнение запроса. Запрос не был выполнен, а в нижней части появилось сообщение о том, что дублированный телефонный номер нарушает ограничение UNIQUE_KEY .
Итак, вы знаете, как защитить вводимые в таблицу данные путем обеспечения целостности домена и сущности; осталось рассмотреть еще один тип целостности. Вам нужно знать, как защитить связанные данные, хранящиеся в разных таблицах, путем обеспечения целостности ссылок.