简短回答:
EAV(Entity-Attribute-Value)模型本身可以存“多值”,但要分清楚你指的是哪种“多值”。
EAV 常见结构:
entity_id:实体attribute_id:属性value:属性值例如:
entity_id | attribute_id | value
1 | color | red
1 | size | M
可以,而且是 EAV 的强项
例如一个商品有多个颜色:
entity_id | attribute_id | value
1 | color | red
1 | color | blue
✅ 一行一个值,天然支持多值
✅ 不需要改表结构
也可以,但不推荐:
entity_id | attribute_id | value
1 | color | red,blue
❌ 不利于查询
❌ 破坏范式
❌ 索引困难
EAV 是扁平结构,不是嵌套结构(不像 JSON / 文档库)。
如果你需要:
那 EAV 不是最佳选择,应考虑:
user_id | attribute | value
10 | phone | 13800000000
10 | phone | 13900000000
查询某用户所有电话:
SELECT value
FROM eav
WHERE entity_id = 10
AND attribute = 'phone';
✅ 属性极其不固定
✅ 属性数量远大于实体
✅ 多值属性常见(标签、特征)
❌ 强结构业务
❌ 高频复杂查询
EAV 可以存多值,而且擅长“一个属性多个值”,但不擅长“一个值里嵌套多值结构”。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。