0

我已经使用 php、mysql 和 paypal 创建了(并且基本上完成了)购物车和店面。有一件事困扰着我。我反复读过将标记化数据存储在 mysql 列中的简单错误形式,但我不知道如何处理这种情况。

我允许管理员添加新产品,然后为产品设置可选的用户选择选项。例如,他们可能会添加一个名为“电话”的产品,然后添加一个名为“颜色”的选项,接受的选项是“黑色、白色、红色、灰色”。他们也可能出售没有配置选项的 A4 纸和一双有很多配置选项的鞋子(例如,女装和男装尺码的选择范围从 4 到 13 不等)。

因为我不知道一个产品会有多少个选项并且我不想强制执行硬限制我目前没有“option1”、“option2”等列,而是只有“option_data”看起来像“color|red,black,white,green#memory size|8gb,16gb,32gb”之类的东西,我在#上爆炸以获得不同的选项和| 获取选项名称和可能的数据,最后拆分数据,以获取单独的选项。我的商店然后解析所有这些并生成下拉表供用户选择等。

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

谢谢 :)

4

3 回答 3

1

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

product_options

id INT
product_id INT
option_name VARCHAR

product_option_values

id INT
option_id INT
value VARCHAR
于 2013-10-03T10:30:12.017 回答
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
于 2013-10-03T10:30:48.900 回答
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
于 2013-10-03T10:30:53.313 回答