SQL规范化UNL 1NF 2NF 3NF

SQL规范化UNL 1NF 2NF 3NF,sql,database-normalization,Sql,Database Normalization,对于学校作业,我们要为提供的表格绘制UNL、1NF、2NF、3NF关系。我想我能够完成UNL,1NF,2NF,但我不知道如何完成3NF 这是一张桌子的照片: 以下是我可能的解决方案,缺少3NF UNF关系 1NF关系 2NF关系 3NF关系 所以我的问题是,我的UNF,1NF,2NF正确吗?如果是,3NF会是什么样子?我可以帮助您处理前两种表单,但对于您的情况,我不能100%确定3NF 这是我的解释 1NF 表的字段必须包含原子值 不能有重复组 您的表已经在1NF中,因为每个字段只包含单个

对于学校作业,我们要为提供的表格绘制UNL、1NF、2NF、3NF关系。我想我能够完成UNL,1NF,2NF,但我不知道如何完成3NF

这是一张桌子的照片:

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

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

我可以帮助您处理前两种表单,但对于您的情况,我不能100%确定3NF

这是我的解释

1NF
  • 表的字段必须包含原子值
  • 不能有重复组
您的表已经在1NF中,因为每个字段只包含单个值(即使它们是多个字符串),并且没有重复组,因为每个字段存储不同的属性;e、 g.如果产品在同一行重复一个分类

2NF
  • 该表是第一个标准形式
  • 所有非键属性都完全依赖于主键
正如您所确定的,我们需要从产品中分离分类和标记,以及从成本中分离产品描述;最终
费用
将是最终报表查询中的计算字段

3NF 3NF的定义是:

  • 它是第二范式
  • 不存在可传递的函数依赖关系
传递函数依赖被描述为:A在函数上依赖于B,B在函数上依赖于C。因此A通过B在传递上依赖于C

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


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

我可以帮助您填写前两张表格,但对于您的情况,我不能100%确定是否使用3NF

这是我的解释

1NF
  • 表的字段必须包含原子值
  • 不能有重复组
您的表已经在1NF中,因为每个字段只包含单个值(即使它们是多个字符串),并且没有重复组,因为每个字段存储不同的属性;e、 g.如果产品在同一行重复一个分类

2NF
  • 该表是第一个标准形式
  • 所有非键属性都完全依赖于主键
正如您所确定的,我们需要从产品中分离分类和标记,以及从成本中分离产品描述;最终
费用
将是最终报表查询中的计算字段

3NF 3NF的定义是:

  • 它是第二范式
  • 不存在可传递的函数依赖关系
传递函数依赖被描述为:A在函数上依赖于B,B在函数上依赖于C。因此A通过B在传递上依赖于C

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


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

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

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


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

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

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


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

您注意到标记依赖于产品类吗?也就是说,园艺工具(GT)都有30%的标记,灌木(SB)有50%,肥料(FT)有25%,洒水器(SP)有40%。虽然目前的表格数据没有任何重复行,但我对1NF的理解是,必须明确定义表格,以防将来添加重复行。在SQL中,这可以通过声明
唯一
主键
约束来实现。在本例中,产品ID似乎是实现此目的的理想选择。是的,OP已将标记移动到带有产品类的表中。我不确定你的评论是什么意思,你是说存在3NF依赖关系吗?我认为1NF中没有任何防止重复行的要求。以下是Wikipedia的定义:“当且仅当每个属性的域仅包含原子(不可分割)值,并且每个属性的值仅包含该域中的单个值时,关系才是第一范式。”在3NF描述中,您描述了表之间的依赖关系。关系理论中没有这样的东西。可传递依赖项(通常是功能依赖项)指的是关系中各列之间的依赖项。您注意到标记依赖于产品类吗?也就是说,园艺工具(GT)都有30%的标记,灌木(SB)有50%,肥料(FT)有25%,洒水器(SP)有40%。虽然目前的表格数据没有任何重复行,但我对1NF的理解是,必须明确定义表格,以防将来添加重复行。在SQL中,thi
ProductReport[ProductC, Classif, Markup(ProductID, Desc, Cost)]
ProductReport[ProductC, Classif, Markup]

ProductDetails [ProductC, ProductID, Desc, Cost]
ProductReport[ProductC, Classif, Markup]
Product [ProductID, Desc]
ProductDetails [ProductC, ProductID,  Cost]