Содержание
В главе использована книга [DATE6].
На схеме Рисунок 23.1, «База данных Поставка» представлена база данных Поставка. Поставщик S однозначно определяется номером поставщика S#, товар P однозначно определяется номером товара P#, проект J однозначно определяется номером проекта J#. Значение кортежа отношения поставка SPJ следующее: определенный поставщик поставляет определенный товар для определенного проекта в определенном количестве (комбинация S# P # J# уникальна для SPJ).
Пример 23.1. Определение данных для базы данных Поставка
СREATE DOMAIN S#   CHAR (5);
СREATE DOMAIN NAME   CHAR (20);
СREATE DOMAIN STATUS  NUMERIC (5);
СREATE DOMAIN CITY   CHAR (15);
СREATE DOMAIN P#   CHAR (5);
СREATE DOMAIN COLOR  CHAR (10);
СREATE DOMAIN WEIGHT  NUMERIC (5);
СREATE DOMAIN J#   CHAR (4);
СREATE DOMAIN QTY   NUMERIC (9);
CREATE BASE RELATION  S 
 ( S#  DOMAIN ( S# ),
 SNAME DOMAIN ( NAME ), 
 STATUS DOMAIN ( STATUS ), 
 CITY  DOMAIN ( CITY ))
 PRIMARY KEY ( S# );
CREATE BASE RELATION  P 
 ( P#  DOMAIN ( P# ), 
 PNAME DOMAIN ( NAME ), 
 COLOR DOMAIN ( COLOR ), 
 WEIGHT DOMAIN ( WEIGHT ), 
 CITY  DOMAIN ( CITY ), 
 PRIMARY KEY ( P# );
CREATE BASE RELATION  J 
 (J#  DOMAIN ( J# ), 
 JNAME DOMAIN ( NAME ), 
 CITY  DOMAIN ( CITY )
 PRIMARY KEY ( J# ));
CREATE BASE RELATION  SPJ 
 ( S#  DOMAIN ( S# ), 
 P#  DOMAIN ( P# ), 
 J#  DOMAIN ( J#  ), 
 QTY  DOMAIN ( QTY  ))
 PRIMARY KEY  ( S#, P#, J#  )
   FOREIGN KEY ( S# ) REFERENCES  S
    DELETE CASCADES
    UPDATE RESTRICTED
   FOREIGN KEY ( P# ) REFERENCES  P
    DELETE CASCADES
    UPDATE RESTRICTED
   FOREIGN KEY ( J# ) REFERENCES   J
    DELETE CASCADES
    UPDATE RESTRICTED;
 3. Нарушить целостность могут операции с атрибутами являющиеся первичными или внешними ключами.
4. Первичный ключ – уникальный атрибут.
5. Метаправило целостности сущностей – атрибуты первичного ключа не могут принимать Null-значений.
6. Метаправило ссылочной целостности – внешние ключи не должны быть несогласованными.
7. Правила внешних ключей: (1) ограничить – не разрешать выполнение операции, приводящей к нарушению ссылочной целостности, (2) каскадировать – разрешить выполнение требуемой операции, но внести при этом необходимые поправки в других отношениях так, чтобы не допустить нарушения ссылочной целостности и сохранить все имеющие связи.
8. Используя данные схемы Рисунок 23.1, «База данных Поставка» и Пример 23.1, «Определение данных для базы данных Поставка», а также учитывая правила пунктов 3-7, можно определить какой будет результат следующих операций:
Обновить проект J5, установив атрибут CITY равным Ачинск. Результат: операция допустима.
Обновить товар P5, установив атрибут P# равным P4, если для соответствующего правила обновления UPDATE установлена опция RESTRICTED. Результат: операция не допустима (нарушение уникальности первичного ключа).
Обновить проект J5, установив атрибут JNAME равным Null, если для соответствующего правила обновления UPDATE установлена опция CASCADES. Результат: операция допустима,
Обновите поставку S1-P1-J1, установив атрибут J# равным Null, если для соответствующего правила обновления UPDATE установлена опция CASCADES. Результат: операция не допустима, нарушение метаправила целостности сущностей.
Обновить поставщика S3, установив атрибут S# равным S8, если для соответствующего правила обновления UPDATE установлена опция RESTRICTED. Результат: операция не допустима (нарушение правила внешних ключей).
Удалить поставщика S3, если для соответствующего правила DELETE установлена опция CASCADES. Результат: операция допустима, удаляется кортеж поставщика S3 и соответствующие поставки поставщика S3.
Удалить товар P1, если для соответствующего правила удаления DELETE установлена опция RESTRICTED. Результат: операция не допустима (нарушение правила внешних ключей).
Удалить товар P2, если для соответствующего правила удаления DELETE установлена опция RESTRICTED. Результат: операция допустима, удаляется кортеж товара P2, соответствующих ему поставок нет.
Обновить поставку S1-P1-J1, установив атрибут S# равным S2. Результат: операция допустима.
Обновить поставку S2-P3-J3, установив атрибут J# равным J5. Результат: операция недопустима (нарушение уникальности первичного ключа).
Обновить поставку S2-P3-J3, установив атрибут J# равным J6. Результат: операция не допустима (нарушение метаправила ссылочной целостности).
Вставить поставку S4-P4-J3. Результат: операция допустима.
Вставить поставку S4-P6-J3 Результат: операция недопустима (нарушение метаправила ссылочной целостности).