我正在设计一个(关系型)数据库模式,并希望查询以下哪个是最合适的设计。
情境:
表ProductProperties:60个字段(通过字段CreatedBy对Users表的外键引用)
表用户:5个字段
该应用程序还允许用户创建基本和高级过滤器。这些过滤器与ProductProperties表中的属性相同。基本过滤器使用10个字段,而高级过滤器由所有60个字段组成。
现在我可以:
1)向Table ProductProperties 添加三个字段,即FilterName,IsAdvancedFilter,IsFilter(对于作为实际产品但不是过滤器的记录产生大量空值)
或者,
2)创建一个过滤表,它将是ProductProperties表的近似副本,从而产生两个非常相似的表
哪种设计更好?
谢谢,
答案 0 :(得分:1)
更好的设计总是在不同的表格中有不同的“东西”。如果过滤器与产品真正不同,将它们混合在一起会在尝试处理它们时产生许多麻烦。将它们分开可以消除这些麻烦。
对于常见的列:表不是类,如果它们中的一些具有共同的列,则可以。
最后的想法。将列添加到一个列时,必须将其添加到另一个列。与不同的东西混合到同一个表中时,只要因为它们具有共同的值,就会遇到令人头疼的问题。
答案 1 :(得分:1)
哪种设计更好?
嗯,不是“设计”,而是选择两个提案。绝对是(2)
就设计而言,具有60个字段,空值和非常大的ProductProperties未规范化。因此,如果你想要设计或数据库,首先要做的就是规范化野兽。
然后你会有设计。还有几个较小的表,它们更容易处理,并允许更多的关系功能。然后,当您添加过滤器时,您将根据需要添加一些较小的表,而不是将三列添加到单个难以处理的表中,或者复制它。
其次,与上面分开,我不明白为什么或为什么(2)过滤表,将是产品属性的近似副本,请你解释一下。