EAV(Entity-Attribute-Value,实体-属性-值)模型和普通表(宽表/固定 schema 表)是两种不同的数据库建模方式,核心区别体现在表结构是否固定、如何存储属性、适用场景等方面。下面从多个维度对比说明。
每一类实体对应一张表,列是固定的。
示例:用户表
CREATE TABLE user (
id INT,
name VARCHAR(50),
age INT,
email VARCHAR(100)
);
特点:
只用三张“通用表”存储所有实体和属性。
示例: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 / 透视 |
| 可读性 | 高 | 低 |
| 查询性能 | 快 | 慢(尤其多属性) |
| 数据校验 | 强(类型、约束) | 弱(值通常是字符串) |
| 适合场景 | 属性稳定 | 属性高度不确定 |
✅ 优点:
❌ 缺点:
✅ 优点:
❌ 缺点:
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。