Сначала создаются network_device_profiles и radius_auth_settings с первичными ключами совместимого типа, затем dev_network. Ссылки без списка колонок направлены на primary key родительской таблицы.
Создание недостающих таблиц перед вставкой записей с внешними ключами
Сначала создаются network_device_profiles и radius_auth_settings с первичными ключами совместимого типа, затем dev_network. Ссылки без списка колонок направлены на primary key родительской таблицы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Перед тем как добавить строки в целевую таблицу, необходимо сначала создать все требуемые структуры (таблицы).
create table dev_network
(
device_id bigint generated by default as identity primary key,
profile_ref bigint not null
constraint fk_profile_ref references network_device_profiles,
radius_settings_ref bigint not null
constraint fk_radius_settings_ref references radius_auth_settings,
ip_address inet not null unique,
device_name varchar(200) not null unique,
model varchar(200),
description varchar(200)
);
Ответ
Сначала создаются network_device_profiles и radius_auth_settings с первичными ключами совместимого типа, затем dev_network. Ссылки без списка колонок направлены на primary key родительской таблицы.
Минимальные заглушки структуры для PostgreSQL:
CREATE TABLE network_device_profiles (
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
);
CREATE TABLE radius_auth_settings (
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
);
После этого можно выполнять CREATE TABLE dev_network из условия. Реальные поля профилей и настроек не заданы, поэтому их надо определить отдельно. До вставки устройства в родительских таблицах должны существовать соответствующие записи: одного создания таблиц недостаточно для прохождения внешних ключей. В миграции удаления порядок обратный.