我有一个具有这种结构的表:
col1将是“product_name”和col2 “product_name_abbrevified”。
忽略id列我有这个数据:
1 1 43
1 1 5
1 1 6
1 1 7
1 1 8
2 2 9
2 2 10
2 2 34
2 2 37
2 2 38
2 2 39
2 2 50
我可以做另一个表并放在那里col1和col2列,因为它们是重复的。像这样的东西:
但是我确定它不会重复超过15次,所以……值得吗?
提前致谢。
我有一个具有这种结构的表:
col1将是“product_name”和col2 “product_name_abbrevified”。
忽略id列我有这个数据:
1 1 43
1 1 5
1 1 6
1 1 7
1 1 8
2 2 9
2 2 10
2 2 34
2 2 37
2 2 38
2 2 39
2 2 50
我可以做另一个表并放在那里col1和col2列,因为它们是重复的。像这样的东西:
但是我确定它不会重复超过15次,所以……值得吗?
提前致谢。
是的,您应该将它们拆分为单独的表格 - 这是规范化到Second Normal Form的一个示例。
你现在确定了,但是你什么时候会在一年后延长你的申请呢?拆分表
仅使用一个带有 ID 的表,两VARCHAR
列用于名称和缩写,以及NUMBER
用于价格。
规范化有利于避免重复数据。您的模型很小,数据很小,您不必担心并留下一个实体(表)。
在实际项目中,有时我们会正常化,然后意识到我们搞砸了。在重复数据和易于理解模型和查询之间取得平衡总是好的。更不用说在使用数据仓库数据库时......
这是数据库设计中一个非常基础的问题,答案是响亮的“两张表”!以下是其中的一些原因:
如果您有一个表,那么有人可能会错误地输入带有产品名称“1”和缩写产品名称“2”的新行 阻止这种情况的唯一方法是添加规则和约束 - 远比拆分表复杂得多首先。
查看数据库模式应该可以有意义地告诉您它代表什么。如果事实是您不能拥有产品名称为“1”且产品名称缩写为“2”的产品,那么通过查看表结构应该清楚这一点。一张表告诉您相反的情况,即 UNTRUE。数据库应该说实话 - 否则会产生误导。
如果您以外的任何人查看或针对此数据库进行开发,他们可能会因这种偏离此类基本设计规则的情况而感到困惑和误导。或者更糟的是,如果他们认为它没有经过精心设计,因此不小心自己的工作,可能会导致破窗综合症。
该原则被称为“规范化”,它是关系数据库的核心,而不仅仅是一堆数据:)