Статус заказа и журнал состояния

#php #database #database-design #e-commerce #shopping-cart

#php #База данных #база данных-дизайн #электронная коммерция #корзина покупок

Вопрос:

Я разрабатываю серверную часть электронной коммерции (онлайн-покупки) на PHP / MYSQL.

Я хочу знать, какой наилучший способ обработки статуса заказов и отслеживания статуса / даты.

Когда пользователь разместил заказ, статус заказа будет равен 1 ( tbl_order.status = 1 ) в таблице tbl_order. Это лучший способ?

Вот цифры статуса заказа:

  • 1 — Новый заказ
  • 2 — Ожидающий
  • 3 — Отменено
  • 4 — Завершено

Когда сотрудники входят в серверную часть, они могут изменять статус заказа шаг за шагом.

Я хочу отслеживать, кто это сделал и в какое время, как это можно сделать?

Ответ №1:

Текущий статус заказа должен храниться в таблице заказов, как вы предлагаете.

Но для отслеживания изменений я бы предложил отдельную таблицу журнала, в которую вы бы входили timestamp , order_id , user_id old_status , new_status LastUpdate . Таким образом, вы можете в любое время отследить полную историю (в отличие от,, концепции).

Эта концепция может быть обобщена за пределы статуса заказа — таким образом можно отслеживать любые изменения значений полей (хотя при большом количестве таблиц журнала отслеживания размер имеет тенденцию быстро увеличиваться)

Комментарии:

1. Спасибо за предложение, mkilmanas. Необходимо ли поле old_status? У каждого заказа может быть 4 статуса, например: Новый заказ -> Подтверждение -> Обработка -> Завершено (Пошагово от персонала)

2. Иметь это не повредит. Особенно, если в какой-то момент в процессе возникнут сбои (например, заказ выполнен, но затем отменен (возвращен), или кто-то случайно помечает его как обрабатываемый и нуждается в повторном сбросе и так далее).

Ответ №2:

В этом методе нет ничего фундаментально неправильного. Будет ли у вас таблица OrderStatus, в которой хранятся цифры рядом с их значениями? Я бы рекомендовал это, поскольку это позволит добавлять различные статусы в будущем с минимумом суеты.

Что касается отслеживания изменений и времени — обычно у вас есть столбцы «lastUpdated» и «userId», которые обновляются каждый раз, когда изменяется заказ (возможно, с использованием хранимой процедуры для принудительного выполнения этого). Я бы поместил их в таблицу tbl_order, чтобы регистрировались любые изменения в заказе.

В целом, я думаю, вы идете по правильному пути.

Комментарии:

1. Что касается отслеживания — мне нужен список отслеживания каждого заказа. Например. Какое время было «в ожидании» и кто его назначил, а затем в какое время «Завершено» и «кто». Как вы думаете, у меня должна быть таблица order_logs? Сначала обновите tbl_order.status, а затем вставьте строку в в журналы заказов?