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