我有一个包含两列的表:节点 ID 和父节点 ID。此表表示一个图表。我希望它代表一棵树,所以我需要禁用会在图中形成循环的行的插入。
问问题
135 次
1 回答
1
以下不起作用,因为您可以批量插入创建循环的行http://sqlfiddle.com/#!12/ea0cd/7
您可以通过一次只允许通过存储过程插入一行来解决它。
创建一个具有自引用的表ParentId
:
Create Table Tree (
Id int not null primary key,
ParentId int foreign key references Tree(Id) -- might need to add constraint afterwards
);
不允许更新表,只允许插入和删除。您无法创建没有更新的循环。
如果您的树节点有其他数据,则为此创建一个单独的备用表:
Create Table Node (
Id int not null primary key,
data1 varchar(10),
constraint FK_Tree Foreign Key (Id) References Tree (Id)
);
于 2012-12-09T21:10:38.507 回答