数据库设计:存储父类的异构子类型的最佳方法?

时间:2013-08-23 20:04:00

标签: mysql sql database database-design database-schema

网站包含不同类别的产品 (电话,平板电脑,洗衣机等......)

  • 每个产品都有差异。价格取决于商店(如果用户查看Galaxy S4 16GB,它将为Xstore显示$ X,为Ystore显示$ Y)

  • 该网站将进行大量过滤。例如,电话可以根据价格,颜色等等进行过滤,也可以由制造商或商店过滤。 (所有三星产品,Xstore的所有产品,......等)

  • 因此,每个类别的规格应分开存放(手机:ScreenSize,Memory,Os等......手表将有不同的规格......)。

  • 每个类别(手机或手表)预计都有~1000 +产品。

问题:

我首先想到的是金字塔式的设计。一个表用于所有产品,然后为每个类别添加通用规格(对于电话,它将具有屏幕尺寸,Os,..),然后第三个表用于变化(内存:16GB或32GB,每个商店的价格, ......等等。

问题是:包含所有产品的主表将非常大(数千),并且在过滤时我必须至少在三个表之间来回切换,如果我要过滤三星产品,我会必须处理更多的表(平板电脑,笔记本电脑,......等)。 从性能的角度来看,我不确定它是否会顺利。

所以我想到了直截了当的方式;为每个类别创建一个表。甚至变化也会重复(Galaxy S4 16GB和32GB是2行甚至16GB的价格在Xstore和Ystore将是2个)。我知道它违反了规范化。但是这个表几乎不会超过1000行,我最终会有更简单的代码,我认为它会提高性能,所以我甚至不需要索引。我需要处理所有表格的唯一情况是,当我被制造商过滤时,我将不得不抢三星平板电脑,手机等。

对不起详细说明,我试图尽可能清楚,因为我没有模式。非常感谢您的耐心,我愿意接受新的建议。

提前致谢:)


修改

问题是分类(只有一个级别的电话,平板电脑,..等),每个都在一个单独的表中VS所有在一个表中,子类用于类别和差异属性或规格。这是一个性能问题。

1 个答案:

答案 0 :(得分:0)

类别子类别可以是具有父子关系的单个表,这有助于拥有尽可能多的子级别

或列出一个表中的所有类别和另一个表来指定关系

id category parent
1 samsung    0
2 note       1
3  apple     0
4 ipad       3

商店是sperate table product将是另一个类别为外键的表 使用产品ID和商店ID作为外键定价另一个表

只是一个简短的想法!!