-1

我有一个使用自然主键的临时表。此表存储一个导入的 CSV 文件,它是一个历史表,用于跟踪每次导入。我开始看到主键字段的一些重复项(在我导入的 CSV 中),并希望保留这些记录而不丢失历史表的功能。我目前在导入之前手动从 CSV 中删除行。

是否可以有一个由自然键和代理键组成的主键?自然键已被使用,并且自动递增键仅在存在重复的自然 id 时才会递增。

4

1 回答 1

1

首先,是的,您选择 PK 包含的内容,因此您可以让它包含自然键和代理键。

您的这部分想法对我来说很奇怪:“自动递增键,仅在存在重复的自然 id 时才会递增”。是什么让你问这个?你已经承认单靠自然钥匙无法覆盖你。如果自然值不是唯一的,为什么要竭尽全力避免具有替代值?即使那样,您也只能使用一些不起眼的触发器将值更改为例如零;作为 PK 的一部分,它仍然需要有一个值。

如果您想到的是通过自然键的性能,当然,只需将 PK 的第一列设为自然键,将第二列设为代理,这样您就可以从聚集索引中受益。

于 2022-01-25T19:37:04.533 回答