#php #mysql #database #database-design #data-structures
#php #mysql #База данных #база данных-дизайн #структуры данных
Вопрос:
Мне нужен способ создавать счет-фактуру из нескольких заказов каждый месяц?
В таблице tbl_order у меня есть список заказов от клиента.
tbl_order table
OrderID (PK)
ShopID (FK)
CustomerID (FK)
Statu
Total
OrderDate
Допустим, я хочу создать счет-фактуру за период: с 1 по 31 мая с tbl_order.ShopID = 2
(Оттуда я могу отправить счет-фактуру в магазин / компанию о комиссионных, которые они мне должны, и т.д. Когда я получаю с них комиссионные — мне нужен способ обновить статус счета)
В счете-фактуре должен быть номер счета-фактуры и дата счета-фактуры, в счете-фактуре будет несколько идентификаторов заказа.
Нужно ли мне создавать таблицу счетов, если да, то каким должен быть дизайн таблицы?
Ответ №1:
Вам понадобятся 2 таблицы.
Таблица счетов.
InvoiceID (PK)
InvoiceDate
InvoicePrice
InvoiceBtw
ect. etc.
Таблица ссылок между заказами и счетами-фактурами.
Таким образом, вы можете отслеживать, какой заказ обрабатывается в каком счете.
InvoiceID (FK to tbl_invoices.InvoiceID)
OrderID (FK to tbl_orders.OrderID)
Комментарии:
1. В таблице счетов должно быть поле OrderID (K)? Значит, в таблице счетов-фактур может быть несколько строк OrderID с одинаковым номером счета-фактуры?
2. В таблице счетов-фактур не должно быть информации о заказе, поскольку счет-фактура имеет отношение «один к нескольким» к заказам. Для этого используется tbl_invoiceorders, который является второй таблицей.
3. @user622378:
OrderId
Во 2-й таблице для этого достаточно. Также нет необходимости иметь его вInvoice
таблице.4. Нет, это не так, информация уже доступна в таблице tbl_invoiceorders , поэтому сохранение ее также в таблице заказов приведет к дублированию данных в вашей базе данных.
5. Да — это был бы отличный выбор. Например, вы могли бы генерировать счета за последние месяцы в первый понедельник каждого месяца.
Ответ №2:
Да, вам потребуется таблица счетов.
Структура может быть:
InvId (Autonumber)
InvNumber (varchar (10))
InvOrderId (int(11))
InvStatus (int(11))
InvDateCreated (DateTime)
InvDateModified (DateTime)
Надеюсь, это поможет
Комментарии:
1. Спасибо. Так, например, InvNumber будет одним и тем же номером с несколькими строками с разным номером InvOrderId? (1, 123, 4, 0, ДАТА, DATE) (2, 123, 5, 0, ДАТА, DATE) (3, 123, 6, 0, ДАТА, DATE)
2. Да, но не чувствуйте себя ограниченным только цифрами в накладной.
3. Я не вижу, где
InvOrderId
это могло бы помочь. Счет-фактура будет ссылаться на несколько заказов. Что можно было бы добавить, так этоYear-Month
(где2011-05
будет храниться) илиReferenceDateStart
иReferencesDateEnd
где будут храниться2011-05-01
и2011-05-31
.4. Также потребуется поле
ShopId
, чтобы мы знали, какому магазину был выставлен счет.5. Допустим, счет оплачен (или завершен), поэтому я должен обновлять каждую строку InvStatus одним и тем же номером InvNumber?