внешние ключи на столе из другой базы данных - PullRequest
15 голосов
/ 15 сентября 2009

У меня есть две базы данных в SQL Server, и у меня есть общая таблица для обеих баз данных - важная большая таблица, которая содержит внешние ключи для других таблиц. Проблема в том, что таблица находится в DatabaseA , и мне нужно ссылаться на внешние ключи этой таблицы из DatabaseB .

Я знаю, что SQL не поддерживает ссылочную целостность базы данных, так каков наилучший способ добиться этого? Я имею в виду объединение двух баз данных и превращение их в одну базу данных - это не имеет значения, если не считать увеличения сложности.

Есть предложения?

Ответы [ 3 ]

7 голосов
/ 16 сентября 2009

Я бы не стал этого делать, если бы мог - вы можете просто хранить обе таблицы в одной базе данных и использовать FK?

Родительские и дочерние таблицы находятся в разных базах данных.

Хотя вы не можете использовать внешний ключ в этой ситуации, есть обходные пути - вы можете использовать либо триггеры, либо пользовательские функции, заключенные в проверочные ограничения. В любом случае, ваша целостность данных не является полностью водонепроницаемой: если база данных с вашей родительской таблицей выходит из строя и вы восстанавливаете ее из резервной копии, вы можете легко получить сирот.

Отношения между родителями и детьми поддерживаются триггерами.

Существует довольно много ситуаций, когда триггеры не срабатывают, например:

· Таблица отброшена.

· Таблица усекается.

· Настройки для вложенных и / или рекурсивных триггеров предотвращают срабатывание триггера.

Также триггер может быть просто неверным. В любом случае, в вашей базе данных могут оказаться сироты.

1 голос
/ 15 сентября 2009

Триггеры могут быть написаны для обеспечения ссылочной целостности для разных баз данных.

1 голос
/ 15 сентября 2009

Вот статья о том, как использовать мастер импорта / экспорта служб SSIS:

http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm

Самый простой способ сделать это - просто экспортировать одну базу данных (я бы использовал самую маленькую из двух) в любой формат, наиболее удобный для вас, а затем импортировать ее в другую. Пока имена таблиц различны, это не должно вызывать проблем.

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