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 мускуля
Предположим, есть система личных сообщений между пользователями какой-либо системы. Предположим, она достаточно высоко нагружена. Итак. Внутренние сообщения реализованы не по типу форумных (короткие единичные сообщения), а (если проводить аналогию) по типу топиков форума. Но тут тоже не все просто. Если кто пользовался моим кругом, тот знает - личные сообщения фактически обсуждения с возможностью присоединения к этому обсуждению дополнительных пользователей. Надеюсь, Вы поняли о чем я.
Суть
Три таблицы.
Таблица заголовков (обсуждений)
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 мускуля