Какую нормальную форму гарантирует диаграмма ER?
Всякий раз, когда для базы данных рисуется правильная диаграмма ER, а затем сопоставляется с реляционной схемой, мне сообщают, что она гарантирует 3NF
,
Это утверждение верно?
Если нет, может кто-нибудь привести мне контрпример.
Также, скажите, пожалуйста, можно ли строго соблюдать любую нормальную форму, когда реляционная схема отображается на идеальной диаграмме ER?
3 ответа
Краткий ответ: нет. В зависимости от анализа и подхода к проектированию могут быть примеры моделей ER, которые кажутся совершенно обоснованными с точки зрения ER, но не обязательно переводятся в реляционную схему в 3NF. ER-моделирование и нотация на самом деле недостаточно выразительны или не достаточно формальны, чтобы гарантировать правильное применение всех функциональных зависимостей в проектах баз данных. Опытные дизайнеры баз данных осознают это и применяют другие методы, чтобы придумать "правильный" дизайн.
Терри Хэлпин разработал формальный метод проектирования базы данных, который гарантирует реляционную схему, удовлетворяющую 5-й нормальной форме (см. Orm.net). Он использует подход Object Role Modeling, а не ER моделирование.
Диаграмма просто показывает, какие сущности и атрибуты у вас есть и как сущности связаны друг с другом. Ваши атрибуты могут нарушать нормальные формы. Диаграмма ER - это просто представление, она не применяет никаких правил.
Нет ничего о представлении модели на диаграмме ER, которая подразумевает удовлетворение 3NF.
Мышление, лежащее в основе ошибочного утверждения, может быть основано на идее, что когда вы, например, преобразуете повторяющуюся группу из столбцов в строки в дочерней таблице или удаляете частично зависимые столбцы в другую таблицу, вы увеличиваете нормальную форму ваших отношений, Тем не менее, схематическое соглашение не обеспечивает это в любом случае.
Давайте посмотрим пример (в оракуле):
CREATE TABLE STUDENT (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(64) NOT NULL,
RESIDENCE_STREET VARCHAR2(64),
RESIDENCE_CITY VARCHAR2(64),
RESIDENCE_PROVINCE VARCHAR2(64),
RESIDENCE_POSTALCODE NUMBER(8)
);
В некоторых странах почтовый код использует префиксы для определения региона или провинции, поэтому RESIDENCE_PROVINCE имеет функциональную зависимость от RESIDENCE_POSTALCODE. Но RESIDENCE_POSTALCODE является непростым атрибутом. Тогда этот простой и распространенный пример является "легальным", и его нет в 3NF.