可以使用外键在同一个表中建模父子关系吗?

时间:2013-10-22 18:06:12

标签: sql sql-server entity-framework foreign-keys sql-server-2012

我正在设计一个目前看起来像这样的表:

Container
    ContaienrId
    ParentContainerId
    LotsOfOtherColumns

这个想法是一个容器可以有一个父(它可以拥有一个父...)。此外,几个容器可以拥有相同的父级。

我可以将ID粘贴在那里,但我希望可以通过Entity Framework访问父级。要做到这一点,我需要一个外键。 (如果为ParentContainerId输入了无效的数字,我也希望保护FK违规。)

但是当我尝试将外键放在这些列上时,我收到此错误:

  

表'Container(Container)'中的列与现有主键或UNIQUE约束不匹配。

我得到它的意思,我不能使用ParentContainerId,除非我对它设置了UNIQUE约束。但是几个容器可以拥有相同的父容器,因此无法工作。

有没有办法使用一个表并具有外键父母子关系?

2 个答案:

答案 0 :(得分:4)

如果你想建立一对多的关系,你可以这样做:

create table container( 
    container_id int not null,
    parent_container_id int,
    more_data varchar,
    primary key(container_id),
    foreign key (parent_container_id) references container (container_id)
);

如果您创建了其他

unique(parent_container_id)

约束,每个父容器中最多允许一个子容器。

答案 1 :(得分:3)

我认为你必须在ContainerId上设置一个唯一约束而不是parentID