使用国民身份证作为主键

时间:2011-12-22 08:27:25

标签: postgresql database-design primary-key rdbms natural-key

我正在开发一个使用国家ID的系统“识别记录”是否最好在所有表中嵌入nat_id以使查询更容易?这样做有什么缺点?我只想在这里得到人们的意见,因为我可能会错过重要的事情。

2 个答案:

答案 0 :(得分:8)

根据@Oded的建议,可能存在法律和隐私问题(这在很大程度上取决于您所在的国家/地区)。

隐私问题的一个例子是,在某些国家/地区,该人的出生日期 - 以及某些国家/地区的性别 - 是其国家身份证号码的一部分。将其复制到模式中的每个表中可能不是一个好主意,因为这将使得很难限制对此信息的访问。

最重要的是,有几个纯技术问题:

  1. 并非每个国家/地区都有国家身份识别系统,而且每个国家都使用不同的格式。当您需要适应新格式时,您真的想要更改架构中的每个表吗?
  2. 我可以想象一个人可能没有国民身份证的情况(访客?庇护寻求者?无国籍人?)你打算如何将他们输入数据库?
  3. 在某些国家/地区,与国民身份证最接近的是身份证上的号码,该号码会在重新颁发身份证时发生变化。换句话说,同一个人在其生命的不同阶段可能会有不同的身份证号码。
  4. 我会使用代理主键,并将国家ID存储为属性。

答案 1 :(得分:2)

国民身份证是否能成为好钥匙在很大程度上取决于您的要求。是否要求将国民身份证记录为业务流程的一部分,以及用户/员工/以这种方式唯一识别的人员?您是否有权向人们询问此信息?他们是否有义务向您披露他们的国民身份证?如果对所有这些都是肯定的话,那么将它作为数据库中的密钥可能是有意义的。

确保您了解您需要支持的国家身份证的任何标准。例如。长度,数据类型,任何校验位以及是否存在可能与预期规则不匹配的遗留代码或其他特殊用途代码。

如果存在隐私问题且您不需要从数据库中检索实际ID,则可以存储国家ID的安全哈希值。