唯一ID生成

时间:2009-11-18 16:57:59

标签: database oracle unique-key

如何使用以下属性生成长度最多为12个字符的唯一键: 名字,父亲的名字,母亲的名字,出生日期,出生地。

提前致谢:)

5 个答案:

答案 0 :(得分:8)

唯一标识符的主要且实际上唯一的属性是它是唯一的(在考虑范围内,是表,模式或全局)。将任何“真实世界”的值纳入这样的id中是没有意义的。

如果您确定这些属性可以唯一地描述一个人,那么您应该对您提到的属性创建一个唯一约束。这种属性组合构成了表格的“自然关键”。

唯一ID是一个“代理键”,一个方便的句柄,使您不必在与该表的连接中指定自然键的所有列。如何获取唯一ID取决于数据库。例如,在Oracle中,您可以将序列与插入触发器结合使用。

对自然键的唯一约束将阻止您将同一个人插入两次,但您应该首先检查该表以查看该人是否已存在。如果是,请使用已从该点分配的ID。当然,您可以将此组合到一个程序中,在该程序中为其提供字段,它将返回ID,隐藏查找的行为,或者如果是新的则创建它,然后返回新ID。

答案 1 :(得分:6)

即使这些专栏也可能不够独特,而且由于一个人的名字可以改变(婚姻,选择等),我通常不会用它来生成一个唯一的密钥。

我通常使用代理,如自动编号/身份/序列或UUID / GUID,具体取决于要求。

答案 2 :(得分:4)

这不是您描述的密钥,而是您想要使用的一小段结构化数据而不是密钥。也许更有帮助:

- 您希望能够从给定的12个字符的密钥恢复这些属性吗?

- 您是否乐意仅根据这些属性生成密钥?

答案 3 :(得分:2)

如果您需要相同的属性来生成相同的键,请将所有属性连接到字符串,计算SHA1哈希并修剪前96位。

这不能保证是唯一的,但是50%哈希冲突的概率将是3.3E+14值,这已经足够了。

如果您不需要,请使用代理ID

答案 4 :(得分:1)

嗯..哪个DBMS?

无论如何,将上述字符串与UUID MySQL函数的结果连接起来, 并对结果执行CRC32功能。

然后,减去前12个字符。