0

我有一个包含两列的表:节点 ID 和父节点 ID。此表表示一个图表。我希望它代表一棵树,所以我需要禁用会在图中形成循环的行的插入。

4

1 回答 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 回答