#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, а затем вставьте строку в в журналы заказов?