Опубликован: 02.08.2007 | Уровень: специалист | Доступ: платный
Лекция 9:

Создание объектов для хранения данных. Работа с ограничениями

Циклы зависимых таблиц

Использование ограничений ссылочной целостности может порождать так называемые ссылочные циклы. Для пояснения этого понятия обратимся к учебной базе данных. Таблица EMPLOYEE содержит колонку DEPNO (внешний ключ, содержащий ссылку на таблицу DEPARTAMENT ). Если добавить в таблицу EMPLOYEE колонку MNGR, которая определяет руководителя каждого служащего, а в таблицу DEPARTAMENT - колонку с номером руководителя MRGNO, то мы получим пример ссылочного цикла (при определении ссылочной целостности по этим атрибутам).

Такой вид циклической связи порождает проблемы для операций манипулирования данными. Допустим, что на работу принят служащий, который должен руководить вновь созданным отделом 100. Последовательное выполнение операторов INSERT будет неуспешным (строка в дочерней таблице EMPLOYEE ссылается на отдел, которого еще нет, и такого менеджера еще не существует).

INSERT INTO EMPLOYEE (EMPNO,ENAME,LNAME,DEPNO,
  JOB,AGE,HIREDATE,SAL,COMM,FINE,MNGR)
    VALUES(4000,"Анисимов","Виктор",100,"Менеджер",,2500000,,,NULL);

INSERT INTO  DEPARTAMENT
  (DEPNO, DNAME, LOC, MANAGER, MRGNO,PHONE)
    VALUES (100,'Маркетинг','Москва', 'Анисимов', 4000,1352519);

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

INSERT INTO EMPLOYEE (EMPNO,ENAME,LNAME,DEPNO,
    JOB,AGE,HIREDATE,SAL,COMM,FINE,MNGR)
VALUES(4000, "Анисимов","Виктор",NULL, "Менеджер",,2500000,,,NULL);

INSERT  INTO DEPARTAMENT
  (DEPNO, DNAME, LOC, MANAGER, MRGNO,PHONE)
     VALUES (100,'Маркетинг','Москва', 'Анисимов', 4000,1352519);

UPDATE EMPLOYEE
SET DEPNO=100
WHERE EMPNO=4000;

Аналогичным образом могут, при наличии ссылочных циклов, возникать проблемы с операцией удаления кортежей в родительской и дочерних таблицах. Следует избегать наличия ссылочных циклов в таблицах. Так, для учебной базы данных добавление новых полей и установка для них ограничений ссылочной целостности совсем не обязательна.

Более подробное описание работы с ограничениями ссылочной целостности приводятся в соответствующих руководствах фирм - изготовителей СУБД.

В этом разделе мы изучили ограничения, которые поддерживаются в реляционной базе данных средствами СУБД. Такие ограничения представляют встроенные в СУБД механизмы обеспечения целостности данных и поддержку ссылочной целостности. Исходными данными для наложения ограничений являются бизнес-правила предметной области базы данных. Решение о том, как будут использоваться эти бизнес-правила при проектировании физической модели базы данных в рамках предоставляемых СУБД механизмов добавления ограничений, находится полностью в компетенции проектировщиков баз данных. Проектировщик базы данных может принять решение о том, что ссылочная целостность будет контролироваться через триггеры, а целостность данных будет отдана на откуп разработчикам программ или опять же будут использованы триггеры. Или для выполнения такого контроля будет предусмотрено специальное приложение базы данных, или такой контроль будут осуществлять организационными мероприятиями.

Ниже приведен типичный синтаксис команды ALTER TABLE.

Типичный синтаксис команды ALTER TABLE (без учета ссылочной целостности):

ALTER TABLE имя_таблицы
DROP [имя_колонки [,имя_колонки ѕ]]
ADD имя_колонки тип_данных [(размер)] [NOT NULL | 
  NOT NULL WITH DEFAULT]
RENAME имя_колонки новое_имя | TABLE новое_имя
MODIFY имя_колонки тип_данных [(размер)] [NULL | NOT NULL |
  NOT NULL WITH DEFAULT]
Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин
Евгений Вершинин
Евгений Вершинин
Россия, Нижний Новгород, Нижегородский государственный технический университет, 2008
Aleksandr Arshinskyi
Aleksandr Arshinskyi
Россия