如果遇到一个项目,需要新增的时候,他的属性是可以动态添加的,如这个项目有一个额外的属性(例如:数量)而其他项目没有这个属性,并且这个属性要我们之前就定义好,这个时候需要采用到EAV模型
Entity-Attribute-Value (EAV) 模型
EAV 模型是一种常用来处理可扩展属性集的数据库设计方法。在这个模型中,你将数据存储在三个主要的列中:实体(Entity)、属性(Attribute)和值(Value)。
表设计:
Entity 表: 存储实体的基本信息。
Attribute 表: 存储可能的属性名称。
Value 表: 存储实体的属性值,通常包括对 Entity 表和 Attribute 表的外键引用。
优点:
非常灵活,可以轻松添加或删除属性。
缺点:
查询复杂,性能问题,数据完整性维护困难。
实体设计
Product 表: 存储产品的基本信息。
product_id: 产品的唯一标识符(主键)。
product_name: 产品的名称。
Attribute 表: 存储可能的属性名称。
attribute_id: 属性的唯一标识符(主键)。
attribute_name: 属性的名称。
Value 表: 存储产品的属性值。
value_id: 值的唯一标识符(主键)。
product_id: 引用 Product 表的外键。
attribute_id: 引用 Attribute 表的外键。
value: 属性的实际值。
以下是一个示例,这只出现两个表,其实还有一个value表,用来存值,里面是Product的主键,Attribute的主键和这个属性的值