Database 用几种不同的产品设计数据库?

Database 用几种不同的产品设计数据库?,database,database-design,Database,Database Design,作为我最近开始计划的一个项目的一部分,我需要构建一个数据库的结构,该数据库将包含多个产品。举个例子,想想亚马逊的结构。它有几个类别,在这些类别中有几个子类别 我的问题是,从概念上讲,我不确定如何构建数据库表。我曾考虑过为类别和子类别创建一个自引用表,但由于我确实计划在数据库中拥有各种各样的产品,我不知道是应该将它们分组到一个名为“products”的表中,还是将它们全部放在单独的表中 例如,厕所可能是一种产品,而电视可能是另一种产品。尽管它们有不同的类别/子类别,但它们都是产品。通过将它们放在一

作为我最近开始计划的一个项目的一部分,我需要构建一个数据库的结构,该数据库将包含多个产品。举个例子,想想亚马逊的结构。它有几个类别,在这些类别中有几个子类别

我的问题是,从概念上讲,我不确定如何构建数据库表。我曾考虑过为类别和子类别创建一个自引用表,但由于我确实计划在数据库中拥有各种各样的产品,我不知道是应该将它们分组到一个名为“products”的表中,还是将它们全部放在单独的表中

例如,厕所可能是一种产品,而电视可能是另一种产品。尽管它们有不同的类别/子类别,但它们都是产品。通过将它们放在一个“产品”表中,它们将共享对两者都没有意义的属性。马桶不需要分辨率或显示大小属性(除非是非常特殊的马桶?),电视也不需要座椅大小属性

我认为解决这个问题并将所有内容都保存在一个表中的方法是创建一组非空属性,如果它们不是必需的,某些项目可能会缺少这些属性,但常识告诉我,这可能不是最好的方法

所以在这一点上,我觉得我真正的问题是弄清楚如何用几个类别/子类别和不同种类的项来构造这个数据库及其表。我会为电视机和厕所创建一张桌子吗?这一切将如何构建?这些问题通常是如何规划的


谢谢

取决于产品数量。如果你只卖厕所和电视,我会说,继续为它们制作完全独立的表,但是如果你有100种不同的产品类型,所有这些产品都有不同的属性,我可能建议创建一个存储公共属性的产品表(它们都有成本,可能还有大小)然后是为每个产品类型指定一组属性的产品类型表,然后是定义属性的属性表,最后是产品值表

例如,以索尼电视为例。它将出现在有价格和产品类型链接的产品中,即电视。这将一对多加入到所有电视的属性中,索尼电视将在每个属性的产品值中加入条目。这样,您就不必重新定义共享属性,因此当您开始销售其他具有分辨率的产品时,您可以将它们添加到产品类型中


有意义吗?

这更像是一个设计决策,而不是其他任何事情

这就是我将表格分开的方式:

类别
(如家庭)

子类
(例如浴室是家庭外键)

产品
(如陶瓷马桶)

对于额外属性,您可以直接将其存储在products表中,也可以创建另一个名为
products\u extra\u attributes
的表,并在
products
表中存储可选的空值,该值将是指向单个产品的额外属性的外键


有道理吗?如果不是的话,我稍后会在回答电话中的问题时进行编辑。

通用产品表是一个很好的方法。您不会希望每次有新的产品类型时都在模式中创建一个新表

与类别类似,具有父/子关系的自引用表更好,因此每次需要新级别的子类别时,不必创建新表

您的产品表应包含所有产品中通用的信息。例如,名称和可能的价格(尽管如果您对单个产品有不同的价格,那么最好将价格存储在引用该产品的另一个表中)

如果您有一组与每个产品的特性相关的其他信息,那么可以创建一个属性表和另一个表,该表引用该产品的每个属性值

下面是一个简单的模式示例:


好的,我认为这是有道理的。因此,我将为“products”表中的所有产品提供常规属性,并为另一个表“ExtraAttributes”(名称类似于此)提供外键,ExtraAttributes中的每一行都具有不同产品的属性,例如厕所或电视机。这听起来对吗?你明白了:)这取决于你的产品目录的规模-你最好这样做,因为只有当一个产品有额外的属性(如你所想,由产品表中的额外外键值决定)时,你才会加入表。很好。只是观察一下你的图表。为什么不省略categories表并将其属性(id、parent\u id、name)添加到categories\u product表中呢?@fat\u mike当您的产品存在于多个类别中时,上述模式运行良好。它还避免了每次向类别添加产品时重复数据,例如类别名称(因为每个记录都需要类别名称属性)。