PostgreSQL - 如何从“选择不同”查询创建“维度”表并创建主键和外键?

Posted

技术标签:

【中文标题】PostgreSQL - 如何从“选择不同”查询创建“维度”表并创建主键和外键?【英文标题】:PostgreSQL - How do you create a "dimension" table from a 'select distinct' query and create a primary and foreign key? 【发布时间】:2017-07-19 23:16:30 【问题描述】:

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

我可以使用创建表作为选择不同来创建新维度表,并且可以为其添加行号主键,但我不确定如何将匹配的外键放入事实表中,它们在哪里匹配。

我可以轻松地创建一个新的外键列,并使用 where 填充它,以将事实表中的旧不同行与维度表中的不同行匹配,但没有容易匹配的列(因为有还没有键),那么我是否需要创建一个将所有列匹配在一起的“where”匹配,然后从维度表中分配主键?

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这不是数据库管理的常用动作吗?为什么我找不到任何有此问题的人的参考资料?

以上是关于PostgreSQL - 如何从“选择不同”查询创建“维度”表并创建主键和外键?的主要内容,如果未能解决你的问题,请参考以下文章

如何运行从 postgresql 中的函数生成的查询

如何使用 NodeJS 从 EC2 连接和查询 PostgreSQL RDS?

如何从 PostgreSQL 的子查询中选择包含值数组的列?

如何从 postgresql 10.3 中的这个多重连接查询中删除嵌套循环

从命令行运行 PostgreSQL 查询

PostGreSQL Json数据存储和条件查询