在 VS2010 中使用实体设计器为 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 的来源。
我这里的结构有问题吗?对我来说,只有一个来自 Zone -> Region 的关联不好吗?事实上,我必须有两个关联,一个来自 World -> Region,一个来自 Zone -> Region?
谢谢,-丹