使用国民身份证作为主键

Ran*_*Joe 2 postgresql rdbms database-design primary-key natural-key

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

NPE*_*NPE 8

正如@Oded所建议的,可能存在法律和隐私影响(这在很大程度上取决于您所在的国家/地区).

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

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

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

我会使用代理主键,并将国家ID存储为属性.