简短回答:EAV(Entity–Attribute–Value,实体-属性–值)模型本身通常被认为是“反范式(denormalized)”的一种设计,但它并不是“错误范式”,而是一种在特定场景下故意做的反范式权衡。
下面展开说明。
在关系型数据库中,范式(1NF、2NF、3NF…)的目标是:
典型的正范式设计是:
例如:
user(user_id, name, age, email)
EAV 的典型结构是:
entity_attr_value(
entity_id,
attribute_name,
value
)
例如:
1, "age", "30"
1, "email", "a@x.com"
2, "height", "175"
这和传统范式设计的区别是:
从关系模型角度看:
✅ 所以:EAV 本质上是一种反范式(denormalized / non-relational-friendly)模型
EAV 的存在通常是为了解决:
这时候如果强行用宽表:
EAV 用“结构灵活性”换“查询复杂性和性能”。
EAV 不是“反数据库范式”的垃圾设计,而是:
EAV 是反范式的,但它是“为了灵活性而主动反范式”,不是无脑反范式。
如果你愿意,我也可以:
你可以直接说场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。