首页/数据/数仓建模速查/维度中避免 EAV 反模式
维度与事实设计149 条

维度中避免 EAV 反模式

把维度属性做成「对象-属性-值」三列(EAV)看似万能,实际让查询、校验与统计全部复杂化;固定属性应列化,动态属性走标签表。

数仓建模速查数据更新于 2026-10-12
EAVattr_name / attr_value 行式存储
代价join 多、类型弱、校验难
替代固定列 + 标签表

EAV 查询之痛

EAV 查询之痛
-- 每次取两个属性都要自连接
SELECT a.entity_id
FROM dim_eav a JOIN dim_eav b ON a.entity_id = b.entity_id
WHERE a.attr = 'color' AND a.val = 'red'
  AND b.attr = 'size' AND b.val = 'L';
属性稳定且经常组合查询时,应直接建列并建索引。

易错点

  • EAV 表在数仓盲目套用,性能与可用性双输
  • 值列统一字符串,比较与聚合语义丢失

数据来源与参考

  • 数据仓库工具箱:维度设计反模式
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌