В выпуске Visual Studio 2008 Database можно использовать «частичные проекты», чтобы разделить базу данных на несколько проектов для развертывания и сопровождения. Я пытался сделать это с нашим проектом, но столкнулся со следующей загадкой:
Если у вас есть проект, который определяет некоторые базовые таблицы, а затем у вас есть другой проект, который определяет новый набор таблиц с ограничениями, указывающими на таблицы в первом проекте, DBPro, похоже, не сможет отобразить эту взаимосвязь. Конкретная ошибка:
"CONSTRAINT имеет неразрешенную ссылку на таблицу foo" (где foo находится в исходной БД).
Более конкретный пример, если вы хотите продублировать для себя сценарий:
Создайте проект с именем BaseDB.
Определите в BaseDB таблицу с именем Users со следующим DDL:
CREATE TABLE [dbo].[Users] (
UserID INT IDENTITY(1,1) PRIMARY KEY,
UserName NVARCHAR(20) NOT NULL
)
Экспорт BaseDB как частичного проекта с добавлением файла _BaseDB.files в ваш проект.
Создайте проект в том же решении с именем DerivedDB
Используйте частичный проект импорта, чтобы указать на BaseDB, подтверждая, если вам нравится, что в файлах импорта есть ссылка на заглушку, указывающая на таблицу Users в BaseDB.
Определите таблицу в DerivedDB с именем PowerUsers со следующим DDL:
CREATE TABLE [dbo].[PowerUsers] (
PowerUserID INT IDENTITY(1,1) PRIMARY KEY,
UserID INT NOT NULL
)
Если в этот момент вы выполняете «Build», все работает.
Добавить ограничение FOREIGN KEY в проекте DerivedDB из PowerUsers для пользователей со следующим DDL:
ALTER TABLE [dbo].[PowerUsers]
ADD CONSTRAINT [PowerUsers_Users_FK]
FOREIGN KEY (UserID)
REFERENCES [dbo].[Users] (UserID)
Выполнение вышеуказанных шагов должно позволить вам увидеть ошибку, о которой я говорю.
Вопросы:
Есть ли способ исправить ссылки на ограничения в проектах базы данных?
Если нет, следует ли зарезервировать частичные проекты для серии хранимых процедур, а базовый проект зарезервировать для всех DDL базовых таблиц и ограничений?