温馨提示×

温馨提示×

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

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

EAV模型和普通表有何区别

发布时间:2026-09-19 14:08:33 来源:亿速云 阅读:92 作者:小樊 栏目:数据库

EAV(Entity-Attribute-Value,实体-属性-值)模型和普通表(宽表/固定 schema 表)是两种不同的数据库建模方式,核心区别体现在表结构是否固定、如何存储属性、适用场景等方面。下面从多个维度对比说明。


一、核心结构区别

1. 普通表(固定 Schema 表)

每一类实体对应一张表,列是固定的。

示例:用户表

CREATE TABLE user (
    id INT,
    name VARCHAR(50),
    age INT,
    email VARCHAR(100)
);

特点:

  • 列(属性)在建表时确定
  • 一行代表一个实体
  • 查询直观、性能好

2. EAV 模型

只用三张“通用表”存储所有实体和属性。

示例:EAV 表结构

entity (id, type)
attribute (id, name)
value (entity_id, attribute_id, value)

存储示例:

entity_id attribute_id value
1 1 (name) Tom
1 2 (age) 30
1 3 (email) tom@x.com

特点:

  • 属性动态可扩展
  • 一行只存“一个属性的值”
  • 实体和属性解耦

二、主要区别对比

对比维度 普通表 EAV 模型
表结构 固定列 动态列
扩展性 改表结构(ALTER TABLE) 直接插数据
查询方式 简单 SELECT 需 JOIN / 透视
可读性 高 低
查询性能 快 慢(尤其多属性)
数据校验 强(类型、约束) 弱(值通常是字符串)
适合场景 属性稳定 属性高度不确定

三、优缺点总结

普通表

✅ 优点:

  • 查询简单、性能高
  • 易于索引和约束
  • 易于维护

❌ 缺点:

  • 属性变更成本高
  • 不适合高度异构数据

EAV 模型

✅ 优点:

  • 极度灵活
  • 适合稀疏属性
  • 适合配置化系统

❌ 缺点:

  • 查询复杂(大量 JOIN)
  • 性能差
  • 类型安全弱
  • 容易变成“反模式”

四、典型使用场景

适合普通表

  • 业务模型稳定(订单、用户、商品)
  • 高频查询系统
  • OLTP 系统

适合 EAV

  • 医疗记录(不同病人属性差异大)
  • 商品属性(电商 SKU)
  • 表单/元数据配置系统
  • CMS、低代码平台

五、折中方案(常见最佳实践)

  • 普通表 + JSON 字段(如 PostgreSQL JSONB)
  • 主表固定 + 扩展表 EAV
  • 宽表 + 稀疏列

如果你愿意,我可以:

  • 用具体业务例子对比 EAV vs 普通表
  • 讲 EAV 的 SQL 查询怎么写
  • 分析你当前业务是否适合 EAV
向AI问一下细节

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

AI
助
手