建模"问题" &安培; "答案"答案可以是多项选择或自由文本的维度

时间:2015-06-03 14:55:31

标签: database-design reporting data-warehouse star-schema

我正在构建一个星型模式,以允许报告应用程序的使用情况,但在两点上遇到了绊脚石:

  1. 有些答案可以是免费文字。
  2. 我需要报告用户没有回答哪些问题。
  3. 详细说明:

    应用程序有一个用户回答问题的部分。

    问题可以有以下类型的答案:

    • 多项选择(单选按钮),"从4中选择1项。"
    • 列出项目。
    • 多项选择(复选框),"选择以下一项或多项。"
    • 自由文字(文字框),"您对...有什么想法?",或者如果"其他"单选按钮被选中。

    我正在考虑问题维度和答案维度。 这样做的问题是,自由文本会污染答案维度,并且在一个问题上只有一个用户可以使用大量答案。

    这个模型还意味着每个用户的每个答案在事实表中都有一行,我认为这不是理想的 - 但如果有必要,我可以忍受这个。事实表主要是将其他表链接在一起。事实表大致为:Fact_Table_ID,UserID,QuestionID,AnswerID,Is_Answered(布尔值,是/否)。这是一种查看哪些问题正在回答哪些问题以及哪些问题未得到回答的方法。

    我必须报告用户未回答的问题以及已回答的问题,而且我不知道如何在星型模式中解决此问题。

    我很欣赏一些关于如何最好地解决这个问题的建议。

1 个答案:

答案 0 :(得分:0)

虽然我仍然会回答你的问题,但我觉得我必须首先质疑这些数据是否真的属于星型模式。有些数据并不适合维度模型 - 这可能就是这种情况吗?考虑一下数据的使用方式,在走这条路之前,先决定以不同的格式保存这些数据是否更有意义。

Ralph Kimball有时会讨论如何使用ODS"这是一个无量纲的数据存储。这可用于某些报告和查询,这些报告和查询无法由您的交易系统完成,但无论出于何种原因,它们都不属于维度数据集市或数据仓库。

也就是说,如果您决定在维度模型中构建它,我的建议是将自由文本答案放在与标准答案不同的维度中。然后,人们可以分析标准答案而无需引用过大的答案维度,但仍然可以在需要时获得这些自由文本答案。

而不是Is_Answered位列,您可以在答案维度中有一行,这意味着"没有给出答案" - 即不回答答案本身。每当您在ETL中找到某个人没有回答的问题时,您就会在答案维度中查找该特定行。