VS2010 で Entity Designer を使用して SQL Server 2005 用のデータベースを構築します。「モデルからデータベースを生成」によって生成された SQL を介して実際にテーブルを構築しようとすると問題が発生します。テーブルはすべて正しく作成されていますが、外部キーの制約で鳴っています。
問題のエンティティは次のとおりです。
World:
WORLD_ID [int32] (Primary Key)
Name [String]
Zone:
WORLD_ID [int32] (Primary key, FK on World.WORLD_ID)
ZONE_ID [int32] (Primary key)
Name [String]
Region:
WORLD_ID [int32] (Primary key, FK on Zone.WORLD_ID)
ZONE_ID [int32] (Primary key, FK on Zone.ZONE_ID)
REGION_ID [int32] (Primary key)
Name [String]
生成された SQL コードのこの部分が問題です。
-- Creating foreign key on [ZONE_ID], [WORLD_ID] in table 'Regions'
ALTER TABLE [dbo].[Regions]
ADD CONSTRAINT [FK_ZoneRegion]
FOREIGN KEY ([ZONE_ID], [WORLD_ID])
REFERENCES [dbo].[Zones]
([ZONE_ID], [WORLD_ID])
ON DELETE NO ACTION ON UPDATE NO ACTION;
エラーは次のとおりです。
参照テーブル 'dbo.Zone' には、外部キー 'FK_ZoneRegion' の参照列リストと一致する主キーまたは候補キーがありません。
この問題は、私の複数列の主キー (WORLD_ID+ZONE_ID+REGION_ID) で、ZONE_ID と WORLD_ID の両方が外部キーであり、具体的には WORLD_ID が実際には外部キーでもあるという事実と関係があると想定する必要があります。 FK のソースを含むテーブル。
ここで私の構造に何か問題がありますか?ゾーン -> リージョンから 1 つの関連付けを作成するだけでは問題でしょうか? 実際には、ワールド -> リージョンから 1 つとゾーン -> リージョンから 1 つの 2 つの関連付けを作成する必要がありますか?
ありがとう、ダン