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

Database design 数据库设计问题(额外字段与额外表),database-design,relational-database,Database Design,Relational Database,我正在设计一个(关系型)数据库模式,想询问以下哪种设计最合适 场景: 表ProductProperties:60个字段(通过字段CreatedBy外键引用用户表) 表格用户:5个字段 该应用程序还允许用户创建基本和高级过滤器。这些筛选器与ProductProperties表中的属性相同。基本过滤器使用10个字段,而高级过滤器由所有60个字段组成 现在我可以: 1)将三个字段添加到表ProductProperties中,即FilterName、IsAdvancedFilter、IsFilter(对

我正在设计一个(关系型)数据库模式,想询问以下哪种设计最合适

场景:

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

表格用户:5个字段

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

现在我可以:

1)将三个字段添加到表ProductProperties中,即FilterName、IsAdvancedFilter、IsFilter(对于实际产品而非筛选器的记录,会产生大量空值)

或者

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

哪种设计更好


谢谢,

更好的设计总是在不同的表中有不同的“东西”。如果一个过滤器与一个产品真的不同,那么在处理它们时,将它们混合在一起会造成很多麻烦。将它们分开可以消除这些头痛

至于公共列:表不是类,如果其中一些表有公共列,这是可以的

最后的想法。将列添加到一个列时,必须将其添加到另一个列。这与将不同的东西混合到同一个表中,仅仅因为它们有相同的值而让您头疼的问题相比,是微不足道的。

哪种设计更好

嗯,不是“设计”,而是两个方案的选择。肯定(2)

就设计而言,具有60个字段、空值和非常大的ProductProperties没有标准化。因此,如果您想要设计或数据库,首先要做的就是规范化beast

  • 现在,您正在处理位于标记为“数据库”的容器中的平面文件,您可以在其上使用一些(当然不是大多数)SQL函数
然后你就有了设计。和几个较小的表,它们更容易处理,并允许更多的关系功能。然后,当您添加过滤器时,您将添加一些较小的表(视情况而定),而不是将三列添加到一个笨拙的表中,或者复制它


其次,除上述内容外,我不明白(2)筛选表如何或为什么会是产品属性的近似副本,请您解释。

如何使用ProductProperties?我们是否有任何product表具有ProductProperties的外键?筛选器表几乎是product properties表的副本,因为应用程序允许按产品属性进行筛选,用户可以存储他们创建的筛选器。基本筛选器只使用5个属性,而高级筛选器使用所有属性。产品属性表也可以规范化,但这将大大增加联接的数量。@fjxx。1) 好的,但是您有一个单独的产品表。你是否在使用像我的“SQL”一样的免费软件(非SQL)2)那么,增加加入数量的恐惧是什么呢?这就是关系数据库的本质。3) 如果您发布DDL(表和索引),并识别每个表和索引的所有ProductType和属性,我将修复您的整个问题,包括性能。