2

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

Container
    ContaienrId
    ParentContainerId
    LotsOfOtherColumns

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

我可以将 ID 粘贴在那里,但我希望可以通过实体框架访问父级。为此,我需要一个外键。(如果为 ParentContainerId 输入了无效数字,我还希望保护 FK 违规。)

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

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

我明白了,我不能使用 ParentContainerId 除非我对其施加 UNIQUE 约束。但是几个容器可以有同一个父容器,所以这是行不通的。

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

4

2 回答 2

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)

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

于 2013-10-22T18:17:06.290 回答
3

我只是认为您必须对 ContainerId 而不是 parentID 设置唯一约束

于 2013-10-22T18:16:10.610 回答