我正在寻找一些建议,以了解产品数据库的设计以及从中存储/检索数据的最佳方法。我打的块是关于如何最好地表示产品可能具有的各种(有效)选项。产品数据库结构:如何存储每种产品的选项列表?
的基本结构是(不是实际的表定义):
PRODUCT_TABLE {
ID(int),
NAME(varchar),
AVAILABLEOPTIONS(varchar),
etc...
}
COLOROPTIONS_TABLE {
ID(int),
COLORNAME(varchare),
etc...
}
BODYOPTIONS_TABLE {
ID,
BODYNAME,
etc...
}
什么是存储在AVAILABLEOPTIONS字段中的值,让我到指定范围内的那些选项表和ID的最佳方式(即产品可能不适用于特定选项表中的所有选项)
我已经完成了一大堆研究(主要是在这个伟大的网站上),并观察了JSON,串行化值,多维数组等,但我不确定最好的方法。
最后,AVAILABLEOPTIONS值将用于显示产品页面上的选项或用于构造表单以供用户生成有效的产品代码。我也会尝试设置一个输入表单,允许管理员为数据库中的存储生成可用选项值。
任何提示或想法将不胜感激!
我不知道这是否是把这个更新正确的地方,但在这里不用。
已经做了更多的研究,似乎多个值在单个字段中的存储是一个明确的禁忌。我不确定EAV模型是否适合我的需求。但是,当涉及到规范我的数据库要求时,我不确定我是否知道了。我想出了这一点:
的形象在这里:http://dev.aqualux.com.au/images/1.png (不会让我张贴图片的编辑,因为我太新来的...)
其中PID/OID在橙色表是外键。我没有把握的问题是,任何给定的产品能有一个给定类型的多个选项,或者根本就没有....
感谢
不要。不要将列表存储在单个列中。做一些关于“规范化”的研究,并学习如何正确构建表格。你可以从这本[维基百科文章]开始(http://en.wikipedia.org/wiki/Database_normalization)。将列表存储在单个列中使得在查询(或几乎任何其他用户界面)中使用它非常困难。您也不会存储对表的引用;你通过ID在表上加入;如果您有多个选项,则应该在中间表中有多行,每个选项一个,并在该表中加入其他表。再次,研究。 :-) –
@KenWhite是绝对正确的。如果您将可用选项作为列表存储,这意味着您将永远无法使用简单的数据库查询来获取数据 - 一切都将是查询,将结果拉入PHP并解码列表。这意味着一个简单的问题,如“哪些产品蓝色”最终将需要几个单独的查询。可能会改为创建一个AVAILABLEOPTIONS表,其中每个条目代表一个选项(因此该行的数据将包含产品ID,选项类型和选项ID),该表可以包含多个给定产品的条目。 – octern
谢谢肯。有很多人在寻找这样做的方式,但我收集它并不是最好的方法。将继续研究! – nickc