据我了解,事实表中没有主键,而将代理键放在某种程度上是浪费空间。因此,外键组合是事实表的主键。
但是我可能会这样做,因为唯一键可能会在事实表中重复出现,例如同一个人同一天在同一家餐厅付款两次。在此cas中,主键不再是唯一的...
有没有解决该问题的方法,而无需添加代理密钥?
谢谢!
答案 0 :(得分:0)
如果您要构建这样的表,强烈建议您使用主键或唯一键组合,但是如果避免添加PK,则可能需要添加唯一的交易号,以便可以将客户号和交易号组合为组合键。
答案 1 :(得分:0)
如果您不提供PK,InnoDB将为您提供一个。但是它是6个字节并且是隐藏的。与4字节代理INT
相比,它更大!
检查数据;可能有一个“自然” PK,它是一列或列的组合。
通常,对于DW,我在Fact表上仅有的索引是PK。然后,我使用“摘要表”进行大量访问。它们更小,更快。在极端情况下,我将清除旧的事实行(通过DROP PARTITION
),但会永远挂在摘要表上。这样可以检查磁盘空间,同时几乎不丢失任何有用的数据。
底线:为每个表提供一个显式 PK。