我的事实表在他所选择的课程中持有用户分数。我必须在报告中显示的课程的一些细节来自多个表(在实际的OLTP数据库中)。
我是否在维度表中创建该课程条目的非标准化版本?
或者我只是将事实表直接加入课程表连接到描述该课程的其他表(course_type,创建此课程的教师等)
答案 0 :(得分:2)
Snowflaking或桥接表确实使连接变得更加复杂,并且不仅从编码角度来看,它还使BI用户不那么简单。
在大多数情况下,我会将这些直接放在现有或其他维度表中。
例如,您有一个分数事实表,其中维度中的用户详细信息可能会或可能不会保留用户的人口统计信息(可能它只是一个桥梁)。有时最好分割出人口统计信息。因此,尽管性别和年龄可能与用户实体相关联,但在维度模型中,这些可能是单个维度或集中在一个维度中 - 所有这些都取决于使用场景。
也许你的分数附属于一个州,而州则有地区(雪花)。分析将区域维度直接链接而不是通过状态维度可能更有效。
我认为你会发现维度模型是一种非常实用的非规范化方法。不可协商的主要事项是事实 - 在此之后,维度的选择非常依赖于数据的行为,您对常见使用场景的预见 - 以及避免陷入太少维度和太多维度问题。
答案 1 :(得分:1)
也许我不明白你的问题,但是星型模式中的事实表应该连接到围绕它的维度表。 如果您不想进行联接,只需创建一个视图,然后使用该视图进行报告。
如果您要发布模型(架构),则更容易发表评论/帮助。
答案 2 :(得分:1)
将多个维度合并在一起,牺牲规范化以支持绩效是一种常见做法。这通常在典型查询需要所有维度时完成(而不是针对不同的用例使用不同的位)。
还要记住,虽然您收到的联接开销减少了,但也有一些缺点:
您必须分别考虑每个案例。
如果你的RDBMS提供了这样的能力,那么也可以考虑创建物化视图的选项。
答案 3 :(得分:0)
我们通常将雪花模式作为物理DWH设计,但添加一个报告视图图层,将雪花模式展平为星型模式。
这样,您的OLAP多维数据集变得更加简单,易于管理。