在关系数据库设计中,是否应该担心一个(或多个)“循环图”存在问题?关系数据库设计 - “循环”图
(简体)例如,表
T1(T1_Id,...)
T2(T2_Id,T1_Id_Fk,...)
T3(T1_Id_Fk,T2_Id_Fk,.. )
主键为粗体。
T1中的行有双重作用。 T1行r1可以与T2中的行r2成关系T3,但它也可以是T2中(可能相同)行r2'的父行。这两个关系是正交的。
我想出了这样的事情:
T1_Base(T1_Id,...)
T1_Child1(T1_C1_Id,...)
T1_Child2(T1_C2_Id,...)
T2(T2_Id,T1_C1_Id_Fk,...)
T3(T1_C2_Id_Fk,T2_Id_Fk,...)
其中我们分别在T1_Base和T1_Child1与T1_Child2之间建立一对一的关系,以消除Relational database design cycle这里描述的一些可能的级联问题,但我仍然得到一个循环。
我应该甚至在每个FK都用ON CASCADE NO ACTION定义的环境中担心这个问题吗?
您认为这些设计有哪些周期? – philipxy
@cloud我在你的原始表格中看不到任何循环。函数依赖关系和外键约束都是有方向性的,但这两个集合都不会在你的情况下形成一个循环。还请注意,在关系数据库中,我们不会将行与其他行关联(这是旧的网络数据模型),而是将值或域关联起来。这就是为什么我们说表格代表关系。 – reaanb
FK可以有多列。你没有说清楚你的FK是什么。请编辑你的问题。最好是给出一个类似DDL的声明来说明什么是参考什么。 (虽然你不必声明一个直接引用是其他链的结果。)PS“正交”在这里是不清楚的。请写出你的意思。 – philipxy