维度建模:如何创建没有代理主键的表?

时间:2018-11-08 16:36:58

标签: mysql sql data-warehouse dimensional-modeling

据我了解,事实表中没有主键,而将代理键放在某种程度上是浪费空间。因此,外键组合是事实表的主键。

但是我可能会这样做,因为唯一键可能会在事实表中重复出现,例如同一个人同一天在同一家餐厅付款两次。在此cas中,主键不再是唯一的...

有没有解决该问题的方法,而无需添加代理密钥?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您要构建这样的表,强烈建议您使用主键或唯一键组合,但是如果避免添加PK,则可能需要添加唯一的交易号,以便可以将客户号和交易号组合为组合键。

答案 1 :(得分:0)

如果您不提供PK,InnoDB将为您提供一个。但是它是6个字节并且是隐藏的。与4字节代理INT相比,它更大!

检查数据;可能有一个“自然” PK,它是一列或列的组合。

通常,对于DW,我在Fact表上仅有的索引是PK。然后,我使用“摘要表”进行大量访问。它们更小,更快。在极端情况下,我将清除旧的事实行(通过DROP PARTITION),但会永远挂在摘要表上。这样可以检查磁盘空间,同时几乎不丢失任何有用的数据。

底线:为每个表提供一个显式 PK。