【发布时间】:2023-11-20 12:15:01
【问题描述】:
在 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?
谢谢, -丹
【问题讨论】:
标签: sql-server visual-studio ado.net foreign-keys composite-primary-key