2

免责声明:这与其他主题不同。


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

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

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

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

4

1 回答 1

0

代孕的好处。。

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

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

  3. 如果您更改关键属性,您可以只更改一张表。另一方面,如果您希望保持参照完整性,代理不能将自然复合键转换为简单键。例如,Document (UserId, FolderId) 引用 Folder (UserId, Id) 可以防止用户将他的文档放在其他人的文件夹中,而 Document (FolderId) 引用 Folder (Id) 则不会。但是使用代理至少可以限制对结构决策的强制性彻底改变,而不仅仅是在几个候选键中进行选择。

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

于 2020-05-04T14:50:57.933 回答