Как зафиксировать состояние объекта в базе данных в ходе бизнес-процесса?

Я прошу тех, кто уже имел дело с этой ситуацией, поделиться своим опытом.

Случай использования:

Бизнес-заказ поступает в систему> становится активным> заказ принят или истек срок действия> ожидает обработки> выполнен успешно или нет.

Ты видишь? Существует как минимум 4 состояния объекта. Что я делаю, так это то, что у меня есть главная таблица "Порядок", а затем еще четыре таблицы, которые содержат только порядковые номера (активные, просроченные, ожидающие, выполненные), и я делаю JOINS при запросе заказов в разных состояниях.

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

Каковы ваши методы для этого варианта использования?

1 ответ

Решение

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

Я бы, вероятно, создал бы только таблицу OrderStatusCode (orderId, statusId), и вы можете сделать JOINS как

select * from order 
   inner join activeorder 
      on 
   order.orderID = activeorder.ActiveOrderID 
      WHERE activeorder.status = 'l'

Но я чувствую, что в отношении всего делового цикла не будет более 6-10 изменений состояния предприятия. Это не должно быть проблемой для того, чтобы иметь все в одной таблице. Если у вас есть разумный индекс для status_id для выбора "где status_id = x". Но с другой стороны, наличие дополнительной таблицы позволяет легко добавить некоторые дополнительные свойства в отношении кода состояния.

Другие вопросы по тегам