为 Sakila 数据仓库创建 Actor 维度

Posted

技术标签:

【中文标题】为 Sakila 数据仓库创建 Actor 维度【英文标题】:Creating Actor Dimension for Sakila Data Warehouse 【发布时间】:2016-01-11 14:00:24 【问题描述】:

我正在使用 Sakila 示例数据库创建数据仓库,以了解数据仓库的工作原理。

这是 Sakila db 的结构:https://dev.mysql.com/doc/sakila/en/sakila-structure.html。是关于视频租借的,应该是不言自明的。

我有一个带有一个度量的事实表,即payment 表中每个租金的付款金额。我现在创建了 3 个维度,时间、位置和电影维度。

现在我想创建一个 Actor 维度,以回答“哪些演员在我们的租赁中最受欢迎?”这个问题。然而想了一会儿,我就卡住了。这是我的问题。

创建电影维度很容易,每次付款大约是一部电影。所以在我的事实表中,对于每个payment_id,我都有一个对应的film_id,这将是我的事实表和电影维度之间的外键。但是电影和演员之间存在 N-N 关系(通过表 film_actor),所以我不知道将哪个外键放入我的事实表以链接到相应的演员,因为每个 payment_id 都需要链接到 0..n actor_ids.

我希望你能理解我的问题。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您需要一个 Bridge 表。

这是一个 Kimball 参考,但它使用了一个困难的例子:

http://www.kimballgroup.com/2012/02/design-tip-142-building-bridges/

这里有一个更好的解释,尽管示例并不完全符合您的需要:

http://www.askjohnobiee.com/2013/08/how-to-bridge-tables-and-many-to-many.html

我所知道的关于桥接表的最佳讨论是 Christopher Adamson 的书“Star Schema - The Complete Reference”的第 9 章。如果您正在建造立体仓库,非常值得购买。您会在我们的书架上找到它的链接:

http://ajilius.com/bookshelf/

【讨论】:

桥接表中的权重栏不是必须的吧?就我的电影和演员而言,我实际上不需要权重列。 正确,不是强制性的,只与示例相关。

以上是关于为 Sakila 数据仓库创建 Actor 维度的主要内容,如果未能解决你的问题,请参考以下文章

如何在Azure SQL数据仓库中输入度数符号(°)

SVM:VC维度和内核维度数之间的关系

分类——当维度数大于样本数时,我们可以使用啥?

运维实战 容器部分 Docker仓库

MySQL 5.7 create VIEW or FUNCTION or PROCEDURE

MySQL - 嵌套结果连接