2011-06-06 64 views

回答

1

级联事件真的很简单。例如,假设您的User表具有属性和主键username,而0123'表的属性为usernameemail address。现在很有可能我们可能会将的Email作为User的参考(外键)到username,因为我们希望每个有电子邮件的用户也都在我们的User表中。现在想想如果你在User中删除了一个用户会发生什么。是否应删除Email中的所有匹配行?如果不是,你会怎么做?一些DBMS会抛出一个错误,说“你不能这么做!引用存在,我们不知道该怎么处理它们!”。这是级联事件的来源。如果DMBS支持级联事件,则可以选择指定DMBS是否实际引发该错误,或​​者可能删除所有匹配(在Email中的username)行,因此没有“悬挂“引用。这被称为级联删除。

还有其他级联选项!如果我们尝试将User中的username更新为其他内容,则会发生另一个问题。没有级联选项,如果在Email中有匹配的行,我们可能会引发错误。但是通过级联选项,我们可以选择使用新的username自动更新Email中的username。这就是所谓的级联更新。

这些是两个主要的,但绝不是现有的一些DBMS中存在的“级联”选项。

如果有帮助,可以将“级联”修改看作“递归”修改,因为它们是同义词,是“级联”的含义。修改“级联”到使用相同属性的其他表。

想想这个功能的优缺点。我们现在可以指定我们希望在不同表格中将“级联”更改为属性时想要发生的事情。允许这些功能的一个可能的缺点是,我们现在有机会引起比我们想象的更大规模的修改(取决于设计)。在User中更改username可能会导致不同表中的更改Email,即使我们不打算!

希望这会有所帮助。