EAV(Entity–Attribute–Value,实体-属性-值)模型是一种用来处理高度动态、属性稀疏且结构不固定数据的数据库建模方式。下面我从概念 → 适用场景 → 表结构设计 → 示例 → 优缺点 → 实践建议一步步说明。
传统表结构:
用户表:id, name, age, email
如果不同用户有不同的属性(身高、爱好、医保号、设备型号……),表会无限膨胀。
EAV 把数据拆成三列:
✅ 适合:
❌ 不适合:
entities (
id INT PRIMARY KEY,
type VARCHAR(50) -- user / product / patient
)
attributes (
id INT PRIMARY KEY,
name VARCHAR(50),
data_type VARCHAR(20) -- string / int / date
)
entity_values (
entity_id INT,
attribute_id INT,
value TEXT,
PRIMARY KEY (entity_id, attribute_id)
)
属性:
数据:
entity_values
entity_id | attribute_id | value
1 | 1 | 28
1 | 2 | 篮球
2 | 3 | M123456
查询用户 1 的所有属性:
SELECT a.name, v.value
FROM entity_values v
JOIN attributes a ON v.attribute_id = a.id
WHERE v.entity_id = 1;
users (
id INT,
attrs JSON
)
EAV 不是“更好”的模型,而是**“更灵活但更复杂”的模型**。
能不用就不用,不得不用时再上。
如果你有具体场景(电商 / 医疗 / 配置系统),我可以帮你设计一套 EAV 表结构。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。