Дизайн счетов-фактур - PullRequest
0 голосов
/ 09 июня 2011

Я хочу знать, как оформить таблицу счетов.

Счет-фактура включает много заказов из order таблицы.

Правильно ли составлена ​​эта таблица счетов-фактур?

заказ

  • идентификатор_порядка (PK)
  • идентификатор_пользователя (FK)
  • total_cost
  • порядковый_датчик
  • статус

order_item

  • order_item_id (PK)
  • order_id (FK)
  • item_name
  • стоимость

таблица счетов

  • invoice_id (PK)
  • invoice_no
  • invoice_date
  • period_start_date
  • period_end_date
  • статус

invoice_order (счет со многими заказами)

  • invoice_order_id (PK)
  • invoice_id (FK)
  • order_id (FK)

Требуется ли необходимость в таблице invoice_order?

Я мог бы вместо этого добавить поле invoice_id (FK) в order_table,«Порядок. Invoice_id» будет обновлен, когда я добавлю строку в таблицу счетов-фактур.

Ответы [ 4 ]

3 голосов
/ 09 июня 2011

Вам нужна таблица invoice_order, только если:

  • В заказе может быть один или несколько счетов

И

  • Счет может быть связан с одним или несколькими заказами

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

Обновление

Кстати, хорошо, что у вас есть cost и item_name в порядке вещей, что новичкам кажется странным. Вы должны иметь их по историческим причинам и сделать возможным перепечатывать заказ с теми же данными, скажем, через 3 года, когда название товара могло быть немного изменено, а стоимость наверняка была обновлена.

1 голос
/ 09 июня 2011

Вам нужна таблица ссылок.Заказ может быть в нескольких счетах (если они не оплатили его!), И счет может содержать много заказов.В таблице ссылок, хотя я не буду беспокоиться о • invoice_order_id (PK).PK является комбинацией двух полей FK.Это гарантирует уникальность, и поскольку у вас вряд ли будет дочерняя таблица таблицы ссылок, вы действительно ничего не получите, добавив в нее суррогатный ключ.Даже если бы у вас была разница в производительности между объединениями в двух индексированных целочисленных полях, один из них, вероятно, был бы незначительным.

1 голос
/ 09 июня 2011

Большинство счетов будут иметь:

  • идентификатор клиента
  • Торговый представитель ID
  • Способ оплаты
  • Доставка по адресу
  • Адрес для выставления счета
  • CheckBox: отправляется так же, как выставление счета
  • и т.д.
0 голосов
/ 09 июня 2011

Обобщение !! Вы должны рассмотреть возможность сокращения этого до 2 таблиц: Documents и DocDetails. Просто добавьте поле DocType в таблицу «Документы», чтобы отличать заказы от счетов-фактур.
Если вам нужно отследить отставание, добавьте поле ссылки в ваш DocDetails.
Когда вы добавляете строку детализации заказа, присвойте полю Link значение таблицы PK (counter).
При добавлении строки детализации счета укажите для ссылки то же значение, что и для связанной детали заказа.

Кстати, не видел ни одного CustomerId в ваших таблицах!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...