每当为数据库绘制适当的ER图然后映射到关系模式时,我被告知它保证3NF
。
这个说法是真的吗?
如果没有,任何人都可以提供一个反例。
另外,请告诉我,当从完美的ER图中映射关系模式时,是否可以声称严格遵循任何正常形式?
最简洁的答案是不。根据分析和设计方法,可能存在ER模型的示例,这些示例在ER术语中看起来完美无声,但不一定转换为3NF中的关系模式。 ER建模和表示法不足以表达足够的表达力或足以保证在数据库设计中正确实施所有功能依赖性。经验丰富的数据库设计人员意识到这一点,并应用其他技术来提出“正确”的设计。
Terry Halpin设计了一种正式的数据库设计方法,可以保证满足第5范式的关系模式(参见orm.net)。他使用对象角色建模方法,而不是ER建模。
该图仅显示您拥有的实体和属性以及实体如何相互关联。您的属性可能违反正常形式。 ER图只是一种表示,它不强制执行任何规则。
在ER图中表示模型意味着满足3NF没有任何意义。
错误声明背后的想法可能基于以下想法:例如,当您将子表中的重复组从列转换为行,或者将部分依赖列移除到另一个表时,您正在增加关系的正常形式。但是,图解惯例不以任何方式强制执行此操作。
让我们看一个例子(在oracle中):
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中。