目前,我在学习规范化时遇到了问题。虽然我知道1NF - 3NF背后的基本概念,但我仍然不理解在规范化之前需要遵循的步骤。
根据我的理解,一个人必须首先收集base entities,他们的attributes,relation among the entities,然后是start normalization。但是我不明白,我是应该一次规范化所有的属性,还是应该规范化彼此之间有某种关系的实体的属性。
考虑一个商店的例子。
store(name, address, contact)
customer(sn, name, address)
item(id, name, price)
transaction(id, date, customer_sn, item_id, quantity, total_price)根据我的理解,我要么尝试一次标准化所有属性,要么只标准化customer、item和transaction的属性。
我知道我漏掉了什么,我就是想不通。
任何帮助都是非常感谢的。感谢您的宝贵时间。
发布于 2013-01-10 19:15:20
根据我的理解,一个人必须首先收集基本实体,它们的属性,实体之间的关系,然后开始规范化。
不,你没必要这么做。事实上,在开始规范化之前,即使不是不可能,也很难识别一些基本实体。
在逻辑层面上,您首先收集所需的所有属性,然后将它们放入一个大关系中。你可以在几乎每一本关于数据库系统的教科书中找到更小的例子。
收集完所有必需的属性后,确定它们之间的依赖关系。
对于商店,您可以收集这些属性。
<代码>H111E.项目价格<代码>H212F.交易时间戳<代码>H214<代码>H115G.交易类型(如“购买”,“退货”,“商店信用”,
<代码>H129N.交易项目销售税<代码>H230O.交易总额<代码>H232<代码>H133P.交易支付类型(现金、支票、信用卡)<代码>H234<代码>H135q.交易支付金额<代码>H236<代码>F237
在此之后,您可以确定这些函数依赖项是否适用。
这就是你开始规范化的地方。每次分解一个关系以将其提升到更高的范式时,都会添加另一个关系。每次添加另一个关系时,也会将所有规范化原则应用于该关系。这个过程是递归的。
好的CASE工具可以基于该依赖项列表生成所有可能的5NF分解。
其他设计决策也很重要,但可能与规范化无关。
例如,一个设计项目可能决定每个人只存储一个电话号码。另一个项目可能决定为每个人存储多个电话号码。这种决定很重要,但与规范化无关。也就是说,每个人存储一个电话号码并不违反任何范式,每个人存储多个电话号码也不违反任何规范。
https://stackoverflow.com/questions/14199435
复制相似问题