数据库设计中的关系循环



我正在尝试设计一个数据库模式,但我有一个问题。在我的数据库中,我有三个表(表(A|B|C)),表C指表B,表B指表A,表C表示表B(C->B->A和C->A)。

我首先想知道的是,我能认为这是一个循环吗?如果是,循环对DB设计来说是否是致命的(当我考虑有向图时,它不是,但DB设计呢?)?此外,对于3NF规范化的数据库,是否可以有循环?

此外,当从表a中删除引用的值时,我只想从表B和表C中删除相关的行。尽管表C引用了表B,但我对这个外键没有UPDATE/delete约束。每当从表a中删除/更新一行时,表B/C中的所有相关行都应受到影响。就不在从一个表到另一个表的级联操作期间创建多个路径而言,这是否适用于引用完整性?

有些好书已经被广泛讨论,但如果你能推荐关于这类技巧/窍门和实用信息的好资源,我仍然很高兴。

如果这些关系是由外键强制执行的。如果它们是空的,并且没有一个引用可以为空,那么您就有一个问题:

无法插入到表C中,因为表B为空,因此不可为null的FK约束将被破坏。类似地,因为A为空,所以不能插入表B,因为C为空,因此不能插入表A。这是个杀手。

但是,如果其中一个关系可以为null,那么您可以插入到至少一个表中,从而插入到其他表中。

依赖循环可能是个问题,但它们确实存在。依赖循环中的每个依赖都是不可为null的,这总是一个问题,我从来没有遇到过一个合法的例子。

删除/更新FK关系的引用行时,要么启用级联,通过BEFORE触发器强制更新/删除,要么让DBMS抛出错误并禁止该操作。

最新更新