Если две таблицы A и B должны иметь взаимные ссылки на внешний ключ, каждое ограничение внешнего ключа может быть определено в операторах создания таблицы для A и B. Я пытаюсь сделать это в pgAdmin, но это показывает ошибку. Я хочу просто проверить, является ли это утверждение истинным или ложным. У меня есть сомнения, что для добавления ссылки на внешний ключ в дочернюю таблицу. У него должна быть родительская таблица. Кто-нибудь может это подтвердить?
Да, у вас могут быть взаимные ссылки на внешние ключи, но вы не можете определить их оба, используя только create table
. Причина в том, что когда вы определяете первую таблицу, вторая таблица еще не существует, поэтому вы не можете ссылаться на нее во внешнем ключе.
create table A (id serial primary key, Bid serial references B);
create table B (id serial primary key, Aid serial references A);
Возвращает эту ошибку при создании таблицы A:
Schema Error: error: relation "b" does not exist
И поскольку A не удалось создать, таблица создания B также возвращает ошибку:
Schema Error: error: relation "a" does not exist
Вместо этого вам нужен еще один шаг. Сначала создайте таблицу A, затем создайте таблицу B со ссылкой на внешний ключ на таблицу A, затем добавлять внешний ключ на таблицу A. Теперь, когда таблица B существует, вы можете сослаться на нее.
create table A (id serial primary key);
create table B (id serial primary key, Aid serial references A);
alter table A add Bid serial references B;
Отвечает ли это на ваш вопрос? mysql — взаимозависимые внешние ключи