You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据仓库表建模咨询:问卷回复关联多评论的设计方案是否合理?

问卷回复评论的数据仓库建模方案

你的核心思路方向是对的,但需要调整Comments表的定位——它不应该作为事实表,而是设计成与UserResponses事实表关联的维度附属表,具体分析和方案如下:

核心原则明确

数据仓库建模中,事实表和维度表的核心区别是:

  • 事实表:存储可聚合的度量值(比如作答耗时、得分、作答次数等),以及关联各维度的外键
  • 维度表:存储描述性属性信息(比如用户信息、问题内容、评论文本这类非度量的描述数据)

针对你的场景的建模方案

  1. 保留现有核心表结构

    • dim.Users:存储用户维度信息(用户ID、姓名、注册时间等)
    • dim.Questions:存储问卷问题维度信息(问题ID、问题内容、所属问卷、题型等)
    • fact.UserResponses:作为核心事实表,存储作答的度量数据,结构示例:
      fact.UserResponses (
          ResponseID INT PRIMARY KEY,
          UserID INT FOREIGN KEY REFERENCES dim.Users(UserID),
          QuestionID INT FOREIGN KEY REFERENCES dim.Questions(QuestionID),
          ResponseValue VARCHAR(255), -- 用户作答内容(比如选项、填空文本)
          ResponseTime DATETIME, -- 作答时间
          ResponseDuration INT -- 作答耗时(秒),可选度量
      )
      
  2. 设计评论表作为附属维度表
    创建dim.UserResponseComments(或命名为fact.UserResponseComments,更强调与事实的关联),专门存储回复的评论信息,结构示例:

    dim.UserResponseComments (
        CommentID INT PRIMARY KEY,
        ResponseID INT FOREIGN KEY REFERENCES fact.UserResponses(ResponseID),
        CommentText TEXT, -- 评论内容
        CommentCreatedAt DATETIME, -- 评论创建时间
        CommentCreatorID INT FOREIGN KEY REFERENCES dim.Users(UserID) -- 评论创建者(如果允许非作答用户评论)
    )
    

为什么不把Comments作为事实表?

评论本身是依附于回复的描述性文本,没有可聚合的数值型度量(除非你需要统计评论数量,但这个可以通过关联计数得到)。如果强行将其设为事实表,会违背数据仓库的建模逻辑,后续做聚合分析时会增加不必要的复杂度。而作为附属维度表,既能满足存储需求,又能通过ResponseID与事实表灵活关联,方便后续的查询和分析(比如统计某类问题回复的评论数、查看特定回复的所有评论)

内容的提问来源于stack exchange,提问作者Cypher236

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:55:21