我正在设计一个目前看起来像这样的表:
Container
ContaienrId
ParentContainerId
LotsOfOtherColumns
这个想法是一个容器可以有一个父(它可以拥有一个父...)。此外,几个容器可以拥有相同的父级。
我可以将ID粘贴在那里,但我希望可以通过Entity Framework访问父级。要做到这一点,我需要一个外键。 (如果为ParentContainerId输入了无效的数字,我也希望保护FK违规。)
但是当我尝试将外键放在这些列上时,我收到此错误:
表'Container(Container)'中的列与现有主键或UNIQUE约束不匹配。
我得到它的意思,我不能使用ParentContainerId,除非我对它设置了UNIQUE约束。但是几个容器可以拥有相同的父容器,因此无法工作。
有没有办法使用一个表并具有外键父母子关系?
答案 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