数据库设计问题(额外字段与额外表)

时间:2011-01-13 23:08:17

标签: database-design relational-database

我正在设计一个(关系型)数据库模式,并希望查询以下哪个是最合适的设计。

情境:

表ProductProperties:60个字段(通过字段CreatedBy对Users表的外键引用)

表用户:5个字段

该应用程序还允许用户创建基本和高级过滤器。这些过滤器与ProductProperties表中的属性相同。基本过滤器使用10个字段,而高级过滤器由所有60个字段组成。

现在我可以:

1)向Table ProductProperties 添加三个字段,即FilterName,IsAdvancedFilter,IsFilter(对于作为实际产品但不是过滤器的记录产生大量空值)

或者,

2)创建一个过滤表,它将是ProductProperties表的近似副本,从而产生两个非常相似的表

哪种设计更好?

谢谢,

2 个答案:

答案 0 :(得分:1)

更好的设计总是在不同的表格中有不同的“东西”。如果过滤器与产品真正不同,将它们混合在一起会在尝试处理它们时产生许多麻烦。将它们分开可以消除这些麻烦。

对于常见的列:表不是类,如果它们中的一些具有共同的列,则可以。

最后的想法。将列添加到一个列时,必须将其添加到另一个列。与不同的东西混合到同一个表中时,只要因为它们具有共同的值,就会遇到令人头疼的问题。

答案 1 :(得分:1)

哪种设计更好?

嗯,不是“设计”,而是选择两个提案。绝对是(2)

就设计而言,具有60个字段,空值和非常大的ProductProperties未规范化。因此,如果你想要设计或数据库,首先要做的就是规范化野兽。

  • 现在,您正在处理位于标有“数据库”的容器中的平面文件,您可以在其上使用一些(当然不是大多数)SQL函数。

然后你会有设计。还有几个较小的表,它们更容易处理,并允许更多的关系功能。然后,当您添加过滤器时,您将根据需要添加一些较小的表,而不是将三列添加到单个难以处理的表中,或者复制它。

其次,与上面分开,我不明白为什么或为什么(2)过滤表,将是产品属性的近似副本,请你解释一下。