繁体   English   中英

发票表设计

[英]Invoice tables Design

我想知道如何设计发票表。

一张发票包括来自order表的许多订单。

此发票表是否设计正确?

命令

  • order_id (PK)
  • 用户 ID (FK)
  • 总消耗
  • 订购日期
  • 地位

订单项

  • order_item_id (PK)
  • order_id (FK)
  • 项目名
  • 成本

发票表

  • invoice_id (PK)
  • 发票号码
  • 发票日期
  • period_start_date
  • period_end_date
  • 地位

invoice_order (包含许多订单的发票)

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

invoice_order 表是必需的吗?

我可以在 order_table 中添加 invoice_id (FK) 字段。 当我在发票表中添加一行时,“order.invoice_id”将被更新。

在以下情况下,您只需要invoice_order表:

  • 一个订单可以有一张或多张发票

  • 发票可以链接到一个或多个订单

根据您在问题末尾的建议,就是这样。 您不应该只拥有invoice_id并在收到新发票时更新它,因为您将失去订单和前一张发票之间的链接。

更新

顺便说一句,在订单项中有costitem_name是件好事,这对初学者来说很奇怪。 由于历史原因,您必须拥有这些,并且可以使用相同的数据重新打印订单,例如,3 年后,当商品的名称可能略有更改并且成本肯定已经更新时。

大多数发票将包含:

  • 客户ID
  • 销售代表 ID
  • 付款方式
  • 邮寄到地址
  • 帐单地址
  • CheckBox:Shipto 与计费相同
  • 等等

您需要链接表。 一个订单可以是多张发票(如果他们没有付款的话),一张发票可以包含许多订单。 在链接表中,虽然我不会打扰 •invoice_order_id (PK)。 PK 是两个 FK 字段的组合,这保证了唯一性,因为您不太可能拥有链接表的子表。 通过向其添加代理键,您实际上一无所获。 即使你做了两个索引 int 字段之间的性能差异,副一个也可能可以忽略不计。

概括:。 您应该考虑将其减少到 2 个表格,即 Documents 和 DocDetails。 只需在 Documents 表中添加一个 DocType 字段,以区分 Orders 和 Invoices。
如果您需要跟踪延期交货,请将链接字段添加到您的 DocDetails。
添加订单明细行时,为链接字段提供表 PK(计数器)的值。
添加发票明细行时,为链接提供与相关订单明细相同的值。

顺便说一句,在您的表格中没有看到任何 CustomerId !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM