2011-12-22 104 views
2

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

+5

有法律影响以及隐私问题。 – Oded 2011-12-22 08:28:33

+1

您是否知道在美国有重复SSN的情况?除此之外,它不是*非常神奇的独特编号... – 2011-12-22 08:42:18

+0

@Oded这将是一个在东南亚国家的电子政务应用程序,这种国家ID的使用非常普遍。 – 2011-12-22 11:34:13

回答

8

正如@Oded所暗示的那样,可能存在法律和隐私问题(这很大程度上取决于您的国家/地区)。

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

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

  1. 并非所有国家都拥有国民身份证制度,而那些做的,使用不同的格式。当您需要适应新格式时,您是否真的想要更改架构中的每个表?
  2. 我可以想象一个人可能没有国民身份证的情况(一个访客?寻求庇护者?一个无国籍人?)你打算如何将它们输入数据库?
  3. 在某些国家,与国民身份证最接近的是身份证上的身份证号码,并且身份证重新签发时该身份证号码会发生变化。换句话说,同一个人在他们的生活中可能会有不同的身份证号码。

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

+0

代理人如何让你识别人?它不会,也不会取代像国家身份证号码这样的自然钥匙。 – sqlvogel 2011-12-22 09:25:51

+0

@aix申请将严格限于公民。虽然不太可能,但格式的改变是我们将讨论的问题。我现在倾向于使用代理键,但我喜欢使用国家ID直接查询的想法。 – 2011-12-22 11:47:50

+0

@dportas我不得不承认我从不使用自然钥匙,因为我很少有机会使用它们。这可能就是这种情况。但我需要确定第一。 – 2011-12-22 11:52:57

2

国家身份证是否会成为一把好钥匙很大程度上取决于您的要求。是否需要将国家ID作为业务流程的一部分进行记录,以及用户/员工/谁是以这种方式唯一标识的?您是否有权要求人们提供这些信息?他们有义务向你透露他们的国民身份证吗?如果对所有这些都是肯定的,那么将它作为数据库中的关键字可能是很有意义的。

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

如果存在隐私问题并且您不需要从数据库中检索实际ID,那么您可以存储国家ID的安全散列。

+1

它是要求的一部分,因为这是一个电子政务应用程序,并且该国有许多类似的大型在线应用程序。我喜欢安全的哈希想法谢谢。 – 2011-12-22 11:58:29