提问人:kirill fedorov 提问时间:11/13/2023 更新时间:11/14/2023 访问量:35
使用 PostgreSQL 的数据仓库中分区事实数据表中主键的最佳实践
Best practices for primary keys in partitioned fact tables in a data warehouse with PostgreSQL
问:
我正在寻求有关在使用 PostgreSQL 时在数据仓库中实现分区表的最佳实践的建议。我目前的理解是,按时间戳列对事实表进行分区是有意义的,因为分析查询通常按时间间隔进行过滤。从语义上讲,将 event_id 作为主键是正确的。但是,PostgreSQL 要求在主键或唯一约束中包含分区列,从而导致错误:time
ERROR: unique constraint on partitioned table must include all partitioning columns
DETAIL: PRIMARY KEY constraint on table "earthquake_events" lacks column "time" which is part of the partition key.
如果我选择创建一个复合主键 including 和 ,我将面临一个新问题,即维度表无法仅引用事实数据表中的 ,因为缺少与给定键匹配的唯一约束:event_id
time
event_id
ERROR: there is no unique constraint matching given keys for referenced table "earthquake_events"
此约束将迫使我创建包含多个维度表的复合外键,这在语义上似乎不正确且过于复杂。event_id
time
使用 PostgreSQL 在 DWH 的分区事实数据表中设计主键和引用外键的推荐方法是什么?有没有更好的方法来保持主键的语义完整性,同时又遵守 PostgreSQL 的分区要求?
感谢您的见解。
答:
2赞
Laurenz Albe
11/14/2023
#1
在数据仓库中继续操作的正确方法是不要创建外键。数据源自保证引用完整性的事务数据库,ETL 过程不应将其搞砸。外键不仅不能很好地处理分区表,而且还会在一定程度上减慢数据加载速度。
下一个:数据库 ERD 问题 [已结束]
评论