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

时间:2016-05-06 14:21:26

标签: php mysql database-design entity-attribute-value nosql

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

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

  1. 键=>值与megajoins相符。
  2. 一张桌子里的所有东西。
  3. 为每个类别创建一个产品表和一个联接表。
  4. 我不知道的独角兽质量解决方案。
  5. 我赞成选项3,但这仍然感觉不对,难以扩展,我不确定我是否忘记某些事情,或者我多年的关系php / mysql思维正在引导我走开从另一种方式更好的选择。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你需要一种键/值表来解决这个问题。

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

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

这导致类似:

表类别

category_id   text  
c1            PC
c2            Washing machine

表格产品

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

表格属性

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