我正在为我的雇主开发一个数据库系统,其中一部分涉及创建发票。我一直在考虑我的桌子上的自动增量ID,以及我需要在多大程度上考虑业务的增长。我正在使用InnoDB,因为系统将非常全面,许多记录将得到更新。
简体中,这是我目前所拥有的:
办事处 (业务的办公室/商店。目前为2.)
office_id(PK)INT,AI,UN发票
invoice_no(PK)INT,AI,UN
office_id(FK)(发票来自。)产品
product_id(PK)INT,AI,UNInvoiceLine (将产品绑定到发票上以生成行。)
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的组合吗?
答案 0 :(得分:0)
这是一个商业问题。直到你知道他们打算如何发送发票,你为什么猜?也就是说,如果我必须继续关注未来,我会保留一些单独的ID。
如果您拥有更大的灵活性,例如处理该状态下所有发票的州中的商店,则会给您更多的灵活性。当然这是猜测!
所有这一切的重点在于,您已收集了大量本身可能有用的数据,然后您的实际发票编号将是这些内容的某种组合。
利用您的想象力(或业务分析师)了解您可能想要保留的其他内容。使用
无法帮助您处理数据库类型。
不每个位置/发票行都有一个表格。这会耗费大量时间。
附注 - 您的ID总是会有差距。它们是不可避免的,所以尽量不要分心,坚持无差距。你无法达到任何性能水平,你可能甚至不需要它。
如果您认为您可能需要无间隙或按位置细分,请在每天结束时分配办公室/商店/任何特定号码的批处理作业。这样,您可以使用基础ID中的基本序列,根据需要分配一些不错的数字。
我认为简短的回答是或多或少地与你所拥有的一致,除非它被证明是错误的。你所有的建议都是针对你不知道答案或不会发生的问题。