0

在 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?

谢谢,-丹

4

1 回答 1

0

对于它的价值,我最终只是从头开始重新构建实体图,并且它起作用了。不知道我的初始图表中是否有错误,或者这是否是实体设计器的故障。

于 2011-08-29T15:16:22.283 回答