【发布时间】:2017-03-28 19:49:16
【问题描述】:
我正在设计一个开票模式,并试图确定执行以下要求的最佳做法。有多家公司有多个分支机构。每个分支机构都希望拥有独立于其他分支机构(和公司)的自动增量编号。除此之外,还有不同类别的发票。我已经建立了如下表结构
tbl_invoices
|company_id|branch_id|class_id|invoice_id|...其他发票数据列...|
tbl_branches
|branch_id|branch_prefix|
tbl_classes
|class_id|class_prefix|
由于 FK 和事务,我强烈支持 INNODB。但是,我有一个自动增量的问题(MyISAM 会很容易地自动增加多列主键)。我遇到的另一个问题是,当我提取发票数据时,我必须一直连接多个表,因为我需要连接不同前缀的完整 invoice_id。我还遇到了前缀字符串将来更改时会发生什么的问题。过去开具的发票也更改其前缀可能是没有根据的。我在想我应该为 tbl_invoices 添加一个额外的前缀列,它将在插入时存储完整的 concat 前缀。我不太确定这是否是正确的做法?我考虑将整个 invoice_id 以完整的 concat 形式存储在列中,但我无法从 INV-00001 强制 INV-0001 的唯一性。
这仍然意味着我在自动增量方面有困难。
【问题讨论】:
-
@tadman 你显然从来不需要在 OLAP 应用程序上工作 :)
-
这些是具有任意限制的任意“数字”——我想说,根本不要将它们用作主要行标识符。让正常的自动增量 ID 完成这项工作;并使用自定义逻辑(在数据库外部或通过存储过程嵌入)来生成满足所有要求的正确发票编号,并将它们单独存储,以将它们与自动递增的主订单 ID 连接起来。
-
@tadman 在某些情况下您不需要事务、mvcc 和所有这些高级事务功能。
-
@tadman 那么为什么你开始对myisam完全不相关的咆哮?