为什么会考虑使用代理键与自然键与更新级联?



免责声明:这与其他主题不是同一个问题。


我们在使用自然键时面临的一个缺点是,如果业务逻辑发生变化并且我们需要更改一个键,我们需要将这种更改传播到所有链接表中。

但是,使用 ON UPDATE CASCADE 声明,我们可以在更改键值时使 DBMS 为我们传播更改。

我不明白的是:这种方法有什么缺点?是否存在使用ON UPDATE CASCADE会对数据库造成风险的情况?

因为如果没有,那么如果在某些情况下,使用代理键的唯一原因是更改业务自然键更容易,那么应该使用ON UPDATE CASCADE而不是将所有表转换为代理键。

代理人的优点..

  1. 如果您使用的是 REST,则需要资源标识符的概念。使用部分资源作为资源标识符可能很麻烦。在这种情况下,代理项键并不是真正的代理项,因为它成为实际的资源标识符,但这是使用代理项键模式的原因之一。

  2. 许多ORM工具更容易使用代理人进行管理。无论好坏,OOP都要求身份的概念与价值保持分离。在很多方面,这与第1点相似。

  3. 如果更改键属性,则只能更改一个表。另一方面,如果您希望保持引用完整性,代理项无法将自然组合键转换为简单键。例如,文档(UserId,FolderId(引用文件夹(UserId,Id(阻止用户将其文档放入其他人的文件夹中,而只有文档(FolderId(引用文件夹(Id(不会。但是使用代理项至少限制了对结构决策的强制性全面更改,而不仅仅是在几个候选键中进行选择的人。

我不会列出自然键的优点,因为我认为它们是显而易见的。少即是多。代理人是需要证明的概念。

相关内容

  • 没有找到相关文章

最新更新