产品线,类别,制造商,相关软件,产品属性等产品数据库设计

时间:2010-01-18 15:59:22

标签: sql sql-server database-design data-modeling

我正在重新开发中型产品数据库的前端和数据库,以便它可以支持类别/子类别,产品线,制造商,支持的软件和产品属性。现在只有一个产品表。将按行,按类别/子类别,按制造商,受支持的软件(可选)显示产品页面。每个页面都会根据其他分类进行额外的过滤。

分类/子类别(多级) 可以将产品和产品系列分配给多个类别树。最多应支持5个级别。

产品系列(单级) 产品组。产品只能在单一产品系列中。

制造商(单级) 产品和产品系列可以分配给单一制造商。

支持的软件(单级) 某些产品仅适用于一个或多个软件,因此产品/产品线可以分配给任何一个或多个软件。

属性(类型/选项 - 可以处理,因此每种类型都是一个类别而项目是子项) 可以为产品和产品线分配属性(例如 - 颜色>红色/蓝色/绿色)。属性应该能够分配给一个或多个类别。

由于所有这些项目基本上都是子类别的类型,我是否将它们全部放在一个主表中,或者将它们分成每个单独的表?

主表的想法:

ClassificationTypes(产品系列,类别/子系列,制造商,软件,属性都是类型)
-TypeID
-Name

分类
-ClassID
-TypeID
-ParentClassID
-Name

ClassificationsProductsAssociations
-ProductID
-ClassID

我仍然需要至少一个表来将类型链接在一起(例如 - 将属性链接到类别)以及将产品线链接到各种类型的方法。

如果我选择每种类型的桌子,它会很快变得混乱,我仍然需要一种将所有东西连接在一起的方法。

多表设置:

分类
-CategoryID
-Name
-ParentCategoryID

CategoriesAssociations
-CategoryID
-ProductID
-ProductLineID?

属性
-AttributeID
-Name
-ParentAttributeID(使用此作为父级将为“color”,而子级将为“red”)

AttributesAssociations
-AttributeID
-ProductID
-CategoryID(我还需要将类别链接到父属性吗?)

CompatibleSoftware
-SoftwareID
-Name

CompatibleSoftwareAssociations
-SoftwareID
-ProductID
-ProductLineID?

制造商
-ManufacturerID
-Name

代理产品
-ProductLineID
-ManufacturerID
-Name

产品
-ProductID
-ProductLineID
-ManufacturerID
-Name

关联的其他选项是使用单个关联表来链接上表:

主协会
-ProductID
-ProductLineID
-ManufacturerID
-CategoryID
-SoftwareID
-AttributeID

什么是最佳解决方案?

4 个答案:

答案 0 :(得分:2)

在我看来,对于多个表格,它使设计更加明显,更具可扩展性。虽然它现在可能适合您的解决方案,但进一步的更改可能会更加困难。

答案 1 :(得分:0)

我同意帕迪。它使您的生活更加轻松,而且您更灵活。你可能想要放入库存控制和其他东西。要将所有内容链接在一起,请使用表的id(整数)父/子。

答案 2 :(得分:0)

我认为可以使用多个表格,但要真正了解,请执行此操作:充实两种方式的设计,然后采用5-10种产品的样本。

在两个设计中填充5-10种产品的表格。

现在开始编写两种方式的查询。您将开始看到哪个更容易编写(我打赌的单个表),您可能会发现仅在一个设计中工作的情况(我打赌的多表)。

完成后你没有丢失工作 - 你可以使用表模式继续前进,你的一些查询已经写完了。

如果你的查询没有意义,似乎很复杂,或者你可以在这里发布并获得反馈 - 真正的代码总能得到更好的评论。

答案 3 :(得分:0)

只是想发表我的决定,因为我对所提供的任何答案都不满意,所以我选择回答我自己的问题。

我最终设置了一组表:

分类类型(例如 - 产品系列,类别,制造商等)

分类(支持父/子邻接列表,嵌套集和物化路径,以便利用每个的优势。我有一个SQL CTE,可以在数据更改时一次填充所有字段)

分类关系(能够将产品与分类联系起来,将分类与其他分类联系起来,并将分类与其他类别联系起来)

我承认解决方案不是100%规范化的,但是这种设置通过创建新类型为我提供了最大的扩展灵活性,并且非常强大且易于查询。