Разработка базы данных для выставления счетов - PullRequest
3 голосов
/ 29 декабря 2011

Несколько дней назад я создал приложение, которое занимается выставлением счетов.Я хотел бы знать, как лучше интегрировать скидку в мои счета.Должен ли я указать его как отрицательный элемент (в таблице invoice_items) или создать столбец «скидки» в таблице счетов-фактур?

Ответы [ 3 ]

6 голосов
/ 01 января 2012

Я бы назвал его предметом с отрицательной ценностью.Причины:

  • При выставлении счетов очень важно, чтобы вычисленное значение оставалось неизменным всегда;даже если ваша формула расчета впоследствии изменится, вы можете правильно воспроизвести любой данный счет.Это даже верно, если значение было неправильно , рассчитанное в то время - это было то, что было.
  • Наличие значения означает, что ручные корректировки для исключительных обстоятельств легко обрабатываются - например, вашМенеджер по маркетингу / бухгалтер может принять решение предоставить разовую скидку в размере 100 долларов США из-за поздней доставки.Это тривиально с отрицательными значениями - просто добавьте еще одну строку, но сложно / хлопотно с дисконтными ставками
  • Вы можете иметь несколько сумм скидок на один счет
  • Это абсолютно гибко - у него есть свое пространство для существованияи быть тем, кем оно должно быть.На самом деле, я бы сделал скидку другим «продуктом» (может быть, даже несколькими продуктами - по одному для каждой отдельной причины скидки, например, xmas, купон, реферал и т. Д.)
  • С помощью своего собственного элемента вы можете добавить причину.описание, как и любой другой «продукт» - например, «10% скидка на оплату наличными» или что-то еще
  • Вам не нужны никакие специальные коды или столбцы базы данных! Просто сложите элементы, как раньше, и напечатайте их в счете«Ложка (скидка) отсутствует»: это просто еще одна позиция - что может быть проще, чем не требуется никаких изменений кода / базы данных?
  • Не все предметы должны быть обесценены - например, возвраты, возвраты, подписки (если применимо). Это становится слишком сложным и нет необходимости представлять бизнес-логику скидок в базе данных. Оставьте расчет и т. д. в коде приложения, сохраните результат в БД
  • Наличие собственного элемента означает расчетможет быть произвольно сложным. Это означает, что нет необходимости в ведении БД, так как сложность растет.Код больше, чем для поддержки / изменения базы данных
  • Наконец, я успешно построил систему выставления счетов и выбрал подход "item", и он действительно хорошо работал
2 голосов
/ 01 января 2012

Я полностью согласен с тем, чтобы сделать это как можно более простым, но нужно учитывать одно обстоятельство: следует ли освобождать какой-либо товар от скидки?В этом случае вам нужно добавить поле bool в детали, чтобы запомнить, какая строка должна иметь скидку.

2 голосов
/ 29 декабря 2011

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

...