我们正在开发一个尚不为用户所用的Web应用程序。我的老板注意到,即使表中只有不到100条记录,新创建的记录的ID也超过10000。她认为Web界面出于某种原因会创建比实际记录多100倍的临时记录(并删除它们),并且这可能导致我们在发布后的几个月内超出范围。
我不认为她对身份证通货膨胀的原因是正确的(可以回答这个问题的同事正在休假,所以我们不确定),但是我们假设她是。她说,她不想使用bigint列,并且希望我们停止自动递增ID列,并编写选择第一个“未使用”整数并将其用作ID的服务器端代码。
我是计算机科学专业的研究生,几乎没有实践经验,担任初级开发人员。她在管理我们组织的所有数据库以及设计大多数数据库方面具有多年的经验。我认为她在这种情况下是不正确的,bigint ID不用担心,而且模仿DBMS功能的味道像是反模式。但是我不相信我的判断。
支持和反对每个立场的理由是什么?如果我们使用bigint会发生什么不好的事情,以及重新发明轮子自动递增功能的危险是什么?有没有比任何一个都更好的第三种解决方案?她为什么要避免身份证面值膨胀的原因是什么?我也有兴趣了解实用的原因-也许bigint ID在理论上起作用,但在实践中引起头痛?
该应用程序不应处理大量数据。我怀疑在未来几年内是否会达到10,000条实际记录。
如果有什么不同,我们正在使用Microsoft SQL Server。该应用程序用C#编写,并使用Linq进行SQL。
更新资料
谢谢,我发现现有的答案和评论很有趣。但恐怕您误解了我的问题,因此它们包含了我想知道的内容。
我并不真正担心ID高的真正原因。如果我们自己找不到它,我可以问一个不同的问题。我感兴趣的是了解这种情况下的决策过程。为此,请假定应用程序每天将写入1000条记录,然后删除其中的9999条。我几乎可以肯定不是这种情况,但这就是我老板在提出要求时所坚信的。因此,在这些假设的情况下,使用bigint或编写自己的将分配ID的代码(以重新使用已删除记录的ID以确保没有间隙的方式)的利弊是什么?
出于实际原因,我强烈怀疑这是因为我们曾经编写了从另一个数据库导入数据的代码,作为可以在以后进行一定程度迁移的概念证明。我认为我的同事实际上在导入过程中创建了数千条记录,后来又删除了它们。我必须确认是否确实如此,但如果确实如此,则甚至无需采取任何措施。