我们如何处理表的所有记录中具有相同值的列?

时间:2013-07-04 20:23:16

标签: mysql sql database-design relational-database normalization

假设我有一张表并简化所有行约为Persons的事情 所以假设我们存储了人的颜色。现在让我们进行简化,我们有100万条记录,所有的颜色都是白色的(愚蠢的例子,但请光着我)。
现在,在这种情况下,white重复超过100万次 现在,如果我们不能将表格改为例如white_person表的方式,是否表示属性colorperson具有特定的关系 1)证明表格中的重复属性? 2)证明创建一个新表并将其视为1-N关系是正确的吗?但正式地说,如何定义这种关系?

3 个答案:

答案 0 :(得分:1)

如果在每一行上重复相同的值,则假设您实际想要建模的依赖关系是∅-> {color},那么您的Persons表违反了2NF:行列式∅(空集)是一个合适的子集一把钥匙满足2NF所需的改变是将color属性移除到键入∅的新表(即单行表)。或者完全从模型中删除属性。

请注意,由于表中某些值的重合,永远不会自动隐含依赖关系。问题在于您需要DBMS执行哪些业务规则以及数据模型是否支持这些规则。

我讨论了一个类似的例子here

答案 1 :(得分:1)

如果事实可以假设,则不需要存储它。因此,如果有一个预先知道其值的个人属性,那么您知道肯定对于数据库中的所有人都是相同的,并且将来总是保持不变,那么你就不要根本不需要将它物理存储在数据库中。

但我怀疑你能做出这样的假设。要降低存储许多重复字符串的成本,请将颜色与其自己的表格分开,使用细长的surrogate key(例如,一个字节或一个16位的int),然后从“它”(通过FOREIGN KEY)引用它。大“桌子。这样,你不重复字符串,你重复(更瘦)整数。这不是标准化的问题(两种变体都是“标准化”),而是优化物理设计。

但是,如果另一个属性在功能上依赖于颜色,那么你肯定应该有单独的表。否则,会有一个transitive functional dependency PK - >颜色 - >另一个,违反了3NF。

例如:

enter image description here

答案 2 :(得分:0)

  

现在,如果我们无法将表格更改为例如white_person表   它是什么意思,它是指属性颜色和人具有的   

的特定关系      

1)证明表中的重复属性?

重复属性在数据库技术中具有特定含义。 意味着您可以找到具有相同值的多个行。 (那些

  

2)证明创建一个新表并将其视为1-N   关系?但正式地说,这种关系会是怎样的   定义

1-N关系将通过功能依赖来识别 - 您找到一个颜色为白色并且颜色也是紫红色的人。一个人可以在您的数据库中使用多少种颜色?