温馨提示×

温馨提示×

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

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

怎样用EAV做内容聚合页

发布时间:2026-10-31 13:06:27 来源:亿速云 阅读:95 作者:小樊 栏目:数据库

EAV(Entity–Attribute–Value,实体-属性-值)模型常用于结构灵活、字段不固定的业务场景,比如电商商品、CMS 内容、配置项等。用在内容聚合页上时,核心目标是:

用一套统一模型存储多种内容类型,再按条件聚合展示。

下面按“思路 → 表结构 → 查询 → 聚合页实现”逐步说明。


一、EAV 做内容聚合页的核心思路

内容聚合页通常包含:

  • 多种内容类型(文章、视频、商品、活动)
  • 不同内容有不同字段
  • 页面需要按标签 / 分类 / 时间聚合

EAV 的优势:

  • 不用为每种内容建不同表
  • 新字段无需改表结构
  • 聚合时统一从 value 取数据

二、基础 EAV 表结构示例

1. 实体表(内容主体)

content (
  id,
  type,        -- article / video / product
  title,
  created_at
)

2. 属性表(字段定义)

attribute (
  id,
  name,        -- author / duration / price / tag
  type         -- string / int / datetime
)

3. 值表(EAV 核心)

content_attribute (
  content_id,
  attribute_id,
  value
)

三、内容如何存(示例)

文章

content: id=1, type=article, title="EAV 入门"
attribute: author, tag
content_attribute:
(1, author, "张三")
(1, tag, "数据库")

视频

content: id=2, type=video, title="EAV 实战"
attribute: duration, tag
content_attribute:
(2, duration, "10:23")
(2, tag, "数据库")

四、聚合页常见查询方式

1. 按标签聚合(最常用)

SELECT c.*
FROM content c
JOIN content_attribute ca
  ON c.id = ca.content_id
WHERE ca.attribute_id = (SELECT id FROM attribute WHERE name='tag')
  AND ca.value = '数据库'
ORDER BY c.created_at DESC;

2. 多条件聚合(标签 + 类型)

WHERE c.type IN ('article','video')
  AND ca.value = '数据库'

3. 动态字段展示(PIVOT 思路)

SELECT
  c.id,
  MAX(CASE WHEN a.name='author' THEN ca.value END) AS author,
  MAX(CASE WHEN a.name='duration' THEN ca.value END) AS duration
FROM content c
JOIN content_attribute ca ON c.id = ca.content_id
JOIN attribute a ON ca.attribute_id = a.id
GROUP BY c.id;

五、内容聚合页实现建议

前端结构

  • 统一卡片组件
  • 根据 type 渲染不同字段
  • 标签 / 筛选条件动态读取 attribute

后端建议

  • 聚合查询走 预聚合表 / 视图
  • 热数据可冗余到宽表
  • EAV 只存“可变属性”

性能注意

  • EAV 不适合高频聚合
  • 大站建议:
    • EAV + 宽表混合
    • 或用 JSON 字段替代部分 EAV

六、什么时候不适合 EAV

  • 强事务
  • 复杂报表
  • 超高频查询

如果你愿意,我可以:

  • 给你一个 完整 MySQL / PostgreSQL 示例
  • 或结合 Laravel / Spring / NestJS 讲实现
  • 或对比 EAV vs JSON vs 宽表

你现在是哪种技术栈?

向AI问一下细节

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

AI
助
手