1

每当为数据库绘制适当的ER 图然后映射到关系模式时,我被告知它保证3NF.

这种说法是真的吗?

如果没有,谁能给我一个反例。

另外,请告诉我,当从完美的 ER 图映射关系模式时,是否可以声称严格遵循任何范式?

4

3 回答 3

4

最简洁的答案是不。根据分析和设计方法,可能有一些 ER 模型的示例在 ER 术语中看起来非常合理,但不一定会转化为 3NF 中的关系模式。ER 建模和表示法并没有真正足够表达或不够正式,无法保证在数据库设计中正确执行所有功能依赖关系。经验丰富的数据库设计人员意识到这一点并应用其他技术来提出“正确”的设计。

Terry Halpin 为数据库设计设计了一种形式化方法,该方法保证关系模式满足第 5 范式(参见orm.net)。他使用对象角色建模方法,而不是 ER 建模。

于 2015-06-24T12:49:09.410 回答
3

该图仅显示了您拥有的实体和属性以及实体如何相互关联。您的属性可能违反正常形式。ER 图只是一种表示,它不强制执行任何规则。

在 ER 图中表示模型并不意味着满足 3NF。

错误声明背后的想法可能基于这样的想法,例如,当您将重复组从列转换为子表中的行,或将部分依赖的列删除到另一个表时,您正在增加关系的正常形式. 但是,图解约定不会以任何方式强制执行此操作。

于 2015-06-24T11:35:26.987 回答
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 中。

于 2015-06-24T09:57:49.380 回答