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