我正在重新开发中型产品数据库的前端和数据库,以便它可以支持类别/子类别,产品线,制造商,支持的软件和产品属性。现在只有一个产品表。将按行,按类别/子类别,按制造商,受支持的软件(可选)显示产品页面。每个页面都会根据其他分类进行额外的过滤。
分类/子类别(多级) 可以将产品和产品系列分配给多个类别树。最多应支持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
什么是最佳解决方案?
答案 0 :(得分:2)
在我看来,对于多个表格,它使设计更加明显,更具可扩展性。虽然它现在可能适合您的解决方案,但进一步的更改可能会更加困难。
答案 1 :(得分:0)
我同意帕迪。它使您的生活更加轻松,而且您更灵活。你可能想要放入库存控制和其他东西。要将所有内容链接在一起,请使用表的id(整数)父/子。
答案 2 :(得分:0)
我认为可以使用多个表格,但要真正了解,请执行此操作:充实两种方式的设计,然后采用5-10种产品的样本。
在两个设计中填充5-10种产品的表格。
现在开始编写两种方式的查询。您将开始看到哪个更容易编写(我打赌的单个表),您可能会发现仅在一个设计中工作的情况(我打赌的多表)。
完成后你没有丢失工作 - 你可以使用表模式继续前进,你的一些查询已经写完了。
如果你的查询没有意义,似乎很复杂,或者你可以在这里发布并获得反馈 - 真正的代码总能得到更好的评论。
答案 3 :(得分:0)
只是想发表我的决定,因为我对所提供的任何答案都不满意,所以我选择回答我自己的问题。
我最终设置了一组表:
分类类型(例如 - 产品系列,类别,制造商等)
分类(支持父/子邻接列表,嵌套集和物化路径,以便利用每个的优势。我有一个SQL CTE,可以在数据更改时一次填充所有字段)
分类关系(能够将产品与分类联系起来,将分类与其他分类联系起来,并将分类与其他类别联系起来)
我承认解决方案不是100%规范化的,但是这种设置通过创建新类型为我提供了最大的扩展灵活性,并且非常强大且易于查询。