使用自动编号数据库域理论

Using auto-number database fields theory

我在 "another" 编程论坛上讨论了在插入发生之前从自动递增字段获取下一个数字(有一种使用 ADOX 的方法)。顺便说一句,这是在 MS-Access 数据库中。

无论如何,讨论转向了您是否应该对发票编号、采购订单编号、提货单编号或任何其他需要唯一递增编号的内容使用自动递增字段。

我的想法是"why not"?其他人争辩说发票编号(例如)应该作为单独的 table 进行管理并随代码递增,而不是使用自动编号字段。

有人能给我一个很好的理由吗? 多年来,我一直在为这类事情使用自动编号字段,而且从来没有遇到过问题。

你的想法?

我一直避开数字auto_increment。事实证明这是有充分理由的。但本来我的理由是因为那是教授告诉我们的。

Facebook 几年前发生了一次重大违规行为——仅仅是因为他们使用 AUTO_INCREMENT 字段作为用户 ID。不用计算器就能算出,如果我的 ID 是 10320,那么很可能有人的 ID 是 10319,等等

当调试(或校对设计)具有隐式表示的数据的密钥时,要容易得多。

具有数据隐含的键可降低损坏数据(类型和用户猜测)的可能性。

隐式密钥要求开发人员将它们视为数据。我从来没有遇到过 table 使用未规范化的隐式密钥。

除了截止日期通常 运行 紧迫之外 - 没有什么理由自动递增。

通常我使用 ID 自动编号字段,所以我不需要考虑是如何生成的。

像插入和删除这样的记录集操作改变了序列跳过数字块。

当您管理 CustomerID、发票编号等时,最好完全控制它们而不是让它们受系统控制。

您可以创建一个函数,使用规则为您生成所需的数字(例如,发票可以是一个包含开票日期的函数)。

使用自动编号,您无法做到这一点。

在那之后,什么该做,什么不该做,就没有固定的规则了。 这只是你的实践和经验以及你想要拥有的自由度。

再见:-)