Я не уверен, существует ли что-то особенное для этого варианта использования, но это было похоже на случай, когда кто-то, вероятно, создал какую-то полезную структуру/методику/дизайн-шаблон.
Моя ситуация
У меня есть набор команд SQL, выполняемых из среднего уровня (Java), для вставки/обновления/удаления данных в любую из множества очень больших таблиц через соединения из связанной промежуточной таблицы.
У меня есть больше команд SQL, которые обновляют различные производные таблицы на основе содержимого промежуточной таблицы/фактической таблицы. Разные таблицы будут взаимодействовать с разными производными таблицами через разные запросы (как обычно). Эти команды, возможно, придется чередовать с первым набором в зависимости от варианта использования, поэтому я не могу обязательно выполнить набор 1, а затем набор 2 одновременно.
Мой вопрос
Итак, мне нужно построить цепочку команд, которые выполняются последовательно, и мне нужно вызвать откат, если какая-либо из них не сработает. Я хотел бы сделать это как можно яснее и документированнее.
Кто-нибудь знает стандартный способ кодирования? Я уверен, что любой, кто переходит с кода хранимых процедур на код среднего уровня, делал это раньше, и я не хочу изобретать велосипед, если есть хорошие варианты.
Дополнительная информация
Одна из моих главных забот — сделать все ясно. Чтобы уточнить, у меня будет набор запросов, специально предназначенных для:
- Сократите промежуточную таблицу A' и заполните ее первичными ключами, предназначенными для записей удаления.
- Удалить из фактической таблицы A на основе соединения с A'
- Сократите промежуточную таблицу A' и заполните ее полными данными для upserts.
- Обновление/вставка записей от A до A на основе объединений
Та же логика будет применяться к таблицам B, C, D и т. д. К сожалению, это может быть случай, когда только A и C требуется дополнительный шаг, например, синхронизация удалений с определенной производной таблицей, которая должна быть выполнена после удалений, но до возражает.
Я, очевидно, хотел бы сгруппировать всю логику для обновления таблицы, и я хотел бы также сгруппировать всю логику для обновления производной таблицы, но во время выполнения они должны быть разумно чередованы, и это звучит беспорядочно для меня.