2011-01-13 89 views
1

我正在设计一个(关系数据库)数据库模式,并且想要查询以下哪项是最合适的设计。数据库设计问题(额外字段vs附加表格)

场景:

表ProductProperties:60场(通过字段CreatedBy外键引用的用户表)

表的用户:5个字段

该应用程序还允许用户创建基本和高级过滤器。这些过滤器与ProductProperties表中的属性相同。基本过滤器采用了10场,同时,先进的过滤器是由所有60

现在我可以:

1)添加三个字段表ProductProperties即FILTERNAME,IsAdvancedFilter,IsFilter(导致大量的对于这是实际的产品,但没有过滤器)

或记录)的空值,

2创建一个过滤器表这将导致两个大的已经表ProductProperties的近副本ry类似的表格

哪个设计会更好?

谢谢,

+0

你如何使用ProductProperties?我们有任何产品表,它有ProductProperties的外键吗? – 2011-01-13 23:13:49

+0

@Nitin是的,这是正确的。 – fjxx 2011-01-14 01:24:25

回答

1

哪种设计会更好?

那么,不是“设计”,而是两个建议的选择。当然,(2)

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

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

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

其次,并且与上述不同,我不明白为什么(2)Filter表会成为产品属性的近似副本,请您解释一下。

1

更好的设计总是在不同的表中有不同的“事物”。如果过滤器与产品完全不同,将它们混合在一起会在处理它们时产生许多令人头痛的问题。保持他们分开消除了这些头痛。

至于常见列:表不是类,如果其中一些有共同的列是可以的。

最后的想法。当你添加一列时,你将不得不把它添加到另一个。这与你遇到的头痛相比是微不足道的,因为不同的事物由于具有相同的值而被混合到同一个表中。