首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规范化前

规范化前
EN

Stack Overflow用户
提问于 2013-01-07 23:57:15
回答 1查看 192关注 0票数 0

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

根据我的理解,一个人必须首先收集base entities,他们的attributesrelation among the entities,然后是start normalization。但是我不明白,我是应该一次规范化所有的属性,还是应该规范化彼此之间有某种关系的实体的属性。

考虑一个商店的例子。

代码语言:javascript
复制
store(name, address, contact)
customer(sn, name, address)
item(id, name, price)
transaction(id, date, customer_sn, item_id, quantity, total_price)

根据我的理解,我要么尝试一次标准化所有属性,要么只标准化customeritemtransaction的属性。

我知道我漏掉了什么,我就是想不通。

任何帮助都是非常感谢的。感谢您的宝贵时间。

EN

回答 1

Stack Overflow用户

发布于 2013-01-10 19:15:20

根据我的理解,一个人必须首先收集基本实体,它们的属性,实体之间的关系,然后开始规范化。

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

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

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

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

  • A.商店名称
  • B.商店物理地址
  • C.项目sku
  • D.项目名称

<代码>H111E.项目价格<代码>H212F.交易时间戳<代码>H214<代码>H115G.交易类型(如“购买”,“退货”,“商店信用”,

  • H.交易收银台(哪台机器执行transaction)
  • J.交易项目sku
  • K.交易项目价格
  • L.交易项目数量
  • M.交易项目扩展价格

<代码>H129N.交易项目销售税<代码>H230O.交易总额<代码>H232<代码>H133P.交易支付类型(现金、支票、信用卡)<代码>H234<代码>H135q.交易支付金额<代码>H236<代码>F237

在此之后,您可以确定这些函数依赖项是否适用。

  • A->B
  • B->A
  • C->D
  • C->E
  • FH->GI
  • FH->O
  • J->K
  • FHJ->L
  • KL->M
  • KL->N
  • M->N

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

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

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14199435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档