维度表、桥表和事实表连接

Posted

技术标签:

【中文标题】维度表、桥表和事实表连接【英文标题】:Dimension table, bridge table and fact table join 【发布时间】:2020-08-20 00:11:31 【问题描述】:

我总共有四张桌子: 维度表 - 书籍和作者 桥表书/作者 交易事实

由于书籍有多个作者,一个作者有多个书籍,因此使用桥接表来解决多对多关系

表结构如下:

Dim_Books:

book_id (PK) 
ISBN 
Title 

作者:

Author_id (PK)
FName
LName

Book_auth_bridge:

book_auth_id (PK)
book_id
auth_id

Fact_Sales:

Sale_amount
quantity
Book_id
book_auth_id

我正在尝试从事实表中检索作者的总销售额,因为我正在加入桥接表,所以我总是从内部连接中获得多行并且数量是重复的。

如何编写 SQL 来获取作者的总销售额?

【问题讨论】:

(1) 请告诉我们您当前的查询 (2) 为什么fact_sales 中有book_auth_id 请发布您的查询。如果你有一本售价 99 美元的书,其中有三位作者,我猜你希望每个作者都能拿到 33 美元? (1) 当前查询:select sum(f.sale_amount),a.author_id from fact_sales f ,book_auth_bridge br ,dim_author a where a.author_id = br.author_id and br.book_auth_id = f.book_auth_id group by a.author_id (2) 现有报告的事实表结构需要相同。添加桥接表列不会影响现有报表 尼克的答案是肯定的,我需要为每个作者分配 【参考方案1】:

最灵活的解决方案是在您的桥接表中包含一个“分配因子”列,并将其与您的度量相乘以获得所需的比例。

例如,如果您想在 3 个人之间平均分配,那么您在所有 3 条桥接表记录中的系数为 0.333。但是,如果您想将 50% 分配给主要作者,并将剩余部分与其他作者平分,则因子为 0.5、0.25 和 0.25

【讨论】:

以上是关于维度表、桥表和事实表连接的主要内容,如果未能解决你的问题,请参考以下文章

结合事实表和维度表的SQL语句?

维度表和事实表的含义是啥?

没有FK时如何找到维度表和事实表之间的关系?

尺寸建模中的桥表

什么是ODS?还有什么是事实表和维度表啊?希望高手指教~

数据库——事实表和维度表