Можем ли мы иметь две взаимные ссылки на внешние ключи

Если две таблицы A и B должны иметь взаимные ссылки на внешний ключ, каждое ограничение внешнего ключа может быть определено в операторах создания таблицы для A и B. Я пытаюсь сделать это в pgAdmin, но это показывает ошибку. Я хочу просто проверить, является ли это утверждение истинным или ложным. У меня есть сомнения, что для добавления ссылки на внешний ключ в дочернюю таблицу. У него должна быть родительская таблица. Кто-нибудь может это подтвердить?

Отвечает ли это на ваш вопрос? mysql — взаимозависимые внешние ключи

philipxy 09.04.2022 20:52
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, у вас могут быть взаимные ссылки на внешние ключи, но вы не можете определить их оба, используя только 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;

https://www.db-fiddle.com/f/gb9vo1fQy8Jty1pGdn8Q7o/0

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