powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
6 сообщений из 6, страница 1 из 1
Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
    #39355287
AndryG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даже тему не смог нормально назвать (

InnoDB, autocommit = 0, явно управляем транзакциями.
Организовуем разговоры персон.

таблица разговоров: (таблицы имеют больше полей. оставил лишь минимум)
Код: plaintext
talk(id, finishtime) finishtime is null - разговор активный
и вторая таблица участников: (главный ключ на оба поля)
Код: plaintext
talk_member(talk_id, pers_id)

Создаются разговоры, к ним добавляются участники, затем разговоры завершаются (проставляется значение talk.finishtime)
Каждая персона в один момент времени может участвовать в одном активном разговоре .
Как ? Какими блокировками/запросами достичь выполнения правила выше ?

В транзакции выполняется ещё и другие задачи (логирование, оплата и т.д.). Посему хотелось бы оставить транзакции изоляуию READ COMMITTED.

Своего решения не описываю, потому что его нет. Поле finishtime копировать с участников не хочется. Я надумал лишь выносить данные по заверешенным разговорм в отдельные талицы и на members.pers_id поставить уникальный ключ (
...
Рейтинг: 0 / 0
Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
    #39355386
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndryGтаблица участников: (главный ключ на оба поля)
Код: plaintext
talk_member(talk_id, pers_id)

Таблица динамическая (вышел из разговора - запись удаляется) или статическая (записи только добавляются)?
...
Рейтинг: 0 / 0
Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
    #39355417
AndryG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В обе таблицы записи только добавляются.
...
Рейтинг: 0 / 0
Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
    #39355484
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае для каждой персоны надо делать запрос на предмет отсутствия для него записи участника незавершённого разговора.
...
Рейтинг: 0 / 0
Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
    #39355495
AndryG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каждый из двух одновременно создаваемых разговора в своей транзакции добавит петю к себе.
И каждый удачно закоммити изменения. В итоге петя будет в двух активных разговорах.

За день надумал, что у меня есть два варианта:
- либо я блокировками разруливаю добавление записей и делаю вообще невозможным добавление конкурентных записей
- либо я перекраиваю структуру таблиц так, чтобы срабатывали ограничения целостности БД и тогда записи будут добавляться, но не пройдет коммит

Люди добрые, помогите мыслями
...
Рейтинг: 0 / 0
Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
    #39355497
AndryG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaВ таком случае для каждой персоны надо делать запрос на предмет отсутствия для него записи участника незавершённого разговора.
Я совсем не понял, как это реализовать. Ведь проверки будут внутри транзакций. Опишите, пжлст, подробней.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Главная-подчиненная таблицы. Добавить участника соблюдая уникальность.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]