SQL Server 2005 + Entity Designer - Ошибка ограничения внешнего ключа? - PullRequest
0 голосов
/ 01 июля 2011

Использование Entity Designer в 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.

Что-то не так с моей структурой здесь?Разве это не нормально для меня, чтобы просто иметь одну ассоциацию, идущую из Зоны -> Регион, и на самом деле мне нужно иметь две ассоциации, одну из мира -> Регион и одну из Зоны -> Регион?

Спасибо, -Дан

1 Ответ

0 голосов
/ 29 августа 2011

Что бы это ни стоило, я просто перестроил диаграмму сущностей с нуля, и она сработала. Не знаю, была ли у меня ошибка в исходной диаграмме, или это был сбой в Entity Designer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...