用人的身份证作为主键实用吗?
Is it practical to use the person's ID card as a primary key?
我正在做一个项目,我通常使用人的ID作为识别人的主键。但是现在我正在做一些比我一直在做的事情更正式和更严肃的事情……(学校数据库)使用这个人的身份证是一种很好的做法吗?s/student另一个字段 (ID) auto generated/sequence 作为 PK。
我负责类似的学生数据库,我们使用学生 ID 作为 PK。
这对我们很有帮助,因为学生知道他们的 ID,如果他们有任何问题,他们可以来找我们并引用他们的 ID 来帮助我们解决问题。这肯定比通过 John Smiths 的负载更容易。
我发现的不利方面是我们确实将数据导出到 excel 等程序,并且很多 ID 都有前导零,如果您不小心,这些零将被删除。
这完全取决于您,但我认为我会使用它们。
这是个坏主意,原因很简单:安全。
您最好将数据库设计为所有实体都具有内部 ID。这个人的 id 将成为记录的一个属性,而不是主键。例如,这允许您加密 id(和其他敏感信息)。如果有人拿到了一些数据的打印件,您不必担心他们看到的是个人信息。
在美国,这种设计得益于这样一个事实,即社会安全号码——我们拥有的最接近国民身份证的东西——被专门设计为不是国民身份证号码。撇开欺诈问题不谈,总有一天 运行 将有大约 10 亿个号码被淘汰。
我正在做一个项目,我通常使用人的ID作为识别人的主键。但是现在我正在做一些比我一直在做的事情更正式和更严肃的事情……(学校数据库)使用这个人的身份证是一种很好的做法吗?s/student另一个字段 (ID) auto generated/sequence 作为 PK。
我负责类似的学生数据库,我们使用学生 ID 作为 PK。
这对我们很有帮助,因为学生知道他们的 ID,如果他们有任何问题,他们可以来找我们并引用他们的 ID 来帮助我们解决问题。这肯定比通过 John Smiths 的负载更容易。
我发现的不利方面是我们确实将数据导出到 excel 等程序,并且很多 ID 都有前导零,如果您不小心,这些零将被删除。
这完全取决于您,但我认为我会使用它们。
这是个坏主意,原因很简单:安全。
您最好将数据库设计为所有实体都具有内部 ID。这个人的 id 将成为记录的一个属性,而不是主键。例如,这允许您加密 id(和其他敏感信息)。如果有人拿到了一些数据的打印件,您不必担心他们看到的是个人信息。
在美国,这种设计得益于这样一个事实,即社会安全号码——我们拥有的最接近国民身份证的东西——被专门设计为不是国民身份证号码。撇开欺诈问题不谈,总有一天 运行 将有大约 10 亿个号码被淘汰。