Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
bibliofond_577096.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
8.5 Mб
Скачать

3.1.3 Анализ ключей сущностей проектируемой базы данных

Теперь рассмотрим ситуацию с ключами описанных выше сущностей. Не допускается, чтобы первичный ключ стержневой сущности (любой атрибут, участвующий в первичном ключе) принимал неопределенное значение. Иначе возникнет противоречивая ситуация: появится не обладающий индивидуальностью, и, следовательно не существующий экземпляр стержневой сущности. По тем же причинам необходимо обеспечить уникальность первичного ключа.

Теперь о внешних ключах:

Если сущность С связывает сущности А и В, то она должна включать внешние ключи, соответствующие первичным ключам сущностей А и В.

Если сущность В обозначает сущность А, то она должна включать внешний ключ, соответствующий первичному ключу сущности А.

Связь между первичными и внешними ключами сущностей иллюстрируется рисунке 1. 6 [14, стр. 119]:

Рисунок 3. 4 - Структуры: а - ассоциации; б - обозначения (характеристики)

В построенных выше стержневых сущностях выделены атрибуты, описывающие внешние ключи. Очевидно, что ни один из них не может принимать неопределенное значение, являясь фактически номером соответствующего экземпляра сущности. Построенные выше сущности имеют следующие ассоциации: сущности ЗАКАЗАНО, ОБСЛУЖИВАНИЕ, ПОСТАВКИ, СОСТАВ. Их первичный ключ представляет собой сочетание внешних ключей.

Для сущности ЗАКАЗАНО первичный ключ представляет собой сочетание внешних ключей, которыми являются атрибуты Код Заказа и Код Блюда, принадлежащие соответственно сущностям БЛЮДА и ЗАКАЗЫ. В случае с сущностями-обозначениями и характеристиками (это сущности БЛЮДА и ЗАКАЗЫ) их первичные ключи Код Блюда и Код Заказа соответственно.

Для сущности ОБСЛУЖИВАНИЕ первичный ключ представляет собой сочетание внешних ключей, которыми являются атрибуты Код Заказа и Код Сотрудника, принадлежащие соответственно сущностям ЗАКАЗЫ и СОТРУДНИКИ.

Для сущности ПОСТАВКИ первичный ключ представляет собой сочетание внешних ключей, которыми являются атрибуты Код Продукта и Код Поставщика, принадлежащие соответственно сущностям ПРОДУКТЫ и ПОСТАВЩИКИ.

Для сущности СОСТАВ первичный ключ представляет собой сочетание внешних ключей, которыми являются атрибуты Код Блюда и Код Продукта, принадлежащие соответственно сущностям БЛЮДА и ПРОДУКТЫ.

Таким образом, соблюдены все требования, предъявляемые к первичным ключам сущности и к их внешним ключам.

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

1. Может ли данный внешний ключ принимать неопределенные значения (NULL-значения)? Иначе говоря, может ли существовать некоторый экземпляр сущности данного типа, для которого неизвестна целевая сущность, указываемая внешним ключом?

. Что должно случиться при попытке УДАЛЕНИЯ целевой сущности, на которую ссылается внешний ключ? Например, при удалении поставщика, который осуществил по крайней мере одну поставку.

Существует три возможности [12, стр. 65-67]:

КАСКАДИРУЕТСЯ

Операция удаления "каскадируется" с тем, чтобы удалить также поставки этого поставщика.

ОГРАНИЧИВАЕТСЯ

Удаляются лишь те поставщики, которые еще не осуществляли поставок. Иначе операция удаления отвергается.

УСТАНАВЛИВАЕТСЯ

Для всех поставок удаляемого поставщика NULL-значение внешний ключ устанавливается в неопределенное значение, а затем этот поставщик удаляется. Такая возможность, конечно, неприменима, если данный внешний ключ не должен содержать NULL-значений.

Что должно происходить при попытке ОБНОВЛЕНИЯ первичного ключа целевой сущности, на которую ссылается некоторый внешний ключ? Например, может быть предпринята попытка обновить номер такого поставщика, для которого имеется по крайней мере одна соответствующая поставка.

Имеются те же три возможности, как и при удалении:

КАСКАДИРУЕТСЯ Операция обновления "каскадируется" с тем, чтобы обновить также и внешний ключ впоставках этого поставщика.

ОГРАНИЧИВАЕТСЯ

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

УСТАНАВЛИВАЕТСЯ

Для всех поставок такого поставщика NULL-значение внешний ключ устанавливается в неопределенное значение, а затем обновляется первичный ключ поставщика. Такая возможность, конечно, неприменима, если данный внешний ключ не должен содержать NULL-значений.

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

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

NULL-значения не допустимы

УДАЛЕНИЕ ИЗ (цель) КАСКАДИРУЕТСЯ

ОБНОВЛЕНИЕ (первичный ключ цели) КАСКАДИРУЕТСЯ

Указанные спецификации представляют зависимость по существованию характеристических сущностей. В ситуации с рассмотренными выше сущностями базы данных ООО «Альянс» имеют место следующие общие наблюдения:

Сущность ПОСТАВЩИКИ *( Стержневая сущность )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Поставщика )

ПОЛЯ (Код Поставщика, Название, Адрес, Город, Индекс, Страна, Телефон, Факс);

Сущность СОТРУДНИКИ *( Стержневая сущность )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Сотрудника )

ПОЛЯ (Код Сотрудника, ФИО, Пол, Должность, Дата Рождения, Адрес, Домашний Телефон, Мобильный Телефон, Примечания);

Сущность ЗАКАЗЫ *( Стержневая сущность )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Заказа )

ПОЛЯ (Код Заказа, Дата заказа, Номер столика, Количество мест);

Сущность ПРОДУКТЫ *( Стержневая сущность )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Продукта )

ПОЛЯ (Код Продукта, Название, Единица измерения);

Сущность БЛЮДА *( Стержневая сущность )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Блюда )

ПОЛЯ (Код Блюда, Название блюда, Вид, Описание);

Сущность РЕЦЕПТЫ *( Обозначение )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Блюда )

ВНЕШНИЙ КЛЮЧ ( Код Блюда ИЗ БЛЮДАзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ БЛЮДА ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ БЛЮДА. Код Блюда ОГРАНИЧИВАЕТСЯ)

ПОЛЯ (Код Блюда, Рецепт)

ОГРАНИЧЕНИЯ ( Значения полей Код Блюда должны принадлежать набору значений соответствующих полей сущности БЛЮДА; при нарушении вывод предупреждающего сообщения);

Сущность РАСХОД *( Обозначение )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Блюда, Дата Расхода)

ВНЕШНИЙ КЛЮЧ ( Код Блюда ИЗ БЛЮДАзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ БЛЮДА ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ БЛЮДА. Код Блюда ОГРАНИЧИВАЕТСЯ)

ВНЕШНИЙ КЛЮЧ ( Дата Расходазначения НЕ ДОПУСТИМЫ

Должен представлять дату в формате ДД. ММ. ГГГГ)

ПОЛЯ (Код Блюда, Дата Расхода, ЕдИзмерения, Расход)

ОГРАНИЧЕНИЯ ( Значения полей Код Блюда должны принадлежать набору значений соответствующих полей сущности БЛЮДА; при нарушении вывод предупреждающего сообщения);

Сущность ЗАКАЗАНО *( Характеризует БЛЮДА и ЗАКАЗЫ )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Заказа, Код Блюда )

ВНЕШНИЙ КЛЮЧ ( Код Заказа ИЗ ЗАКАЗЫзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ ЗАКАЗЫ ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ ЗАКАЗЫ. Код Заказа КАСКАДИРУЕТСЯ)

ВНЕШНИЙ КЛЮЧ ( Код Блюда ИЗ БЛЮДАзначения ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ БЛЮДА ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ БЛЮДА. Код Блюда КАСКАДИРУЕТСЯ)

ПОЛЯ ( Код Заказа, Код Блюда, Количество )

ОГРАНИЧЕНИЯ ( Значения поля Код Заказа должны принадлежать набору значений соответствующего поля сущности Заказы, значение поля Код Блюда принадлежит набору значений соответствующего поля сущности БЛЮДА; при нарушении вывод сообщения);

Сущность ОБСЛУЖИВАНИЕ *( Связывает СОТРУДНИКИ и ЗАКАЗЫ )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Заказа, Код Сотрудника )

ВНЕШНИЙ КЛЮЧ ( Код Заказа ИЗ ЗАКАЗЫзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ ЗАКАЗЫ ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ ЗАКАЗЫ. Код Заказа КАСКАДИРУЕТСЯ)

ВНЕШНИЙ КЛЮЧ ( Код Сотрудника ИЗ СОТРУДНИКАзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ ТОВАРЫ ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ ТОВАРЫ. Код Сотрудника КАСКАДИРУЕТСЯ)

ПОЛЯ ( Код Заказа, Код Сотрудника, Время, Примечания )

ОГРАНИЧЕНИЯ ( Значения полей Код Заказа и Код Сотрудника должны принадлежать набору значений соответствующих полей сущностей ЗАКАЗЫ и СОТРУДНИКИ; при нарушении вывод сообщения);

Сущность ПОСТАВКИ *( Связывает ПРОДУКТЫ и ПОСТАВЩИКИ )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Продукта, Код Поставщика)

ВНЕШНИЙ КЛЮЧ ( Код Продукта ИЗ ПРОДУКТЫзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ ПРОДУКТЫ ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ ПРОДУКТЫ. Код Продукта КАСКАДИРУЕТСЯ)

ВНЕШНИЙ КЛЮЧ ( Код Поставщика ИЗ ПОСТАВЩИКИзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ ПОСТАВЩИКИ ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ ПОСТАВЩИКИ Код Поставщика КАСКАДИРУЕТСЯ)

ПОЛЯ ( Код Продукта, Код Поставщика, Цена, ЕдИзмерения)

ОГРАНИЧЕНИЯ ( Значения полей Код Продукта и Код Поставщика должны принадлежать набору значений соответствующих полей сущностей ПРОДУКТЫ и ПОСТАВЩИКИ; при нарушении вывод сообщения);

Сущность СОСТАВ *( Связывает БЛЮДА и ПРОДУКТЫ )

ПЕРВИЧНЫЙ КЛЮЧ ( Код Блюда, Код Продукта)

ВНЕШНИЙ КЛЮЧ ( Код Блюда ИЗ БЛЮДАзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ БЛЮДА ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ БЛЮДА. Код Блюда КАСКАДИРУЕТСЯ)

ВНЕШНИЙ КЛЮЧ ( Код Продукта ИЗ ПРОДУКТЫзначения НЕ ДОПУСТИМЫ

УДАЛЕНИЕ ИЗ ПРОДУКТЫ ОГРАНИЧИВАЕТСЯ

ОБНОВЛЕНИЕ ПРОДУКТЫ. Код Продукта КАСКАДИРУЕТСЯ)

ПОЛЯ ( Код Блюда, Код Продукта, ед. измерения, Количество)

ОГРАНИЧЕНИЯ ( Значения полей Код Блюда и Код Продукта должны принадлежать набору значений соответствующих полей сущностей БЛЮДА и ПРОДУКТЫ; при нарушении вывод сообщения);

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