假设我有一张表并简化所有行约为Persons
的事情
所以假设我们存储了人的颜色。现在让我们进行简化,我们有100万条记录,所有的颜色都是白色的(愚蠢的例子,但请光着我)。
现在,在这种情况下,white
重复超过100万次
现在,如果我们不能将表格改为例如white_person表的方式,是否表示属性color
和person
具有特定的关系
1)证明表格中的重复属性?
2)证明创建一个新表并将其视为1-N
关系是正确的吗?但正式地说,如何定义这种关系?
答案 0 :(得分:1)
如果在每一行上重复相同的值,则假设您实际想要建模的依赖关系是∅-> {color},那么您的Persons表违反了2NF:行列式∅(空集)是一个合适的子集一把钥匙满足2NF所需的改变是将color属性移除到键入∅的新表(即单行表)。或者完全从模型中删除属性。
请注意,由于表中某些值的重合,永远不会自动隐含依赖关系。问题在于您需要DBMS执行哪些业务规则以及数据模型是否支持这些规则。
我讨论了一个类似的例子here。
答案 1 :(得分:1)
如果事实可以假设,则不需要存储它。因此,如果有一个预先知道其值的个人属性,那么您知道肯定对于数据库中的所有人都是相同的,并且将来总是保持不变,那么你就不要根本不需要将它物理存储在数据库中。
但我怀疑你能做出这样的假设。要降低存储许多重复字符串的成本,请将颜色与其自己的表格分开,使用细长的surrogate key(例如,一个字节或一个16位的int),然后从“它”(通过FOREIGN KEY)引用它。大“桌子。这样,你不重复字符串,你重复(更瘦)整数。这不是标准化的问题(两种变体都是“标准化”),而是优化物理设计。
但是,如果另一个属性在功能上依赖于颜色,那么你肯定应该有单独的表。否则,会有一个transitive functional dependency PK - >颜色 - >另一个,违反了3NF。
例如:
答案 2 :(得分:0)
现在,如果我们无法将表格更改为例如white_person表 它是什么意思,它是指属性颜色和人具有的
的特定关系1)证明表中的重复属性?
重复属性在数据库技术中具有特定含义。 不意味着您可以找到具有相同值的多个行。 (那些 。
2)证明创建一个新表并将其视为1-N
关系?但正式地说,这种关系会是怎样的
定义 1-N关系将通过功能依赖来识别 - 您找到一个颜色为白色并且颜色也是紫红色的人。一个人可以在您的数据库中使用多少种颜色?