将可变数量的数据存储在数据库中

时间:2013-10-03 10:24:49

标签: php mysql

我使用php,mysql和paypal创建(并基本完成)购物车和商店前端。有一件事困扰着我。我一再读到它在mysql列中存储令牌化数据的简单形式,但我不知道如何处理这种情况。

我允许管理员添加新产品,然后为产品设置可选的用户选择选项。例如,他们可能会添加一个名为“phone”的产品,然后添加一个名为“color”的选项,其中可接受的选项是“黑色,白色,红色,灰色”。他们也可能出售没有配置选项的A4纸和一双配有ALOT配置选项的鞋子(例如,鞋子尺码可以选择4至13种女士和男士尺码)。

因为我不知道产品会有多少选项,而且我不想强制执行硬限制,所以我目前没有“option1”,“option2”等列,而是我只有“option_data” “它看起来像”颜色|红色,黑色,白色,绿色#内存大小| 8gb,16gb,32gb“,我在#上爆炸以获得不同的选项并在|获取选项名称和可能的数据,最后拆分数据,以获得单独的选项。然后我的商店解析所有这些并生成下拉表供用户选择等等。

因此,存储这样的数据是非常不受欢迎的,而且我不知道产品会有多少选项,所以我不能只为每个选项制作一个列。我如何支持处理这个问题?

谢谢:)

3 个答案:

答案 0 :(得分:1)

理想情况下,您应该通过创建单独的表来规范化数据。

product_options

id INT
product_id INT
option_name VARCHAR

product_option_values

id INT
option_id INT
value VARCHAR

答案 1 :(得分:1)

最佳做法是添加额外的表格。一个存储不同的选项:

option
    id
    name       -- I.e. colour, memory, e.t.c.
    product_id -- FK link to product

还有一个表来存储选项本身:

option_value
    id
    name      -- Choice i.e. red,blue, 5GB e.t.c.
    option_id -- FK Link to option

答案 2 :(得分:0)

我建议坚持“每个变量/值组合一行”。 考虑产品变量的下一个表格方案:

TABLE Product_variables:
  INT product_id
  STRING variable_name
  STRING variable_value

然后你可以:

product_id, variable_name, variable_value
1, memory_size, 8gb
1, memory_size, 16gb
1, memory_size, 32gb
1, colour, red