事实表需要主键

wnvonmuf  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(278)

我目前正在开发一个非常复杂的数据库模式,我想知道事实表是否应该有主键。每个事实表有50多列数据,生成主键的唯一方法是为每个元组添加一个自动递增的计数。我只是不确定这些信息从长期来看能给我们带来什么,特别是因为这些数据将在12个月后被删除。
我的维度表当然会有主键,只是想知道什么是最佳实践。

p5fdfcr1

p5fdfcr11#

在我们需要的时候,使用一个聚类键总是很好的,这样可以很容易地查找数据。聚类键不仅用于聚类索引查询。它还存储在每个非聚集索引叶页中,以便在有键查找时返回到数据页。
良好聚类键的特征:
唯一(无需添加唯一符以使值唯一)
递增(减少碎片)
窄(在聚集索引的树页和非聚集索引的叶页中存储的字节数较少)
静态(减少碎片)
不可空(避免空块)
固定宽度(避免可变块)
阅读更多关于kimberly tripp关于集群键的文章
所有这些条款都有相同之处。它们是聚类索引的良好候选对象。如果你想保持数据更长的时间,你可以选择 Bigint 如果你打算坚持一年并净化,你可以坚持一年 int 数据类型本身。

dvtswwa3

dvtswwa32#

我很喜欢在所有的表上都放一个标识列。这样可以更容易地标识要更新和删除的特定行。
当然,在一个维度很多的事实表上,这样的列似乎是多余的。然而,通常还有一个主键——维度的组合。
我建议您在表上有一个主键,可以是标识列,也可以是现有行的组合。如果使用复合主键,则应注意键的顺序。SQLServer默认使用主键作为聚集索引,如果将键按错误的顺序放置,则表可能会出现碎片。身份密钥没有此问题。

相关问题