如何使用以下属性生成长度不超过12个字符的唯一键:姓名、父亲姓名、母亲姓名、出生日期、出生地点。
提前感谢:)
发布于 2009-11-19 01:06:45
即使是这些列可能也不足以成为唯一的,而且由于一个人的名字可以改变(随着婚姻、选择等),我通常不会使用它来生成唯一的键。
我通常使用代理,比如自动编号/标识/序列或UUID/GUID,这取决于需求。
发布于 2009-11-19 01:21:20
唯一标识符的主要且事实上唯一的属性是它是唯一的(在考虑的范围内,可以是表、模式或全局)。将任何“真实世界”值合并到这样的id中是没有意义的。
如果您确定这些属性唯一地描述了一个人,那么您应该在您提到的属性上创建一个唯一的约束。这些属性的组合形成了表的“自然键”。
唯一ID是一个“代理键”,这是一个方便的句柄,使您不必在与该表的连接中指定自然键的所有列。获取唯一ID的方式取决于数据库。例如,在Oracle中,您可以将序列与插入触发器结合使用。
自然键上的唯一约束将防止您插入同一个person两次,但您确实应该首先检查该表,看看该person是否已经存在。如果是,请使用从那时起已经分配的ID。当然,您可以将它组合到一个过程中,在这个过程中,您为它提供字段,它将返回ID,隐藏查找它的行为,或者如果它是新的,则创建它,然后返回新的ID。
发布于 2009-11-19 01:03:08
这不是您所描述的键,而是您希望使用的一小段结构化数据,而不是键。也许更有帮助的是:
--您希望能够从给定的12个字符的密钥中恢复这些属性吗?
或
--在给定这些属性的情况下,您是否愿意只生成一个键?
https://stackoverflow.com/questions/1757463
复制相似问题