我才刚刚开始学习关系数据库。在研究在线购物网站的数据库时,我发现许多示例创建了一个类别表,并在类别名称中添加了ID字段。我不知道他们为什么需要创建类别表并将类别ID用作关联产品表的外键。如果我删除类别表并将类别名称直接添加到产品表,将会怎样?
答案 0 :(得分:2)
我认为很多情况下,您需要一个显示类别的网站菜单。通过此菜单,人们可以查看您的类别(男装,女装,儿童,配饰),一旦单击它,便可以看到与他们相关的产品。
如果将类别名称添加到产品中,由于需要循环,很难将菜单内容更新,将类别归类到产品表中。另外,更新产品表中的类别名称比较困难,因为类别名称可能存在于许多产品记录中,
如果您有一个类别表,则只需维护类别表(查看类别表中的内容并更新DB记录(如果要更改菜单))。
在长期维护中,需要分类表。
在我遇到的情况下,我想要一个空的类别,该类别仅显示在网站菜单(不包含产品的菜单项)中,如果我没有类别表,则无法显示。
答案 1 :(得分:1)
仅插入类别名称即可完成POC,但您需要了解什么是规范化以及为什么需要它。
第一个范式(1NF):当实体类型包含 无重复数据组 时,它属于1NF。
第二范式(2NF):实体类型在1NF中时为2NF,而在其所有非关键属性都完全依赖于其主键时为
。第三范式(3NF):实体类型在2NF中时为3NF,而在其所有属性直接取决于主键时为 。
答案 2 :(得分:1)
如果我删除类别表并将类别名称直接添加到产品表,会发生什么?
假设您将类别与每种产品一起存储,并且有一天您的老板告诉您您拼错了类别名称。哪一个?
他说“剧院”。还是他说“剧院”?哪个是对的?您检查一下,发现“剧院”和“剧院”在其中两种产品中几乎被平均使用。
那么上司的意思是哪个拼写错误,哪个是正确的?
如果将正确的拼写存储在一个地方的自己的类别表中,则可以确定。您可以对其进行更正,所有引用它的产品都将隐式得到更正。
这是规范化的一个参数,但请记住,使用整数id只是一个约定。它与规范化无关。您可以将字符串用作表的主键,因此可以在引用该表的表中将字符串用作外键。
可以对键列使用非整数。只要存在一个存储规范值的实例,它就可以满足规范化的目标-即减少数据异常。