简短回答:EAV(Entity-Attribute-Value,实体-属性-值)通常被认为是“反范式(denormalized)”设计的一种,但它并不是“错误设计”,而是一种为了灵活性而牺牲关系型范式约束的权衡方案。
下面分点说明。
在关系型数据库中,范式(1NF、2NF、3NF…)的目标是:
典型范式化设计是:
EAV 的典型结构是:
entity_id | attribute | value
例如:
1 | color | red
1 | weight | 10kg
2 | height | 180cm
这违背了传统范式设计中的:
所以从“关系模型范式”角度看: ✅ EAV 是反范式(denormalized)
EAV 的存在是因为范式无法很好解决的问题:
例如:
在这些场景下:
强行范式化反而更痛苦
所以工业界常见做法是:
这些往往比“纯 EAV”更好用。
EAV 是反范式设计,但是一种“有正当理由的反范式”
它不是范式错误,而是用一致性换灵活性。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。