Сложная модель данных

alexeyco

Новичок
Сложная модель данных

Предположим, есть система личных сообщений между пользователями какой-либо системы. Предположим, она достаточно высоко нагружена. Итак. Внутренние сообщения реализованы не по типу форумных (короткие единичные сообщения), а (если проводить аналогию) по типу топиков форума. Но тут тоже не все просто. Если кто пользовался моим кругом, тот знает - личные сообщения фактически обсуждения с возможностью присоединения к этому обсуждению дополнительных пользователей. Надеюсь, Вы поняли о чем я.

Суть

Три таблицы.

Таблица заголовков (обсуждений)

obsu_subjects
obsu_id | obsu_subject

Таблица сообщений (непосредственно)
soob_id | soob_parent | soob_author | soob_tesxt

Таблица участников обсуждения
uch_parent | uch_member_id

Суть вопроса
Как создается новое обсуждение - создается INSERT-запрос в таблицу obsu_subjects, потом получаем id последнего добавленного обсуждения, потом добавляем в таблицу сообщений запись и ей указываем parent равный id обсуждения (надеюсь, понятно), потом добавляем двух участников обсуждения (тот который from и тот который to - для начала).

Вопрос
Что если между INSERT-запросом в таблицу обсуждений (obsu_subjects) и получением последнего добавленного id пройдет какое-то время и соответственно, будет кем-то параллельно добавлено новое обсуждение? Ведь тогда получится нарушение структуры и сбой. Транзакции не пройдут - ведь проблема не просто должна быть отсечена, а решена - притом таким образом, чтобы обычный пользователь не понял, что она и вовсе возникала.

Что посоветуете?

-~{}~ 24.07.09 02:18:

Прошу прощения - прочитал, что отпостил... в общем, интересует постгревский аналог last_insert_id мускуля
 

zerkms

TDD infected
Команда форума
потом получаем id последнего добавленного обсуждения
Что если между INSERT-запросом в таблицу обсуждений (obsu_subjects) и получением последнего добавленного id пройдет какое-то время и соответственно, будет кем-то параллельно добавлено новое обсуждение?
последний добавленный id специфичен для соединения.
 

alexeyco

Новичок
Теперь такой вопрос... выборка последнего добавленного id в постгре будет ли на 100% корректна с помощью SELECT currval(my_table_seq)? Ведь это сродни выборке значения AUTO INCREMENT в мускуле. Важно ведь выбрать не последнее значение id, а значение последнего добавленного.

Каким способом в постгре это сделать то?
 
Сверху