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 - 如何从“选择不同”查询创建“维度”表并创建主键和外键?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NodeJS 从 EC2 连接和查询 PostgreSQL RDS?
如何从 PostgreSQL 的子查询中选择包含值数组的列?