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

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

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

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

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

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

Order
ID
CustomerID
OrderDate
...

Строка заказа
ID
OrderID
ProductID

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

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

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

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

Ответы [ 3 ]

1 голос
/ 03 октября 2010

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

1 голос
/ 03 октября 2010

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

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

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

1 голос
/ 03 октября 2010

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

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

...