温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

EAV模型能存多值吗

发布时间:2026-10-09 21:44:31 来源:亿速云 阅读:90 作者:小樊 栏目:数据库

简短回答:
EAV(Entity-Attribute-Value)模型本身可以存“多值”,但要分清楚你指的是哪种“多值”。


一、EAV 模型是什么(回顾)

EAV 常见结构:

  • entity_id:实体
  • attribute_id:属性
  • value:属性值

例如:

entity_id | attribute_id | value
1         | color        | red
1         | size         | M

二、EAV 能不能存“多值”?

✅ 情况 1:同一属性多个值(最常见)

可以,而且是 EAV 的强项

例如一个商品有多个颜色:

entity_id | attribute_id | value
1         | color        | red
1         | color        | blue

✅ 一行一个值,天然支持多值
✅ 不需要改表结构


✅ 情况 2:一个字段里存多个值(如 JSON / 逗号分隔)

也可以,但不推荐:

entity_id | attribute_id | value
1         | color        | red,blue

❌ 不利于查询
❌ 破坏范式
❌ 索引困难


❌ 情况 3:EAV 不能直接“在一个单元格里结构化多值”

EAV 是扁平结构,不是嵌套结构(不像 JSON / 文档库)。

如果你需要:

  • 数组
  • 对象
  • 嵌套结构

那 EAV 不是最佳选择,应考虑:

  • JSON 字段(MySQL / PG)
  • MongoDB
  • 关系表(多对多)

三、EAV 存多值的典型做法

✅ 正确姿势:拆成多行

user_id | attribute | value
10      | phone     | 13800000000
10      | phone     | 13900000000

查询某用户所有电话:

SELECT value
FROM eav
WHERE entity_id = 10
  AND attribute = 'phone';

四、EAV 存多值的缺点

  • 查询复杂(大量 JOIN / 行转列)
  • 性能差(大表明显)
  • 校验困难(类型、格式)

五、什么时候适合用 EAV?

✅ 属性极其不固定
✅ 属性数量远大于实体
✅ 多值属性常见(标签、特征)

❌ 强结构业务
❌ 高频复杂查询


六、一句话总结

EAV 可以存多值,而且擅长“一个属性多个值”,但不擅长“一个值里嵌套多值结构”。

如果你愿意,我可以:

  • 给你一个 EAV vs JSON 的对比
  • 帮你设计一个具体业务的 EAV 表结构
  • 告诉你什么时候不该用 EAV
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手