对于学校的作业,我们将为我们提供的表格绘制UNL,1NF,2NF,3NF关系。我想我能够完成UNL,1NF,2NF,但我不知道如何为3NF做到这一点。
这是表格的图片:
以下是我可能的解决方案,缺少3NF。
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]
所以我的问题是,我的UNF,1NF,2NF是否正确?如果是的话,3NF会怎么样?
答案 0 :(得分:0)
我可以帮助解决前两种形式,在你的情况下,我对3NF并不是100%肯定。
这是我的解释。
您的表已经在1NF中,因为每个字段只包含单个值(即使它们是多个单词字符串),并且没有重复组,因为每个字段都存储不同的属性;例如如果产品在同一行重复进行一次分类
如您所知,我们需要从产品中分离分类和标记以及从成本中分离产品描述;最终的charge
将是最终报告查询中的计算字段。
3NF的定义是:
传递函数依赖性描述为:A在功能上依赖于B,B在功能上依赖于C.因此A通过B传递依赖于C.
所以我们正在寻找同一个表中字段之间的依赖关系,而不是像我刚才所说的那样在表格之间寻找依赖关系(感谢reaanb指出这一点)。
我没有在你的表中看到传递依赖,我有兴趣知道是否有其他人可以发现一个。我想如果你被赋予这个作为一项任务,他们必须要有第三种正常形式,或者可能不是! :)
答案 1 :(得分:0)
标记和费用之间存在传递依赖关系。必须将这两个字段放在单独的表中才能通过3NF。
3NF的一个更常见的示例是邮政编码和城市。如果用户更改城市值,则会直接影响邮政编码值。
我个人将其保留在2NF中,并通过服务器端代码(C#或Java)进行处理。