【发布时间】:2012-03-09 08:31:32
【问题描述】:
你好,stackoverflow 社区!
我正在开发一个相当大的数据库驱动的 Web 应用程序。随着更多组件的添加,底层数据库变得越来越复杂,但到目前为止,我完全没有遇到任何问题,可以很好地规范化数据。
但是,这个最终组件意味着可以容纳产品的表格。 每个产品都有一个类别,并且根据类别,有不同的字段。 为每个产品类别制作一个表格似乎并不正确,因为目前有五种类型,并且它们仍然有很多共同的领域。 (但以奇怪的方式 - 一些通用字段,如描述和价格对所有 5 个类别都是通用的,但一些属性在 1 和 2 之间共享,其他属性在 3、4、5 之间共享,等等)。
出于明显的性能原因,我试图避开 EAV 模型。
问题是,根据用户想要输入数据库的产品类型,有一些(但不完全)不同的字段结构 - 它们都有名称和一般描述,但其他属性,例如“区域覆盖”只能应用于某些类别,例如种子和杀虫剂,但不能应用于具有柴油/汽油布尔值和许多其他燃料相关属性的燃料。
我应该只提取表格中的核心特征,并为每个类别类型再制作五个吗?这在未来会有点难以扩展。
我目前的想法是让产品表包含来自所有可能类别的所有字段,然后只使用另一个表来描述产品表中的哪个类别具有哪些字段。
product: id | type | name | description | price | composition | area covered | etc.
fields: id | name (contains a list of the fields in the above table)
product-fields: id | product_type | field_id (links a bunch of fields to the product table based on the product type)
我认为这不会太慢,易于搜索(无需实际加入其他表,只需根据一些输入在主产品表上执行搜索),它会促进表单生成和数据等事情只需一个轻量级的附加查询 /join 即可进行验证。 (从数据库中获取产品并加入字符串中实际使用的字段的串联列表 - 拆分并根据其包含的内容显示正确的表单字段,即与该产品实际关联的字段。
感谢您的麻烦! 安德烈·巴尔桑
【问题讨论】:
标签: mysql sql database database-design