mysql - 电商产品数据库设计:下拉属性+自定义属性(如自定义文本)
问题描述
所以我想为电子商务解决方案的产品模块设计表格和关系。为澄清起见,我将使用一个高度可定制的产品示例,该产品将具有:
- 几个“经典”属性,如颜色或尺寸(通过正常的下拉菜单选择,有几个选项,例如颜色为红色、蓝色或黑色,尺寸为小、中和大)。
- 但除此之外,一些自定义属性(基本上是文本字段或数字字段,当然是通过文本或数字输入字段选择的),用户可以自由更改和定义。
价格将取决于每个属性(下拉菜单 + 自定义),因此我必须在适当的时候在客户端和服务器端编写额外的逻辑。
到目前为止,我的尝试与此问题中给出的解决方案相匹配。它适用于“普通”属性(下拉属性),但它不能很好地扩展到自定义文本或数字字段,因为在我的场景中,variant_value
表格没有任何意义。
有任何想法吗?提前致谢。
解决方案
- 了解 EAV 模式模式(我添加了一个标签)。
- 实施它。
- 然后回来抱怨它的所有问题。
特别是,上述问题中批准的答案建议规范化variant_value。这是使 EAV 变得更糟的一种方法。答案也有一些不必要的AUTO_INCREMENT
id 在具有非常好的 "natural" 的表上PRIMARY KEYs
。这会减慢一些查询。
WordPress 实现 EAV。他们的“postmeta”表执行不力;以下是改进它的建议:http: //mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
这是我关于 EAV 的博客、它的一些问题和一些部分解决方案:http: //mysql.rjweb.org/doc.php/eav
推荐阅读
- c# - 如何从json字符串c#Newtonsoft.json中获取对象列表
- javascript - 无法使用 JSON 将 jqxScheduler 状态存储到 MySQL
- python - 编译错误:gcc:错误:无法识别的命令行选项'-R'
- polymer - 聚合物网络应用程序中的 Facebook“向我们发送消息”按钮
- image - 使用查询将图像插入 postgres 数据库
- linux - 在VI编辑器中如何在打开的文件中定义变量以通过gf打开其他文件
- typo3 - Typo3 RealURL:显示页面 id
- video-encoding - HM 参考软件中的多线程
- javascript - 当我不知道需要比较多少东西时,使用 switch 语句最简单的方法是什么?
- excel - 用户表单/多页 - 除非选择选项按钮,否则禁用下一个按钮