Database 数据库设计中的关系循环

Database 数据库设计中的关系循环,database,database-design,rdms,Database,Database Design,Rdms,我正试图设计一个数据库模式,我脑子里有一个问题。在我的数据库中有三个表(表(A | B | C)),表C指的是表B,表B指的是表A,表C指的是表B(C->B->A和C->A) 我首先想知道的是,我能考虑这是一个循环,如果是循环,对于DB设计来说是致命的(当我考虑有向图时,它不是,但是DB设计呢?)另外,是否可以为3NF规范化数据库创建循环 此外,当从表a中删除引用值时,我只想从表B和表C中删除相关行。虽然表C引用了表B,但我没有该外键的更新/删除约束。无论何时,从表a中删除/更新一行,表B/C中

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

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

此外,当从表a中删除引用值时,我只想从表B和表C中删除相关行。虽然表C引用了表B,但我没有该外键的更新/删除约束。无论何时,从表a中删除/更新一行,表B/C中的所有相关行都应生效。就不在从一个表到另一个表的级联操作期间创建多个路径而言,这是否适用于引用完整性


有很多好书已经被广泛讨论过了,但是如果你能推荐关于这类技巧和实用信息的好资源,我还是很高兴的。

如果这些关系是通过外键实现的。如果它们是空的,并且所有引用都不可为空,则您有一个问题:

无法插入表C,因为表B为空,因此不可为空的FK约束将被破坏。同样,不能插入表B,因为A是空的,也不能插入表A,因为C是空的。这是个杀手

但是,如果其中一个关系可为空,则可以插入到至少一个表中,从而插入到其他表中

依赖循环可能是个问题,但它们确实存在。依赖循环中的每个依赖项都不可为空,这始终是一个问题,我从未遇到过一个合法的例子

删除/更新FK关系的引用行时,可以采用级联方式,通过BEFORE触发器强制更新/删除,也可以让DBMS抛出错误并禁止该操作