存储不同类型的产品数据的正确方法是什么

What is the right approach for storing different types of product data

我正在创建一个将产品数据存储在(现在的)关系数据库中的应用程序。但是洗衣机与笔记本电脑具有不同的特性。它们都是一种产品,总是有价格、标题、描述和图像,但只有笔记本电脑有硬盘(大部分)

那么选择什么作为模特呢?

  1. key=> value metatable with megajoins.
  2. 一应俱全table。
  3. 为每个类别创建一个产品 table 和一个连接 table。
  4. 我不知道的独角兽质量解决方案。

我赞成选项 3,但这仍然感觉不对并且难以扩展,我不确定我是否忘记了什么或者我多年的关系 php / mysql 思考正在引导我远离另一个更好的选择。

有同样的困境。选择一个包含基本信息的产品数据库,另一个包含网上商店信息的数据库,然后是用于存储标签的键值数据库,以及显示在单独页面(详细信息页面)上的自定义规范

在组合中添加位置或类别限制以保持快速查询并查看云数据库托管。

你需要一种 key/value table 来解决这个问题。

但有些事情需要考虑。洗衣机的转速可能是 1200 或 1400 rpm,但肯定不是 367。所以有些值必须从列表中选择,而其他值可以是自由文本。然后可能有一些值是强制性的,而其他值则不是,例如可能带有键盘(您可以进一步指定)或不带有键盘的计算机。

但是假设只有值列表属性(没有自由文本),对于可选属性,您在列表中有一个条目 'none' 而对于强制性则没有。然而,这意味着突然间一个类别的所有属性都是 "obligatory"(即对于 PC,你 必须 说出什么键盘,即使它是 'none',而对于一把椅子,你不能)。

这会导致类似这样的结果:

table 类别

category_id   text  
c1            PC
c2            Washing machine

table 产品

product_id   category_id   text           ...
p1           c2            Washy WM1000
p2           c1            Super PC

table 属性

property_id   text
100           rpm
200           keyboard

table property_values

value_id   property_id   text
21         100           1200
22         100           1400
23         200           with numpad
24         200           without numpad
25         200           none

category_properties

category_id   property_id
c1            200
c2            100

product_values

product_id   value_id
p1           22
p2           23