如何将两个事实表连接到一维表

Posted

技术标签:

【中文标题】如何将两个事实表连接到一维表【英文标题】:How to connect two fact tables to one dimensional table 【发布时间】:2021-01-15 00:25:57 【问题描述】:

我有两个事实表(HistoricTable、ForecastTable)。两个表都使用将 productID 和 WeekID 组合在一起的复合键。 ForecastTable 有未来的 weekID 和历史的有以前的。我希望这两个 ProductID 都引用一个名为 ProductTable 的维度表。如何连接它们?

我的假设是创建一个附加表,通过 UNION 连接查询 HistoricTable 和 ForecastTable,并将其连接到 ProductTable。这个逻辑对吗?

Table Image Layout

【问题讨论】:

为什么不通过 ProductID 将两个表的外键都指向 ProductTable? (请不要给像xyzTable这样的表名,这很烦人) “连接它们”是什么意思?你为什么要这么做?你是什​​么意思,一个“查询表”? (观点?)请只问一个(特定研究的非重复)问题。您是如何第一次坚持遵循已发布的设计方法或编写什么代码?对于代码问题,请提供minimal reproducible example。 PS请use text, not images/links, for text--including tables & ERDs。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。 【参考方案1】:

我希望这两个 ProductID 都引用一个名为 ProductTable 的维度表。

您可以在historicproduct 之间建立一个外键,在forecastproduct 之间建立另一个外键。

例如:

create table product (
  id int primary key not null,
  name varchar(10)
);

create table historic (
  product_id int not null references product (id),
  week_id int not null,
  units_sold int,
  primary key (product_id, week_id)
);

create table forecast (
  product_id int not null references product (id),
  week_id int not null,
  forecast_units int,
  primary key (product_id, week_id)
);

【讨论】:

以上是关于如何将两个事实表连接到一维表的主要内容,如果未能解决你的问题,请参考以下文章

如何将学生和评估表连接到一个视图中?

mysql - 如何使用父表中的值将连接表连接到另一个连接表?

使用 RIGHT JOINT 将两个表连接到一个 datagridview

Hibernate:如何在注释中将三个 3 表连接到一个连接表中?

如何将带有前缀列的表连接到 PHP MySQL 或 Laravel 中的另外两个表

如何将表连接到联合查询的结果