Первичный ключ используется для обеспечения гарантии уникальности каждой записи в таблице. Он выполняет эту задачу путем создания индекса специального типа, называемого уникальным индексом. Обычный индекс используется для ускорения доступа путем считывания всех значений в столбце и хранении организованного списка, локализующего запись с этим значением. Уникальный индекс генерирует не только этот список, но и не позволяет дублировать значения для хранения в индексе. Если пользователь пытается ввести в индексированное поле дублированное значение, то уникальный индекс вернет ошибку, а модификация данных не будет выполнена.
Предположим, что в качестве первичного ключа вы определили поле CustID таблицы Customers, и в таблице уже имеется клиент с идентификатором, равным 1. Если один из ваших пользователей попытается создать запись о другом клиенте с тем же номером, то он получит ошибку, а обновление не будет выполнено, поскольку значение CustID 1 уже перечислено в уникальном индексе первичного ключа. Конечно, это всего лишь пример: ваше поле CustID имеет заданное свойство identity, котороеавтоматически присваивает номер каждой вставляемой записи и не позволит вводить номера по своему усмотрению.
Первичный ключ должен быть создан из столбца (или столбцов) с уникальными значениями. Столбец identity является идеальным кандидатом на роль первичного ключа, поскольку значения, содержащиеся в нем, являются уникальными по определению. В таблице Customers имеется столбец identity, из которого мы создадим первичный ключ.
1. Откройте SQL Server Management Studio и выполните подключение с использованием аутентификации Windows.
2. В Object Explorer раскройте папки Databases=>Sales=>Tables.
3. Щелкните правой кнопкой мыши на таблице Customers и выберите команду Modify Table.
4. В окне конструктора таблиц щелкните правой кнопкой на поле CustID в столбце Column Name и выберите команду Set Primary Key.
5. Обратите внимание на то, что слева от поля CustID теперь отображен значок ключа, указывающий, что поле является первичным ключом (рис. 18).
6. Когда вы щелкнете в панели инструментов на значке Save, SQL Server создаст уникальный индекс, гарантирующий отсутствие дублированных значений в поле CustlD.
7. Закройте конструктор таблиц.
Эта процедура проста, однако предположим, что нужно поддерживать целостность сущности отдельно в нескольких столбцах. Например, у нас имеется таблица Employees с полем EmployeelD, определенным как первичный ключ, а также поле Social Security Number, в котором требуется обеспечить целостность сущности. Поскольку в таблице может быть лишь один первичный ключ, для обеспечения такой целостности сущности вам понадобится создать уникальное ограничение.