首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL规范化UNL 1NF 2NF 3NF

SQL规范化UNL 1NF 2NF 3NF
EN

Stack Overflow用户
提问于 2016-12-02 07:03:03
回答 2查看 2.4K关注 0票数 1

对于学校的作业,我们要为我们提供的表格画出UNL,1NF,2NF,3NF关系。我认为我能够完成UNL,1NF,2NF,但我不确定3NF如何做到这一点。

这是一张表格的图片:

以下是我缺少3NF的可能解决方案。

UNF关系

代码语言:javascript
复制
ProductReport[ProductC, Classif, Markup(ProductID, Desc, Cost)]

1NF关系

代码语言:javascript
复制
ProductReport[ProductC, Classif, Markup]

ProductDetails [ProductC, ProductID, Desc, Cost]

2NF关系

代码语言:javascript
复制
ProductReport[ProductC, Classif, Markup]
Product [ProductID, Desc]
ProductDetails [ProductC, ProductID,  Cost]

3NF关系

所以我的问题是,我的UNF,1NF,2NF是否正确?如果是,3NF会是什么样子?

EN

回答 2

Stack Overflow用户

发布于 2016-12-02 07:54:44

我可以帮助前两个表格,我不是百分之百确定3NF在你的情况下。

这是我的解释。

1NF

  • 表的字段必须包含原子值。
  • 不能有重复的组

您的表已经在1NF中,因为每个字段只包含单个值(即使它们是多个单词字符串),并且没有重复的组,因为每个字段存储不同的属性;例如,如果产品在同一行上针对一个分类重复

2NF

  • 该表采用first normal form
  • 所有非键属性都是全功能的,依赖于主键

正如您已经确定的,我们需要将分类和标记从产品中分离出来,将产品描述从成本中分离出来;最终的charge将是最终报告查询中的一个计算字段。

3NF

3NF的定义是:

  • It is in second normal form

没有可传递的函数依赖

传递函数依赖被描述为:A在函数上依赖于B,而B在函数上依赖于C。因此,A通过B传递依赖于C。

因此,我们正在寻找同一个表中字段之间的依赖关系,而不是像我之前说的那样跨表(感谢reaanb指出了这一点)。

我在您的表中看不到传递依赖,我很想知道是否有人能发现一个。我在想,如果你已经被分配了这个任务,那么他们肯定在寻找第三种范式,或者可能没有!:)

票数 0
EN

Stack Overflow用户

发布于 2018-11-30 01:08:33

标记和收费之间存在传递依赖关系。这两个字段必须放在单独的表中才能传递3NF。

3NF的一个更常见的例子是邮政编码和城市。如果用户更改了城市值,则会直接影响邮政编码的值。

我个人会把它放在2NF中,并在服务器端代码(c#或java)中处理它。

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

https://stackoverflow.com/questions/40922009

复制
相关文章

相似问题

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