2.16. Таблица не участвует в связях с другими таблицами БД.
Модель БД должна быть продумана таким образом, чтобы ее основные таблицы участвовали хотя бы в одной связи с другими таблицами. Исключение составляют временные и «рабочие» таблицы. Они, как правило, не описываются в модели БД и появляются в процессе эксплуатации БД пользователями.
2.17. Неправильная настройка каскадного удаления.
Пусть таблица table2 содержит внешний ключ со ссылкой на первичный ключ table1. Этот внешний ключ создавался с использованием опции ON DELETE CASCADE: при удалении строки из table1 должны автоматически удаляться все зависимые строки из table2. Но если при этом найдется дочерняя по отношению к table2 таблица table3, для которой не установлено каскадное удаление, то и каскадное удаление из table2 будет не всегда возможным. И хотя данную особенность нельзя отнести к серьезным ошибкам, она может создать неудобства во время эксплуатации БД.
3. Ошибки нормализации.
В эту категорию включаются избыточные функциональные зависимости, которые свидетельствуют о нарушениях требований первой, второй и третьей нормальных форм.
Следует отметить, что AllFusion Data Model Validator не может точно определять функциональные зависимости. Тем более что анализ модели БД производится до ее заполнения, и доказать, что в таблицах будут иметь место недопустимые функциональные зависимости, на данном этапе невозможно. Поэтому AllFusion Data Model Validator выявляет участки модели которые, возможно, содержат ошибки нормализации.
Рассмотрим следующий пример SQL-скрипта:
create table STATE(
STATE_ID number not null primary key,
NAME varchar2 (80));
create table CUSTOMER (
CUSTOMER_ID number not null primary key,
NAME varchar2 (80),
CUSTOMER_ADDRESS varchar2 (80),
STATE_ID number,
STATE_NAME varchar2 (80));
По умолчанию AllFusion Data Model Validator считает, что одноименные столбцы разных таблиц представляют одну и ту же характеристику сущности или связи. С этой точки зрения столбцы NAME и STATE_ID имеют одинаковый смысл. Получается, что в таблице CUSTOMER имеется функциональная зависимость столбца NAME от неключевого столбца STATE_ID, что является нарушением требования третьей нормальной формы.
Еще раз подчеркнем, что вывод о ненормализованности таблицы основан на предположении о том, что одноименные столбцы имеют одинаковый смысл в обеих таблицах. Эксперту необходимо убедиться (с помощью разработчика БД) в истинности этого предположения, чтобы сделать окончательный вывод о присутствии либо отсутствии избыточных функциональных зависимостей в таблицах.
4. Ошибки связей.
В эту категорию входят ошибки, связанные с определением внешних ключей. Перечислим наиболее критичные из них.
4.1. Некорректно определенная рекурсивная связь.
Данная ошибка имеет место, если внешний ключ рекурсивной связи имеет ограничение NOT NULL. В этом случае вставка строк в пустую таблицу оказывается невозможной.
4.2. Отключение внешнего ключа.
В СУБД имеется возможность отключать любые ограничения целостности и триггеры. Если отключается ограничение PRIMARY KEY или UNIQUE, наложенное на некоторый столбец, то автоматически отключается и каждое связанное с ним вместе ограничение FOREIGN KEY. Это может привести к нарушению целостности БД в процессе эксплуатации.
4.3. Бесконечные циклы между таблицами. Если между таблицами существует цикл (рис. 8.4), и все внешние ключи имеют свойство NOT NULL, заполнение таблиц оказывается невозможным.
Рисунок 8.4 – Пример цикла в схеме БД
4.4. Таблица содержит слишком много внешних ключей.
Ошибка имеет место, если количество внешних ключей, заданных для некоторой таблицы, превышает определенное экспертом пороговое значение.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.