Я все еще новичок, и некоторые из правильных методов кодирования ускользают от меня. Документация по этой конкретной ситуации слаба, поэтому я хотел бы получить несколько советов/предложений от вас, экспертов :) по следующему.
У меня есть API, который позволяет пользователям обновлять 2 таблицы за один вызов. Одна представляет собой таблицу SUMMARY, а другая — таблицу DETAIL с FK для таблицы SUMMARY.
Мой код делает то, что я делаю UPSERT (вставка/обновление) в таблицу SUMMARY, беру insert_id
и затем удаляю записи из таблицы DETAIL, затем вставляю те, которые мне нужны (конечно, со ссылкой на SUMMARY с буквой fk).
Однако в случае отсутствия изменений в СУММАРНЫХ данных - insert_id
возвращает 0
. Это кажется ожидаемым, так как ни одна строка не была обновлена/вставлена.
Вот мой вопрос:
Должен ли я выполнять полное чтение таблиц и сравнивать данные перед этой попыткой обновления/удаления/вставки? Или есть другой изящный способ получить id
из SUMMARY, который был дубликатом попытки UPSERT? Я чувствую, что мои пользователи будут «почти» ВСЕГДА изменять данные SUMMARY и DETAIL при использовании этого API.
Какова правильная практика кодирования здесь? Стоит ли дополнительное чтение каждый раз? Или читать только если insert_id = 0
?
Мысли? Моя самая большая проблема заключается в том, что я не знаю, какова здесь разница в величине чтения и записи, особенно потому, что я не верю, что API будет вызываться много раз без изменения значений.
Опять мои варианты:
- Read db and compare to see if there is a diff
- Вставить/обновить соответственно
- Attempt Insert/update.
- если (insert_id = 0), то прочитайте БД, чтобы получить итоговый идентификатор для таблицы сведений
- полный процесс
- Attempt Insert/Update
- использовать? что-то? чтобы получить идентификатор сводки записи, которая была дублирована (и предотвратила вставку/обновление)
- используйте идентификатор для выполнения шагов.