Как определить автоматически сгенерированный первичный ключ, используемый в качестве внешнего ключа для другой таблицы
Это вопрос из двух частей. Прилагается схема для таблицы базы данных PostgreSQL. Есть четыре стола. ТаблицаMain
имеет отношение один-ко-многим с таблицейSubmain
, ТаблицаSubmain
имеет отношения один-много с таблицейSubsub
, Первичные ключи для всех четырех таблиц являются последовательными NOT NULL (поэтому они автоматически увеличиваются). Каждая таблица имеет несколько атрибутов, которые здесь не показаны.
Вопрос 1. Несколько пользователей будут иметь доступ к этому приложению и базе данных. Когда пользователь обращается к приложению, которое использует эту базу данных, часть его информации будет храниться в таблицеMain
, Последующая информация (предоставленная пользователем и другие результаты, основанные на вводе пользователя) будет храниться в таблицахSubmain
а такжеSubsub
, Мое мышление заключается в следующем:
MainId
Первичный ключ будет сгенерирован автоматически, а часть пользовательской информации будет помещена в таблицу.Main
.Запись будет вставлена в таблицуSubmain
на основе ввода пользователя (элементы вMain
). Как я могу определить, какой первичный ключ пользователяMainId
так что я могу вставить его вSubmain.MainId [FK]
для новой записи?Запись также будет вставлена вSubsub
и эта информация будет основана на информации в таблицеSubmain
, Точно так же, как я могу определитьSubmain.Submain [PK]
так что я могу использовать его в качестве внешнего ключа вSubsub.Submain [FK]
?Вопрос 2. Между многими существует связьMain
а такжеOther
(Я опустил ассоциативную таблицу). Однако для того, чтобы вставить запись в таблицуOther
требуется информация отSubsub
, Будет взаимно однозначное сопоставлениеSubsub
а такжеOther
, Нужно ли мне извлекать это отношение один к одному ИЛИ можетOther
быть заселен на основе комплексаSELECT/JOIN
выписка из таблицыMain
вниз к столуSubsub
? Это может быть плохой вопрос, но я думаю, что мне нужно нарисовать отношение один к одному и вставить внешний ключSubsubId [FK]
вOther
вместо того, чтобы пытаться сложный оператор SQL.