发票表设计

时间:2011-06-13 12:54:56

标签: mysql sql database database-design invoice

我正在为客户创建发票表。有时候,他们必须向我发送佣金,或者有时我会向他们发送费用(账户余额)。在这种情况下如何设计发票表?

我想出了这个解决方案,我不确定这是否正确或者替代方式是什么?

tbl_invoice
- invoice_id (PK)
- order_id (FK)
- invoice_date
- amount (copy the price from tbl_order.total table)
- status (Invoice Sent, Cancelled, Amount Received, Amount Sent)


tbl_Payments
 - invoice_id (FK)
 - amount_received (recieved commission fees from customer)
 - amount_sent (sent fees to customer)
 - date_received
 - date_sent

如果tbl_invoice.amount为-30.00,则表示客户会向我发送费用。

如果tbl_invoice.amount是30.00,那么我将向客户发送费用。

我需要tbl_invoice.amount字段吗?

如果你可以重新设计我的表格应该是多么好。

2 个答案:

答案 0 :(得分:2)

一些事情:

  1. 将发票状态标准化为自己的查找表,然后将状态ID放入发票表中,而不是“已发送”,“已取消”等。

  2. 绝对保留发票金额。如果您需要考虑折扣,这可能必须与tbl_order.total中的价格值不同。在任何情况下,数字数据都很便宜,如果你不需要进行任何连接,查询速度会更快。

  3. 为Payments表提供自己的ID列,并将其设为PK。

  4. 其余的看起来还不错。有一种情况是有两个表,一个用于支付传出,另一个用于支付传入。如果你真的只需要保留金额和日期信息,那么我认为你不需要让它变得更复杂。

  5. 谢谢, 克里斯。

答案 1 :(得分:0)

你应该跟踪:

  • AMOUNT_DUE
  • amount_sent
  • amount_received

这三个都很重要。在付款中,还会跟踪fee_paid。

最后,通常最好使用T-ledger会计(即借记/贷记)来处理这种事情。如果您需要担心折扣,优惠券,退款,退款等,它会使事情变得更加清洁。