【问题标题】:Database design: Best Way to store heterogeneous subtypes of a parent class?数据库设计:存储父类的异构子类型的最佳方式?
【发布时间】:2013-08-24 05:00:38
【问题描述】:

网站有不同类别的产品 (手机、平板电脑、洗衣机等)

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

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

  • 因此,每个类别的规格应单独存储(手机:ScreenSize、内存、操作系统等。手表会有不同的规格..)。

  • 每个类别(手机或手表)预计会有约 1000 多种产品。

问题:

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

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

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

很抱歉详细说明,因为我没有架构,所以我试图让它尽可能清楚。非常感谢您的耐心等待,我愿意接受新的建议。

提前致谢:)


编辑

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

【问题讨论】:

  • 同一产品是否可以在不同的商店有不同的属性,或者产品是否因属性而异(128 meg IPAD vs 256 meg)相同的产品不同的属性或不同的产品?
  • X 商店 128 GB IPAD 售价 1000 美元。y 商店 128 GB IPAD 售价 990 美元。 256 GB IPAD 在 Y 商店售价 1200 美元
  • 前 2 个是同一种产品,但不同商店的价格不同。第三个是另一个产品。

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


【解决方案1】:

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

或在一个表和另一个表中列出所有类别以仅指定关系

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

存储是单独的表 products 将是另一个以类别 id 作为外键的表 以产品 id 和商店 id 作为外键定价另一个表

只是一个简单的想法!!

【讨论】:

  • 您是如何对产品进行分类的。我的是:(电话、平板电脑、笔记本电脑等),每个项目的属性都会说明其规格(制造商:三星,内存:16GB),以便我可以根据这些属性或规格进行过滤。
  • 我不是你的数据库设计师。那只是一个示例数据。虚拟数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2015-12-28
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多