我使用php,mysql和paypal创建(并基本完成)购物车和商店前端。有一件事困扰着我。我一再读到它在mysql列中存储令牌化数据的简单形式,但我不知道如何处理这种情况。
我允许管理员添加新产品,然后为产品设置可选的用户选择选项。例如,他们可能会添加一个名为“phone”的产品,然后添加一个名为“color”的选项,其中可接受的选项是“黑色,白色,红色,灰色”。他们也可能出售没有配置选项的A4纸和一双配有ALOT配置选项的鞋子(例如,鞋子尺码可以选择4至13种女士和男士尺码)。
因为我不知道产品会有多少选项,而且我不想强制执行硬限制,所以我目前没有“option1”,“option2”等列,而是我只有“option_data” “它看起来像”颜色|红色,黑色,白色,绿色#内存大小| 8gb,16gb,32gb“,我在#上爆炸以获得不同的选项并在|获取选项名称和可能的数据,最后拆分数据,以获得单独的选项。然后我的商店解析所有这些并生成下拉表供用户选择等等。
因此,存储这样的数据是非常不受欢迎的,而且我不知道产品会有多少选项,所以我不能只为每个选项制作一个列。我如何支持处理这个问题?
谢谢:)
答案 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