SQL发票自动递增的前瞻计划

时间:2016-05-23 03:31:12

标签: sql innodb auto-increment

我正在为我的雇主开发一个数据库系统,其中一部分涉及创建发票。我一直在考虑我的桌子上的自动增量ID,以及我需要在多大程度上考虑业务的增长。我正在使用InnoDB,因为系统将非常全面,许多记录将得到更新。

简体中,这是我目前所拥有的:

  

办事处 (业务的办公室/商店。目前为2.)
  office_id(PK)INT,AI,UN

     

发票
  invoice_no(PK)INT,AI,UN
  office_id(FK)(发票来自。)

     

产品
  product_id(PK)INT,AI,UN

     

InvoiceLine (将产品绑定到发票上以生成行。)
  invoice_line_id(PK)INT,AI,UN
  invoice_no(FK)
  product_id(FK)
  量

首先,虽然我可能永远不会用完发票号码,但我想知道是否有更好的方法可以解决这个问题,只是因为企业确实会出现意外的办公扩张和销售增长。一家拥有超过50家商店的大公司将如何应对这一问题?每个商店可能都有自己的一套从1开始的发票号码吗?

这是我考虑过的......

选项1 - 我应该使invoice_no大于标准的10精度吗?无论遇到什么困难,如果我们看到当前限制不足,或者这是不可能的/高度成问题的话,可以在部署后进行更改吗?

选项2 - 请原谅我的无知,但是有可能/明智地建立一个由具有不同引擎类型的表组成的数据库吗?我的理解是,使用MyISAM,发票表可以具有office_id和invoice_no的复合键,其中自动递增数字将针对每个办公室单独增加。这是真的可行吗?

选项3 - 我可以在插入新办公室时创建新表吗?创建表InvoiceX& InvoiceXLine,其中X是office_id?

有没有更好,更简单的方法,我只是没想到?

其次,如果业务扩展并且我们平均每张发票超过30行,可以想象invoice_line_ids将在长期内耗尽。所以我可能需要一个类似的解决方案,除了上面的选项3(为每个invoice_no创建一个InvoiceLineX表)在这种情况下是完全不切实际的。

我可以简单地将InvoiceLine表的主键设为invoice_no和product_id的组合吗?

1 个答案:

答案 0 :(得分:0)

这是一个商业问题。直到你知道他们打算如何发送发票,你为什么猜?也就是说,如果我必须继续关注未来,我会保留一些单独的ID。

  • 一个主要的,神奇的数字,它只是您需要的连续唯一ID(可能是INT,可能更大,具体取决于您的业务规模),
  • "发票发起人"列是生成它的商店(或其他),
  • 另一栏"发票处理实体ID"是在其整个生命周期中发布/需要处理它的商店/帐户办公室。

如果您拥有更大的灵活性,例如处理该状态下所有发票的州中的商店,则会给您更多的灵活性。当然这是猜测!

所有这一切的重点在于,您已收集了大量本身可能有用的数据,然后您的实际发票编号将是这些内容的某种组合。

利用您的想象力(或业务分析师)了解您可能想要保留的其他内容。使用

无法帮助您处理数据库类型。

每个位置/发票行都有一个表格。这会耗费大量时间。

附注 - 您的ID总是会有差距。它们是不可避免的,所以尽量不要分心,坚持无差距。你无法达到任何性能水平,你可能甚至不需要它。

如果您认为您可能需要无间隙或按位置细分,请在每天结束时分配办公室/商店/任何特定号码的批处理作业。这样,您可以使用基础ID中的基本序列,根据需要分配一些不错的数字。

我认为简短的回答是或多或少地与你所拥有的一致,除非它被证明是错误的。你所有的建议都是针对你不知道答案或不会发生的问题。