Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
М. ГРУБЕР_SQL.doc
Скачиваний:
22
Добавлен:
18.04.2019
Размер:
1.4 Mб
Скачать

Работа с sql

  1. Создайте таблицу Заказов, так чтобы все значения поля onum, а также все комбинации полей cnum и snum отличались друг от друга, и так чтобы значения NULL исключались из поля даты.

  2. Создайте таблицу Продавцов так, чтобы комиссионные по умолчанию составляли 10%, не разрешались значения NULL, чтобы поле snum являлось первичным ключом, и чтобы все имена были в алфавитном порядке между A и M включительно (учитывая, что все имена будут напечатаны в верхнем регистре).

  3. Создайте таблицу Заказов, будучи уверенными в том, что поле onum больше, чем поле cnum, а cnum больше чем snum. Запрещены значения NULL в любом из этих трех полей.

(См. Приложение A для ответов.)

19

Поддержка целостности ваших данных

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

В этой главе вы будете исследовать справочную целостность более подробно и выясним все относительно ограничений, которые вы можете использовать, чтобы ее поддерживать. Вы также увидите, как предписывается это ограничение, когда вы используете команды модификации DML. Поскольку справочная целостность включает в себя связь полей или групп полей, часто в разных таблицах, это действие может быть несколько сложнее, чем другие ограничения. По этой причине, хорошо иметь с ней полное знакомство, даже если вы не планируете создавать таблицы. Ваши команды модификации могут стать эффективнее с помощью ограничения справочной целостности, как и с помощью других ограничений, но ограничение справочной целостности может воздействовать на другие таблицы, кроме тех, в которых оно определено, а определенные функции запроса, такие, как объединения, являются многократно структурированы в терминах связей справочной целостности, как подчеркивалось в Главе 8.

Внешний ключ и родительский ключ

Когда все значения в одном поле таблицы представлены в поле другой таблицы, мы говорим что первое поле ссылается на второе. Это указывает на прямую связь между значениями двух полей. Например, каждый из заказчиков в таблице Заказчиков имеет поле snum, которое указывает на продавца, назначенного в таблице Продавцов. Для каждого Заказа в таблице Заказов, имеется один, и только этот продавец, и один, и только этот заказчик. Это отображается с помощью полей snum и cnum в таблице Заказов.

Когда одно поле в таблице ссылается на другое, оно называется внешним ключом, а поле, на которое оно ссылается, называется — родительским ключом. Так что поле snum таблицы Заказчиков — это внешний ключ, а поле snum, на которое оно ссылается в таблице Продавцов — это родительский ключ.

Аналогично, поля cnum и snum таблицы Заказов — это внешние ключи, которые ссылаются к их родительским ключам с именами в таблице Заказчиков и таблице Продавцов. Имена внешнего ключа и родительского ключа не обязательно должны быть одинаковыми, это — только соглашение, которому мы следуем, чтобы делать соединение более понятным.