在社交平台中,标签(Tag) 常用于描述用户、动态、话题、商品等对象(如“摄影”“健身”“90后”)。由于标签数量动态增长、不同对象类型标签差异大,EAV(Entity-Attribute-Value,实体-属性-值)模型是一种灵活的存储方案。
下面从模型设计、示例、查询、优缺点与优化几个方面说明。
EAV 用三列代替宽表:
适合属性稀疏、结构不稳定的场景。
entity_id | entity_type | attribute | value
-------------|-------------|-----------|--------
1001 | user | tag | 摄影
1001 | user | tag | 旅行
2001 | post | tag | 美食
2001 | post | tag | 探店
字段说明:
entity_type:user / post / commentattribute:固定为 tagvalue:标签内容为避免“摄影”和“拍照”混乱,应拆分:
tag 表
tag_id | tag_name
1 | 摄影
2 | 旅行
EAV 表(只存 ID)
entity_id | entity_type | attribute | value
1001 | user | tag_id | 1
1001 | user | tag_id | 2
INSERT INTO entity_attr
(entity_id, entity_type, attribute, value)
VALUES
(1001, 'user', 'tag_id', 1),
(1001, 'user', 'tag_id', 2);
SELECT t.tag_name
FROM entity_attr e
JOIN tag t ON e.value = t.tag_id
WHERE e.entity_id = 1001
AND e.entity_type = 'user'
AND e.attribute = 'tag_id';
SELECT entity_id
FROM entity_attr
WHERE attribute = 'tag_id'
AND value = 1;
user_tag(user_id, tag_id)
post_tag(post_id, tag_id)
tags JSON
社交平台用 EAV 存标签的核心是:
对象抽象为 Entity,标签抽象为 Attribute,标签值抽象为 Value
实际生产中,EAV + 标签关系表 + 搜索索引是更稳妥的组合。
如果你有具体平台(如微博 / 小红书 / 抖音)或技术栈(MySQL / PG / MongoDB),我可以给更贴合的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。