2

現在、次のようなテーブルを設計しています。

Container
    ContaienrId
    ParentContainerId
    LotsOfOtherColumns

アイデアは、コンテナが親を持つことができるということです(さらに親を持つことができます...)。また、複数のコンテナが同じ親を持つこともできます。

そこに ID を貼り付けることができますが、Entity Framework を介して親にアクセスできるようにしたいと考えています。そのためには、外部キーが必要です。(ParentContainerId に無効な番号が入力された場合の FK 違反の保護も必要です。)

しかし、これらの列に外部キーを配置しようとすると、次のエラーが発生します。

テーブル 'Container (Container)' の列は、既存の主キーまたは UNIQUE 制約と一致しません。

UNIQUE 制約を設定しない限り、ParentContainerId を使用できません。ただし、複数のコンテナーが同じ親を持つことができるため、それは機能しません。

1 つのテーブルを使用し、外部キーの親子関係を持つ方法はありますか?

4

2 に答える 2

4

1 対多の関係をモデル化したい場合は、次のようにすることができます。

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 つの子コンテナーを許可します。

于 2013-10-22T18:17:06.290 に答える
3

親 ID ではなく ContainerId に一意の制約を設定する必要があると思います

于 2013-10-22T18:16:10.610 に答える