Могу ли я создать иностранные ключи в базах данных?

StackOverflow https://stackoverflow.com/questions/2972957

Вопрос

У нас есть 2 базы данных - DB1 и DB2.

Могу ли я создать таблицу в DB1, которая имеет отношение к одной из таблиц в DB2? Другими словами, могу ли я получить внешний ключ в моей таблице из другой базы данных?

Я подключаюсь к этим базам данных с разными пользователями. Любые идеи?

Прямо сейчас я получаю ошибку:

ORA-00942: таблица или представление не существует

Это было полезно?

Решение

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

Другие советы

Одним из способов справиться с этим было бы создать материализованное представление о главной таблице в локальной базе данных, а затем создать ограничение целостности, указывающее на MV.

Это работает. Но это может привести к некоторым проблемам. Во -первых, если вам когда -нибудь понадобится полное обновление материализованного представления, вам нужно отключить ограничение, прежде чем сделать это. В противном случае Oracle не сможет удалить ряды в MV, прежде чем внести новые ряды.

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

Если вы идете по этому маршруту, ваш самый безопасный подход состоит в том, чтобы настроить MV для быстрого обновления на коммите главного таблица. Это будет означать, что ссылка БД открывается почти все время. И у вас будет администратор, если вам когда -нибудь понадобится полное обновление.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top