2016-07-26 4 views
-1

Я кодирую веб-сайт. Мой вопрос может быть упрощен:Обновление одной таблицы на основе другой таблицы автоматически в SQL?

Если в таблице транзакций произошла и записана транзакция. Таблица баланса должна автоматически обновляться на основе транзакции.

Один из способов, которым я мог подумать, заключается в том, что добавление в столбец транзакций другого столбца в качестве флага для проверки того, была ли обновлена ​​таблица баланса на основе этой транзакции. Каждый раз, когда пользователь открывает веб-сайт, я бы использовал php, чтобы обновить таблицу баланса, отмеченные как «не обновленные» в таблице транзакций, а затем отобразить обновленную таблицу баланса.

Но это означает, что каждый раз, когда таблица баланса обновляется после проверки пользователем баланса.

Подход, который я обновляю обе таблицы при вставке таблицы транзакций, невозможен, потому что у меня есть только доступ к базе данных транзакции, а не код для вставки.

Интересно, есть ли другой способ, которым таблица баланса может автоматически обновляться на основе таблицы транзакций? Есть ли сценарий, который можно поместить на серверной стороне для запуска каждые 10 секунд или функцию push, всякий раз, когда в таблице транзакций есть обновление, тогда сервер автоматически обновляет таблицу баланса?

Заранее спасибо.

+0

@ weeo как уровень доступа к данным, закодированный в вашем приложении ... выполняет ли каждый DataAccess через хранимые процедуры или происходит через ORM или прямой доступ к таблице? Pls уточняет. – objectNotFound

+0

@objectNotFound Таблица транзакций из других наборов данных, она будет вводить новые данные в мои наборы данных, которые имеют одну и ту же таблицу транзакций. Поэтому мне нужно обновить таблицу баланса на основе обновленной таблицы транзакций. Поэтому я могу сделать что-нибудь о моих собственных таблицах. Но таблица транзакций обновляется через функцию push из другой базы данных. – weeo

+0

Из того, что вы сказали, вы не можете изменить схему таблицы транзакций, не изменяя внешний механизм push, поскольку это сломается. Если таблица не доступна через хранимые процедуры и представления. Если вставки выполнены через SP, вам легко справиться с вашей ситуацией. – objectNotFound

ответ

3

Первый вопрос: вы хотите балансовую таблицу вообще? Если вы можете получить остатки от транзакций, возможно, просмотра будет достаточно. Он всегда будет актуальным и не накладывает никаких накладных расходов или сложности на обработку транзакций.

Если вы хотите кэшировать производные балансы в таблице - возможно, потому что балансы просматриваются гораздо чаще, чем транзакции, - вы должны иметь возможность сделать это с холодного старта. Вы не хотите быть способным генерировать баланс только при поступлении транзакции, потому что, когда что-то пойдет не так - не если, , когда - вы будете застревать, написав «код чрезвычайной ситуации», когда вы скорее пообедать. Так что не создавайте балансировку из-за обработки транзакций.

Вот как я бы это сделать:

  • Написать вид противовесов.
  • Создать таблицу balances, идентичную виду, но с колонкой last_transaction_time.

Теперь вам нужна процедура SQL для выполнения следующих действий:

  1. Сравнить max(balances. last_transaction_time) в max(transactions.time).
  2. Если balances устарели, уточните это с точки зрения.
  3. select ... from balances (таблица).

Недостатком является то, что пользователю придется ждать, пока балансы не будут восстановлены после публикации новых транзакций. Положительный результат - балансы генерируются только в случае необходимости, а не после каждой транзакции. Это обычно очень важно, потому что обработка транзакций часто зависит от времени.

Всегда должно быть время между транзакциями обработки и расчетными балансами. Полезность кэширования баланса зависит от частоты использования и сложности вычислений.

Вышеупомянутый процесс всегда производит правильные балансы и минимизирует количество вычислений. Он может быть изменен на «предварительный подсчет» устаревших тайников во время простоя; это был бы выбор, чтобы нести сверхвысокие накладные расходы в обмен на максимальную пропускную способность.

+0

+1 для 'Верхний баланс - генерируется только при необходимости, а не после каждой транзакции.« Точка наличия таблицы баланса в первую очередь - показывать кому-то текущий баланс, и если никто не спрашивает, зачем вычислять Это? –

+0

Большое вам спасибо за ваш ответ. Я также думаю о том, чтобы не иметь таблицу баланса и каждый раз рассчитывать баланс из таблицы транзакций. Но моя таблица транзакций может стать очень большой. Поэтому я считаю, что держать баланс в таблице лучше, чтобы ускорить процесс ... Спасибо за подробный план. Я бы пошел так! – weeo

Смежные вопросы