Как зафиксировать состояние объекта в базе данных в ходе бизнес-процесса?
Я прошу тех, кто уже имел дело с этой ситуацией, поделиться своим опытом.
Случай использования:
Бизнес-заказ поступает в систему> становится активным> заказ принят или истек срок действия> ожидает обработки> выполнен успешно или нет.
Ты видишь? Существует как минимум 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". Но с другой стороны, наличие дополнительной таблицы позволяет легко добавить некоторые дополнительные свойства в отношении кода состояния.