任何人都知道关系数据库系统中的Cascade事件?它是如何工作的,如何帮助以及是否有任何缺点。感谢。
答案 0 :(得分:1)
级联事件非常简单。例如,假设您有一个包含属性和主键User
的{{1}}表,以及一个包含属性username
和Email
的{{1}}表。现在很可能我们可能会username
email address
username
Email
username
中的User
,因为我们希望每个拥有电子邮件的用户也是在我们的User
表中。现在想想如果你在User
中删除了一个用户会发生什么。你应该删除Email
中所有匹配的行吗?如果没有,你做什么?有些DBMS会抛出一个错误,说“你不能这样做!参考文献存在,我们不知道如何处理它们!”。这就是级联事件的来源。如果DMBS支持级联事件,您可能会被允许选择指定DMBS是否实际抛出该错误,或者可能删除所有匹配(username
上的Email
} )行,所以没有“悬空”引用。这称为级联删除。
还有其他级联选项!如果我们尝试将username
中的User
更新为不同的内容,则会出现另一种情况。如果没有级联选项,如果Email
中存在匹配的行,我们可能会抛出错误。但是,通过级联选项,我们可以选择使用新的username
自动更新Email
中的username
。这称为级联更新。
这是两个主要的,但绝不是某些DBMS中存在的唯一现有的“级联”选项。
如果有帮助,可以将“级联”修改视为“递归”修改,因为它们是同义词,并且是“级联”的含义。修改“级联”到使用相同属性的其他表。
考虑一下此功能的优缺点。我们现在可以准确地指定当我们想要对不同表中的属性进行“级联”更改时我们想要发生什么。允许这些功能的一个可能的缺点是我们现在有机会在比我们想要的更大的范围内进行修改(取决于设计)。更改username
中的User
可能会导致更改另一个表Email
,即使我们不是故意的!
希望这有帮助。