EAV(Entity–Attribute–Value,实体–属性–值)模型是一种用来解决对象属性高度动态、稀疏、易扩展的数据建模方式。它常用于电商商品属性、医疗病历、CMS 字段、配置系统等场景。
下面从「为什么用 EAV」「EAV 怎么解决扩展」「典型结构」「优缺点与改进方案」几个层面说明。
product (
id,
name,
price,
color,
size,
weight,
...
)
问题:
把“列”变成“行”
不再是:
一个实体 = 一行多列
而是:
一个实体 = 多行(属性名 + 属性值)
entity (
id,
type,
name
)
attribute (
id,
name,
data_type -- string / int / datetime
)
entity_attribute_value (
entity_id,
attribute_id,
value
)
entity_id=1 (手机)
attribute_id=10 (品牌) => 苹果
attribute_id=11 (内存) => 256GB
attribute_id=12 (颜色) => 黑色
✅ 新增属性 = 插入数据,不动表结构
→ 只存需要的属性,无 NULL 浪费
SELECT ...
FROM eav
PIVOT (...)
或多次 JOIN
product (id, name, price) -- 稳定字段
product_attr (product_id, attr_id, value)
product (
id,
base_info JSON
)
EAV 通过“属性行化”,用数据代替表结构,从而在不改数据库 schema 的情况下实现无限属性扩展,但代价是查询复杂和性能挑战,通常应与宽表或 JSON 混合使用。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。