Использование серийного типа данных в качестве внешнего ключа - PullRequest
2 голосов
/ 01 сентября 2011

Допустим, у меня есть две таблицы.

Первый: списки таблиц, с list_id SERIAL, list_name TEXT

Вторая таблица, тривиально, это таблица, которая сообщает, является ли список общедоступным: list_id INT, is_public INT

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

Как люди обычно справляются с этим? Получают ли они возвращаемый тип из вставки, используя любую систему, с которой они взаимодействуют с базой данных?

1 Ответ

2 голосов
/ 01 сентября 2011

Один из подходов к такого рода вещам:

ВСТАВЬТЕ в первую таблицу, используйте lastval(), чтобы получить «последнее значение, полученное с помощью nextval для любой последовательности» (в текущем сеансе), а затем используйте это значение для построения вашей следующей ВСТАВКИ.

Там также INSERT ... RETURNING:

Необязательное предложение RETURNING заставляет INSERT вычислять и возвращать значения, основанные на каждой фактически вставленной строке. Это в первую очередь полезно для получения значений, которые были предоставлены по умолчанию, таких как порядковый номер.

Использование INSERT ... RETURNING id в основном объединяет первые два шага, описанных выше, в один, поэтому вы должны сделать:

  • INSERT ... RETURNING id
  • INSERT ...

, где вторая ВСТАВКА будет использовать id, возвращенную из первой ВСТАВКИ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...