自动编号主键的更好替代方案

时间:2010-03-15 05:06:50

标签: ms-access database-design primary-key

我正在寻找一个比自动编号数据类型更好的主键,即因为它只限于一个长整数,当我真的需要该字段来反映一个永远不会重复的数字或文本字符串时,如何从表中添加或删除许多记录。问题是我不确定如何实现诸如将当前日期和时间转换为十六进制字符串并将其用作我可以用作主键的唯一字段。

我是否因为空间不足而过于偏执?

- 2010年12月16日编辑@ 1237小时 -

我有一个人,当时我认为这是一个很好的参考Access相关的问题告诉我复制ID只是一个项目被复制的次数的计数器...因此我从未进一步探讨它。在回复数量之后,我已经上调了,并接受了答案。我想我只是有一个愚蠢的新手Accesss开发者时刻。说真的,再次感谢所有回复的人!

5 个答案:

答案 0 :(得分:1)

为什么你认为你的空间不足?也许你没有意识到64位整数有多大。它允许大约100亿条记录。如果您每秒创建100条记录,则会占用整数five billion years

答案 1 :(得分:1)

GUID。 它们非常独特

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

你没有提到你的编程语言。 C#就像是

String myKey = Guid.NewGuid().toString();

答案 2 :(得分:1)

为什么限制为长整数?指定自动编号字段时,可以告诉它使用Replication ID而不是Long Integer,它将是一个唯一的128位值,称为GUID。

虽然您可以使用当前日期和时间作为主键,但这里的原因不是:

当前的日期和时间并不像您想象的那样独特。如果您非常快速地创建记录,最终可能会在时钟滴答之间插入两个记录,从而导致两者同时结束。或者您的计算机时钟可能会向后重置。或者DST可以结束,如果你存储当地时间,你最终会重复一次。

答案 3 :(得分:0)

根据约翰的回答,你不太可能用完长整数。但如果您更喜欢独特的字符串,最简单的解决方案就是UUID。它不需要输入,但产生两个相同的UUID的几率可以忽略不计。

例如,在Python中:

import uuid
uuid.uuid4()

大多数语言都提供UUID功能:http://en.wikipedia.org/wiki/Uuid

答案 4 :(得分:0)

一个非常简单的解决方案是使用带有“随机”选项而不是“增量”的自动编号。我在某处读到,由于这些数字不是连续的,因此在同时从多个客户端添加新记录时,它还可以提高并发性。