温馨提示×

温馨提示×

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

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

EAV模型是什么

发布时间:2026-09-01 00:49:57 来源:亿速云 阅读:101 作者:小樊 栏目:数据库

EAV 模型(Entity-Attribute-Value,实体-属性-值模型),也被称为开放模式(open schema)垂直模型,是一种用于数据库设计的灵活数据建模方式,特别适合属性数量不固定、变化频繁或高度稀疏的数据场景。


一、核心思想

传统关系型表结构是这样的(宽表):

user_id name age city phone
1 Tom 20 BJ 123

EAV 模型把数据“竖着存”:

entity attribute value
1 name Tom
1 age 20
1 city BJ
1 phone 123

也就是:

  • Entity(实体):谁(如用户 ID)
  • Attribute(属性):什么字段(如 name、age)
  • Value(值):具体值

二、为什么要用 EAV

✅ 优点

  1. 灵活扩展
    • 新增属性不需要改表结构
    • 适合属性不固定或动态变化的系统
  2. 适合稀疏数据
    • 很多实体只有少数属性,宽表会大量 NULL
  3. 通用性强
    • 常用于元数据驱动系统

❌ 缺点

  1. 查询复杂
    • 需要大量 JOIN 或 PIVOT
  2. 性能较差
    • 索引、聚合、统计不友好
  3. 类型不安全
    • value 通常只能存字符串或统一类型
  4. 数据校验困难
    • 约束逻辑要放在应用层

三、典型应用场景

  • 医疗系统(不同病人有不同的检查项)
  • 电商商品属性(手机 / 衣服属性完全不同)
  • CRM / 低代码平台(自定义字段)
  • 配置中心 / 元数据系统

四、简单示例(SQL)

SELECT
  e.entity_id,
  MAX(CASE WHEN attribute='name' THEN value END) AS name,
  MAX(CASE WHEN attribute='age' THEN value END) AS age
FROM eav_table e
GROUP BY e.entity_id;

五、与其他模型对比

模型 特点
宽表 简单、快,但不灵活
JSON 字段 灵活,适合半结构化
EAV 极度灵活,但复杂
宽表 + JSON 现代常见折中方案

如果你愿意,我也可以帮你:

  • 判断你的业务是否适合 EAV
  • EAV vs JSON 做选型对比
  • 给出一个完整 EAV 表设计示例

只要告诉我你的使用场景即可。

向AI问一下细节

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

AI