EAV 模型(Entity-Attribute-Value,实体-属性-值模型),也被称为**“开放模式(open schema)”或“垂直模型”**,是一种用于在关系型数据库中存储高度稀疏、结构灵活且属性数量不确定的数据的数据库设计模式。
在传统的数据库设计中,我们通常为每个实体设计固定的列(如 用户表(user_id, name, age, email))。但如果实体的属性非常多、变化频繁,或者不同实体拥有完全不同的属性(例如电商中的手机和衣服属性完全不同),传统宽表会变得难以维护。
EAV 模型将原本“横着”存储的数据“竖起来”存储,用三列来描述一个属性:
假设我们有一张 产品 表,传统模型可能是:
| product_id | color | weight | screen_size | author |
|---|---|---|---|---|
| 1 | 红 | 200g | 6.1寸 | NULL |
| 2 | NULL | NULL | NULL | 张三 |
在 EAV 模型中,它会变成一张通用表(如 产品属性表):
| entity_id (产品ID) | attribute (属性名) | value (属性值) |
|---|---|---|
| 1 | color | 红 |
| 1 | weight | 200g |
| 1 | screen_size | 6.1寸 |
| 2 | author | 张三 |
ALTER TABLE 就能随时增加新属性(如突然要给商品加一个“防水等级”属性,直接插入一行即可)。随着技术发展,面对 EAV 的痛点,很多系统选择了其他方案:
JSON 类型、PostgreSQL 的 JSONB):兼顾关系型和灵活性。如果你是在做系统设计或遇到具体业务(比如电商商品库),可以告诉我,我能给你更具体的表结构设计建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。