在规范化之前

时间:2013-01-07 15:57:15

标签: database normalization

目前我无法学习规范化。虽然我知道1NF - 3NF背后的基本概念,但我仍然不理解在规范化之前需要遵循的步骤。

根据我的理解,必须首先收集base entitiesattributesrelation among the entitiesstart normalization。但我不明白,我是否应该立即规范化所有属性或规范化彼此之间存在某种关系的实体的属性。

考虑商店的一个例子。

store(name, address, contact)
customer(sn, name, address)
item(id, name, price)
transaction(id, date, customer_sn, item_id, quantity, total_price)

根据我的理解,我会尝试一次规范化所有属性,或者仅对customeritemtransaction的属性进行标准化。

我知道我错过了一些东西,我无法理解。

感谢任何帮助。谢谢你宝贵的时间。

1 个答案:

答案 0 :(得分:-1)

  

根据我的理解,必须首先收集基础实体,   他们的属性,实体之间的关系,然后开始   正常化。

不,你不必这样做。事实上,在开始规范化之前,即使不是不可能,也很难识别一些基本实体。

在逻辑层面,您首先要收集所需的所有属性,然后将它们放在一个大关系中。几乎每本关于数据库系统的教科书都会有更小的例子。

收集所有必需属性后,确定它们之间的依赖关系。

对于商店,您可能会收集这些属性。

  • 甲。商店名称
  • B中。存储物理地址
  • ℃。 item sku
  • d。项目名称
  • 电子。商品价格
  • F。交易时间戳
  • -G。交易类型(如“购买”,“退货”,“商店信用”等)
  • 小时。交易登记(该机器执行交易)
  • 予。交易收银员(该员工执行交易)
  • 学家交易项目sku
  • ķ。交易项目价格
  • L,交易项目数量
  • 微米。交易项目延长价格
  • ñ。交易项目销售税
  • 0。交易总额
  • P上。交易支付类型(现金,支票,信用卡)
  • Q值。交易付款金额

之后,您可能会确定这些功能依赖性适用。

  • A->乙
  • B->一种
  • C-> d
  • C-&GT,E
  • FH-> GI
  • FH-&≠0
  • J-> k
  • FHJ-→1
  • KL-> M
  • KL-将N
  • M-将N

这是您开始规范化的地方。每次分解一个关系以将其提升到更高的正常形式时,都会添加另一个关系。每次添加另一个关系时,都会将所有规范化原则应用于 it 。这个过程是递归的。

良好的CASE工具可以基于该依赖项列表生成每个可能的5NF分解。

其他设计决策也很重要,但可能与规范化有关。

例如,一个设计项目可能决定每人只存储一个电话号码。另一个项目可能决定为每个人存储几个电话号码。这种决定很重要,但它与规范化无关。也就是说,每人存储一个电话号码不会违反任何正常形式,也不会每人存储多个电话号码。