免责声明:这与其他主题不是同一个问题。
我们在使用自然键时面临的一个缺点是,如果业务逻辑发生变化并且我们需要更改一个键,我们需要将这种更改传播到所有链接表中。
但是,使用 ON UPDATE CASCADE 声明,我们可以在更改键值时使 DBMS 为我们传播更改。
我不明白的是:这种方法有什么缺点?是否存在使用ON UPDATE CASCADE
会对数据库造成风险的情况?
因为如果没有,那么如果在某些情况下,使用代理键的唯一原因是更改业务自然键更容易,那么应该使用ON UPDATE CASCADE
而不是将所有表转换为代理键。
代理人的优点..
-
如果您使用的是 REST,则需要资源标识符的概念。使用部分资源作为资源标识符可能很麻烦。在这种情况下,代理项键并不是真正的代理项,因为它成为实际的资源标识符,但这是使用代理项键模式的原因之一。
-
许多ORM工具更容易使用代理人进行管理。无论好坏,OOP都要求身份的概念与价值保持分离。在很多方面,这与第1点相似。
-
如果更改键属性,则只能更改一个表。另一方面,如果您希望保持引用完整性,代理项无法将自然组合键转换为简单键。例如,文档(UserId,FolderId(引用文件夹(UserId,Id(阻止用户将其文档放入其他人的文件夹中,而只有文档(FolderId(引用文件夹(Id(不会。但是使用代理项至少限制了对结构决策的强制性全面更改,而不仅仅是在几个候选键中进行选择的人。
我不会列出自然键的优点,因为我认为它们是显而易见的。少即是多。代理人是需要证明的概念。