循环关系

时间:2016-09-08 16:31:14

标签: sql sql-server database-design

我有一个问题在脑海中流传很多,我想在数据库(DBMS和建模MPD)领域找到一个可以解锁我的回复。

是否可以在两个(或更多)表之间找到循环关系

如:

Create Table TA ( TA_ID   INTEGER  not null, A  SMALLINT, AA   NUMERIC(5,0),TB_ID   INTEGER, constraint PK_TA primary key (TA_ID) );

Create Table TB (TB_ID   INTEGER not null,  B    SMALLINT, BB  FLOAT, TA_ID   INTEGER,  constraint PK_TB primary key (TB_ID) );

alter TABLE TB  add constraint Fk_TB_TA foreign key (TA_ID)  references TA (TA_ID);

alter TABLE TA  add constraint Fk_TA_TB foreign key (TB_ID)  references TB (TB_ID);

2 个答案:

答案 0 :(得分:0)

如果您正在寻找一组通过FK互相引用的表格,那么您可以尝试使用此代码。

SELECT  *
FROM    
    sys.foreign_keys fk
WHERE
    EXISTS 
    (SELECT * FROM sys.foreign_keys fk2 WHERE fk2.referenced_object_id = fk.parent_object_id AND fk2.parent_object_id = fk.referenced_object_id)

答案 1 :(得分:0)

好的,有可能吗?两者都有NOT NULL约束 - NO。如果你允许NULLS合一,那么是。
这是一个好主意,我无法想出你为什么这样做的原因,但有时候现实世界中的问题很复杂,我通常不会说永远不会。

快速搜索提出这个问题,表明这是在现实世界中发生的,请查看:How to do an INSERT into tables with circular relationships (SQL SERVER)