Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab5_SQL.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

Использование первичных ключей

Первичный ключ используется для обеспечения гарантии уникальности каждой за­писи в таблице. Он выполняет эту задачу путем создания индекса специального типа, называемого уникальным индексом. Обычный индекс используется для ускорения доступа путем считывания всех значений в столбце и хранении организованного списка, локализующего запись с этим значением. Уникальный индекс генерирует не только этот список, но и не позволяет дублировать значения для хранения в индексе. Если пользователь пытается ввести в индексированное поле дублированное значение, то уникальный индекс вернет ошибку, а модификация данных не будет выполнена.

Предположим, что в качестве первичного ключа вы определили поле 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, в котором требуется обеспечить целостность сущности. Поскольку в таблице может быть лишь один первичный ключ, для обеспечения такой целостности сущности вам понадобится создать уникальное ограничение.

Рис. 18. В таблице создан первичный ключ

Использование ограничений на уникальность

Между ограничениями первичного ключа и ограничениями на уникальность существует два глобальных отличия. Первое состоит в том, что первичные ключи ис­пользуются вместе с внешними ключами для обеспечения целостности ссылок, чего не могут уникальные ключи. Второе отли­чие заключается в том, что ограничения на уникальность позволяют вставлять в поле пустые значения, чего нельзя делать с помощью первичных ключей. Во всем осталь­ном они служат одной цели — обеспечить уникальность данных, вставляемых в поле.

Ограничение на уникальность следует использовать в тех случаях, когда нужно гарантировать, что дублированные значения не будут добавляться в поле, не являющееся частью первичного ключа.

Поскольку идеального кандидата на роль уникального ограничения в наших таблицах нет, вы можете создать его в поле Phone.

  1. В SQL Server Management Studio щелкните на кнопке New Query.

  2. В раскрывающемся списке баз данных в панели инструментов выберите Sales.

  3. Введите и выполните следующий код:

ALTER TABLE customers

ADD CONSTRAINT CK_Phone

UNIQUE (Phone)

  1. В окне Object Explorer щелкните правой кнопкой на базе данных Sales и выберите команду Refresh.

  2. Расширьте папки Sales=>Tables=> Customers=> Keys.

  3. Ваше уникальное ограничение будет перечислено в папке Keys вместе с первичным ключом, созданным ранее (рис. 19).

Рис. 19. В папке Keys перечислено также и ограничение на уникальность

Теперь вы можете протестировать ограничение на уникальность, попытавшись добавитъ несколько дублирующихся телефонных номеров посредством Query Analyzer с помощью инструкции INSERT.

  1. Выберите пункт меню Query=>New Query.

  2. Введите и выполните следующий код, добавляющий новую запись в таблицу Customers:

USE sales

INSERT customers

VALUES ('Shane','Travis','806Star','Phoenix','AZ','85103','6021112222')

  1. Повторите выполнение запроса. Запрос не был выполнен, а в нижней части появилось сообщение о том, что дублированный телефонный номер нарушает ограничение UNIQUE_KEY .

Итак, вы знаете, как защитить вводимые в таблицу данные путем обеспечения целостности домена и сущности; осталось рассмотреть еще один тип целостности. Вам нужно знать, как защитить связанные данные, хранящиеся в разных таблицах, путем обеспечения целостности ссылок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]