PostgreSQL - 如何从'select distinct'查询创建"dimension"表并创建主键和外键?



我有一个包含许多条目的事实数据表,它们具有非常密切相关的"运送到"列,但没有一列始终是唯一的。我想为此制作一个维度表,并使用键引用新的维度表行。

我可以创建一个新的维度表,并将创建表作为选择非重复表,并且可以为其添加行号主键,但我不确定如何将匹配的外键放入它们匹配的事实表中。

我可以轻松创建一个新的外键列,并使用 where 填充它以将事实表中的旧非重复行与维度表中的不同行进行匹配,但没有简单的列可以匹配(因为还没有键(,所以我需要创建一个将所有列匹配在一起的"where"匹配, 然后从维度表中分配主键?

我可能只是懒惰,不想研究如何创建更改查询以及如何创建复杂的位置匹配,但这似乎是数据库管理的一个非常常见的操作,所以我觉得它可能会帮助其他人。

我想一种方法是为新维度中的每一行创建所有列中所有值的串联,以从数据中创建一个唯一标识符,然后对事实维度中的列执行相同的操作。现在两者之间有一个唯一键,可以将其转换为整数 id。在新维度中添加一个新的序列列,然后在事实中创建一个新列,并将其设置为新维度中的整数 id,其中串联的 id 相同。

这显然非常低效,因为新维度的全部内容必须复制,并且在事实维度中也是如此 - 只是为了创建一个链接。

最新更新