EAV(Entity–Attribute–Value,实体–属性–值)模型与传统的“普通表”(即宽表/固定列模型)是两种不同的数据库建模方式。下面从结构、优缺点、适用场景等方面对比它们的不同。
示例(用户表):
users
| id | name | age | city |
|----|-------|-----|--------|
| 1 | Alice | 30 | Beijing|
| 2 | Bob | 25 | Shanghai|
特点:
示例:
entities
| entity_id | entity_type |
|-----------|-------------|
| 1 | user |
attributes
| attr_id | attr_name |
|---------|-----------|
| 1 | name |
| 2 | age |
| 3 | city |
values
| entity_id | attr_id | value |
|-----------|---------|-----------|
| 1 | 1 | Alice |
| 1 | 2 | 30 |
| 1 | 3 | Beijing |
特点:
| 对比维度 | 普通表 | EAV 模型 |
|---|---|---|
| 表结构 | 固定列 | 动态属性 |
| 扩展性 | 差(需改表) | 好(加数据即可) |
| 查询复杂度 | 低 | 高 |
| 性能 | 高 | 相对较低 |
| 数据校验 | 强(类型/约束) | 弱 |
| 可读性 | 好 | 差 |
| 适合场景 | 结构稳定业务 | 属性多变业务 |
优点
缺点
优点
缺点
实际项目中常采用混合模式:
例如:
users (普通表)
+ profiles_json (JSON 扩展字段)
或:
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。