温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是EAV实体属性值模型

发布时间:2026-10-31 11:50:22 来源:亿速云 阅读:95 作者:小樊 栏目:数据库

EAV(Entity-Attribute-Value,实体-属性-值)模型是一种用于灵活存储具有大量可变属性数据的数据库设计模式,常用于属性数量不固定、差异很大的业务场景。


一、核心思想

传统表结构通常是“宽表”:

用户表:id, name, age, email, phone ...

但如果不同用户有不同的属性(如皮肤类型、血型、喜欢的运动),且属性经常变化,宽表就难以维护。

EAV 把数据拆成三要素:

  • Entity(实体):被描述的对象(如用户、商品)
  • Attribute(属性):属性的定义(如“年龄”“肤色”)
  • Value(值):具体的值

二、典型表结构

1. 实体表

entities
---------
id  | type
1   | user
2   | user

2. 属性表

attributes
----------
id  | name      | type
1   | age       | int
2   | skin_type | string

3. 值表(EAV核心)

entity_values
--------------
entity_id | attribute_id | value
1         | 1            | 25
1         | 2            | oily
2         | 1            | 30

读取用户 1 的年龄和肤质,需要 join 三张表。


三、优点

✅ 高度灵活

  • 新增属性不需要改表结构
  • 适合属性差异极大的数据(医疗、电商、CMS)

✅ 避免空列浪费

  • 不需要为不存在的属性留 NULL 列

✅ 易于扩展系统

  • 非常适合配置化、元数据驱动的系统

四、缺点

❌ 查询复杂

  • 大量 JOIN,SQL 难写、性能差

❌ 约束弱

  • 类型、必填、唯一性难以保证

❌ 索引和统计困难

  • 不利于报表和数据分析

五、适用场景

✅ 适合:

  • 商品属性(颜色/尺寸/材质不固定)
  • 医疗病历(检查项差异大)
  • 自定义表单 / 元数据系统

❌ 不适合:

  • 属性固定、结构稳定的业务
  • 高频复杂查询、强事务系统

六、常见替代方案

  • JSON / JSONB 字段(如 PostgreSQL)
  • 宽表 + 扩展字段
  • 父子表 / 稀疏表
  • 图数据库(属性图)

如果你愿意,我也可以用 具体例子(如电商商品、用户画像) 或 EAV vs JSON 的对比 来进一步说明。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手