Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Ошибки и недостатки моделирования связей



Некорректная иерархическая рекурсивная связь. Иерархическая ре-
курсивная связь была рассмотрена в гл. 2. Возьмем пример.


create table СОТРУДНИК
(

Номер_Сотрудника number not null primary key,
Имя_Сотрудника varchar2 (80),
Номер_Руководителя number not null
);

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

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

Ошибка внешнего ключа. В модели ERwin на логическом уровне ат-
рибут внешнего ключа помечен как Logical Only (см. 2. 2. 2). В этом случае
внешний ключ генерироваться не будет. Для исправления ошибки опция
Logical Only должна быть выключена.

Бесконечные циклы. Рассмотрим пример на рис. 4. 1. 12. Предположим,
для всех внешних ключей модели установлено правило Delete Cascade.

Тогда, если удаляется строка из таблицы Таблица!, должны удаляться
все соответствующие строки из таблицы Таблица_2, при удалении строки
из Таблица_2 удаляются все соответствующие строки из Таблица_З, при
удалении строки из Таблица_З удаляются все соответствующие строки
из Таблица_1 и так до бесконечности. Попытка удаления лишь одной стро-
ки из любой таблицы может привести к уничтожению всей информации,
хранящейся в базе данных.



Взаимно пересекающиеся связи.Рассмотрим пример на рис. 4. 1. 13.

Предположим, в таблицах нет ни одной строки. Нужно выполнить ко-
манду вставки

Insert into ЗАКАЗ (Номер_Заказа, Номер_Счета) values (1, 1)

При вставке строки в таблице ЗАКАЗ СУБД проверит, имеется ли соот-
ветствующая строка в таблице СЧЕТ (со значением Номер_Счета=1).
Но
соответствующую строку в таблицу СЧЕТ вставить нельзя, поскольку
не существует соответствующей строки в таблице ЗАКАЗ.

В результате ни в одну из двух таблиц невозможно вставить данные.

Множественные пути. Рассмотрим пример на рис. 4. 1. 14.

Таблица КЛИЕНТ связана с таблицей ПОЗИЦИЯ_3AKA3А как непосредст-
венно, так и через таблицу ЗАКАЗ. Хотя структура данных на рис. 4. 1. 14 не мо-
жет считаться нормализованной, такие связи не обязательно являются ошибкой.
Если необходимо получить позиции заказа данного клиента, в запросе не нужно
связывать таблицу ЗАКАЗ, что существенно сократит время выполнения запро-
са. С другой стороны, поскольку таблицы ЗАКАЗ и ПОЗИЦИЯ_3AKA3A
не связаны по колонке Номер_клиента, возможна ситуация, когда в строках,
соответствующих одному и тому же заказу в таблицах ЗАКАЗ и ПОЗИ-
ЦИЯ_ЗАКАЗА,
будут внесены различные значения колонки Номер_клиента,
что является нарушением ссылочной целостности.

4. 2. Поиск и исправление ошибок при помощи
ERwin Examiner





Дата публикования: 2015-10-09; Прочитано: 336 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.41 с)...