作为我最近开始规划的一个项目的一部分,我需要构建一个包含多个产品的数据库结构。举个例子,想想亚马逊的结构方式。它有几个类别,在这些类别中,有几个子类别。
我的问题是,在概念上,我不确定如何构建数据库表。我曾经想过为类别和子类别创建一个自引用表,但是由于我确实计划在数据库中拥有各种各样的产品,我不知道是应该将它们分组到一个名为" products“的表中,还是将它们放在单独的表中。
例如,厕所可能是一种产品,而电视可能是另一种产品。尽管它们有不同的类别/子类别,但它们都是产品。通过将它们放在一个"Products“表中,它们将共享对它们都没有意义的属性。厕所不需要分辨率或显示大小的属性(除非它是一个非常特殊的厕所?)电视也不需要座位大小的属性。
我认为,要解决这个问题,并且仍然把所有东西都保存在一个表中,那就是创建一堆非空属性,如果它们不是必要的话,这些属性可能会丢失,但是常识告诉我,这可能不是解决问题的最好方法。
因此,在这一点上,我觉得我真正的问题是如何构造这个数据库及其表的几个类别/子类别和不同种类的项目。我会创造一张电视桌子和一张厕所桌子吗?这一切将如何组织?这些问题通常是如何计划出来的?
谢谢
发布于 2013-12-27 00:26:08
这更多的是一个设计决策,而不是任何其他决定。
我就是这样把桌子分开的:
categories (例如家庭)
sub_categories (例如,浴室是家庭的外键)
products (例如陶瓷马桶)
至于额外的属性,您可以直接将这些属性存储在products表中,也可以创建另一个名为products_extra_attributes的表,并在products表中存储一个可选的空值,该值将是指向单个产品的附加属性的外键。
讲得通?如果不是的话,我会在稍后编辑,因为我正在用手机回答这个问题。
发布于 2013-12-27 00:51:08
通用产品表是一个很好的方法。每次有新类型的产品时,您都不会想在模式中创建一个新表。
与类别类似,自引用表与父/子关系更好,因此您不必每次需要新级别的子类别时创建新表。
您的products表应该包含所有产品中常见的信息。例如,名称和可能的价格(虽然对于单个产品有不同的价格,那么最好将价格存储在另一个引用该产品的表中)。
如果您有一组与每个产品的特性相关的其他信息,那么可以创建一个attributes表和另一个表来引用该产品的每个属性的值。
下面是一个简单的示例模式:

发布于 2013-12-27 00:24:43
取决于有多少产品。如果您只销售厕所和电视机,那么请继续为它们制作完全独立的表,但是,如果您拥有不同产品类型的1000多个不同的产品类型,那么我可能建议创建一个存储公共属性的products表(它们都有成本,可能还有大小),然后创建一个产品类型表,为每个产品类型指定一组属性,然后创建一个attributes表来定义属性和lat值表。
举个例子,比如索尼的电视。它将在产品价格和链接到产品类型,这将是电视。这将使许多人加入所有电视所拥有的属性,而索尼电视将在每个属性的产品值中包含条目。这样,您就不必重新定义共享属性,所以当您开始销售其他具有分辨率的东西时,您只需将它们添加到产品类型中即可。
讲得通?
https://stackoverflow.com/questions/20793000
复制相似问题