关系数据库在使用自然键(而不是代理键)设计时会遇到哪些类型的数据问题?

What are the type of data problems that relational databases have when they are designed using natural keys (and not surrogate keys)?

我看到了这条评论:

[applications] with the most data-related problems were those using natural keys.

Source: Surrogate vs. natural/business keys

我想要更多支持这一点的证据,因为评论留下了很多想象空间。

它表明使用自然键的做法会产生与数据相关的问题,但没有具体说明出了什么问题……数据会损坏吗?不同步?变得错误,丢失,损坏?很难查询?

使用自然键设计数据库而不是使用代理键会出现哪些数据问题?使用代理键时如何避免此类问题?

自然键的主要问题是它如何影响相关的 table。如果更改键的值,则必须更正每个 table 中引用原始值的每一行。

例如,假设您有邮政编码或 Postal 代码 table。通常,这些是在 Postal 代码也用作自然键的情况下设计的。现在假设 Post 办公室更改了特定的 Postal 代码(92680 变为 92780)。当您更改 Postal 代码 table 中的密钥时,您必须转到每个引用该 Postal 代码的 table,并在那里更新它。因此,客户地址、供应商地址等中的每一行...在 Postal 代码中具有 92680 的每一行都必须更改为 92780。

显然,如果不修复相关的 table,您可能会开始遇到大问题。假设您根据邮政编码收取保险费。想象一下,如果这些问题没有在保费中得到解决,您可能会遇到什么问题 table。

使用代理键可以完全消除这个问题。您只需更改 Postal Code table 中的邮政编码。代理键未更改。由于相关 table 存储了代理键,因此您无需更改任何其他内容。