我有一个包含两列的表:节点ID和父节点ID。该表代表一个图表。我希望它代表一棵树,所以我需要禁用在图中形成循环的行的插入。
答案 0 :(得分: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)
);