我现在正试图了解数据仓库,但我真的无法得到它。我的问题并不是非常具体,但我只是想让某人向我解释数据仓库的想法。
我现在正在尝试从SO's database创建数据仓库。
在这个数据库中有8个表,对于那些使用SO的人来说,它们是非常明显的:
1。尺寸
尺寸是多少?这是我不了解的重要部分。对我来说,我看到7个维度:徽章,评论,帖子,帖子后链接,标签,用户和投票。但后来我没有看到使用数据仓库的重点,维度就是表格。
- 日期应该是一个维度吗?什么日期?每个评论和帖子?
- 将Post分成问题维度和答案维度是否相关?
- 我可以放哪些其他尺寸?
2。事实表
如何将所有外键(userId,postId,commentId ...)放在一个表中?例如,我们假设用户发布了一个问题,但没有评论。我的事实表中有一行用userId,postId在commentId列中是NULL吗?
措施。我在考虑事实表中的以下措施:问题数量,用户数量,标签数量......
有人可以告诉我我是否朝着正确的方向前进吗?
答案 0 :(得分:0)
构建数据仓库时必须回答的第一个问题是"我想回答什么问题?"
使用Stack Overflow作为一个例子,一个问题可能是,"过去两年每个月有多少关于X的帖子?"
要回答这个问题,我们需要创建帖子和帖子标签事实表。由于这些表只是选择和插入,我们可以对事实数据进行非规范化,以便更容易选择。
因此,我们可能会有一个类似于此的Post事实表。
Post
----
Post Number
Post Text
Post Timestamp
Post Tag 1
Post Tag 2
Post Tag 3
Post Tag 4
Post Tag 5
根据时间戳和逐月进行选择会有些简单。我们只关心前5个帖子标签,如果其中一些标签为空,我们也不在乎。
现在,您不必对数据进行非规范化。通常,如果对数据进行非规范化,查询运行速度会更快。
您对其他可用数据执行相同操作。你想回答什么问题?
答案 1 :(得分:0)
你会发现许多我们称之为“无事实的事实”。这些基本上将多维度的交集视为一个事实,只有隐含的“计数”作为唯一的事实。例如,在Post Fact中,它只是在用户,日期,SO数据库等的交叉点上计数。
您可能会考虑使用诸如Junk维度之类的概念来支持引用Fact表中的Tags。这将看到您为每个唯一的标签组合分配一个伪键,然后这个键将存储在Fact表中。
如果您想了解DW,请使用您的个人财务,这就是我学习的方式。您可以通过帐户余额了解快照事实,了解购买交易事实,还可以创建供应商和帐户维度等。