Разработка базы данных для небольшой CRM-системы/выставления счетов

StackOverflow https://stackoverflow.com/questions/3851230

Вопрос

В настоящее время я разрабатываю небольшую систему управления взаимоотношениями с клиентами и выставлением счетов для своего клиента.И я столкнулся с некоторыми небольшими проблемами, которые я хотел бы обсудить.

Какова наилучшая практика в отношении заказов, клиентов и продуктов?Должен ли мой клиент иметь возможность удалять заказы, клиентов и продукты?

В настоящее время я разработал свою базу данных на основе принципа взаимосвязи между заказом, клиентом и продуктом следующим образом:

Клиент
ID
Имя
...

Продукт
ID
Имя
Цена
...

Порядок
ID
Идентификатор клиента
Дата заказа
...

Строка заказа
ID
Порядковый номер
Идентификатор продукта

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

Должен ли я просто отключать продукты и клиентов при нажатии кнопки удаления или как лучше всего поступить?

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

Пожалуйста, поделитесь своей мудростью:D

Это было полезно?

Решение

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

Зависит от вашего бизнес-сценария - что уникально в том, как клиенты поддерживают его в настоящее время? (скажем, вручную?) Как они обращаются, когда старый продукт, который был ранее прекращен внезапно вновь появляться? (Они относятся к этому как новый продукт или начать ссылку на старый продукт?) Я думаю, нет никаких правильных или неправильных ответов на эти вопросы, это зависит от функциональности - всегда желательно понимать существующие процессы (минус программное обеспечение ) уже сопровождается клиентами, а затем сопоставьте их в функциональность программного обеспечения.

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

Другие советы

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

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

Вместо "удаления" я бы добавил логический столбец для isActive.Таким образом, вы не потеряете исторические данные.Например, если они смогут удалить клиента, то они не смогут просмотреть историю, касающуюся этого клиента, и это может затруднить или сделать невозможным просмотр статистических данных.Для таблицы заказов у вас мог бы быть столбец, представляющий что-то вроде "текущий", "отмененный", "заполненный", чтобы выполнить то же самое.Этот столбец должен быть кодом для поиска / codetable.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top