Внешние ключи на таблице из разных баз данных
У меня есть две базы данных в SQL Server, и у меня есть общая таблица для обеих баз данных, важная большая таблица, которая содержит внешние ключи для других таблиц. Проблема заключается в том, что таблица находится в DatabaseA, и мне нужно передать внешние ключи в эту таблицу из DatabaseB.
Я знаю, что SQL не поддерживает ссылочную целостность перекрестных баз данных, и что лучший способ достичь этого? Я думаю о объединении двух баз данных и создании единой базы данных - это не имеет значения, кроме увеличения сложности.
Любые предложения?
Ответы
Ответ 1
Я бы не стал делать это, если бы мог - можете ли вы просто сохранить обе таблицы в одной datbase и использовать FK?
Родительские и дочерние таблицы находятся в разных базах данных.
Хотя вы не можете использовать внешний ключ в этой ситуации, есть обходные пути - вы можете использовать триггеры или UDF, завернутые в контрольные ограничения. В любом случае, ваша целостность данных не является полностью водонепроницаемой: если база данных с родительской таблицей выйдет из строя, и вы восстановите ее из резервной копии, вы можете легко оказаться в сиротах.
Отношения родитель-ребенок привязаны к триггерам.
Существует множество ситуаций, когда триггеры не срабатывают, например:
. Таблица отбрасывается.
. Таблица усечена.
. Настройки для вложенных и/или рекурсивных триггеров предотвращают запуск триггера.
Также триггер может быть просто некорректным. В любом случае, вы можете оказаться в сиротах в своей базе данных.
Ответ 2
Вот статья о том, как использовать мастер импорта/экспорта SSIS:
http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm
Самый простой способ сделать это - просто экспортировать одну базу данных (я бы использовал наименьшую из двух) в любой формат, наиболее удобный для вас, а затем импортировать в другой. Пока имена таблиц все разные, это не должно представлять никаких проблем.
Ответ 3
Триггеры могут быть записаны для обеспечения ссылочной целостности в отношении разных баз данных.