У меня есть две таблицы, связанные друг с другом (упрощенный пример):
people
id | person
------------
1 | Peter
2 | Emma
3 | Sarah
parents
id_person | id_parent
---------------------
3 | 1
3 | 2
Как видите, Sarah
является дочерью Peter
и Emma
.
Теперь, как я могу добавить Sarah's
брата Joe
в обе таблицы, если ids
в people
автоматически увеличиваются и запросы выполняются в асинхронной среде?
Причина, по которой я упомянул "запросы выполняются в асинхронной среде", заключается в том, что я боюсь последовательного подхода, который выполняется в несколько шагов, таких как этот:
- 1) - Вставить
Joe
вpeople
- 2) - Чтение
Joe's
новогоid
изpeople
- 3) - Вставить
Joe's
новыйid
вparents
может завершиться ошибкой, если другой запрос из другого потока/процесса/сопрограммы попадет в базу данных между 1)
и 2)
.
Не будет ли это очень дорого? Например, если каждый запрос исходит от новой сопрограммы, а их тысячи? Извините, я не упомянул сопрограммы ранее.
Соединения обычно объединяются фреймворком, поэтому открытие одного не требует больших затрат. Обратите внимание, что если два потока используют одно и то же соединение одновременно, вы получите повреждение данных, база данных не предназначена для этого.