使用MongoDB中的官方身份证ID或生成的身份证来识别用户?

时间:2014-04-23 17:05:02

标签: mongodb database-schema

我正在设计一个简单的MongoDB数据库的模式,其中将有一个供客户使用的集合。

识别客户的自然方式将使用他们的官方身份证ID(6个数字和一个字母,对于该国的每个人都是唯一的)。另一种方法是让MongoDB选择_id字段值并将卡ID用作另一个字段。

选择一个包含6个数字和一个字母为_id的字符串,或选择Mongo创建的ObjectId的优缺点是什么建议?

1 个答案:

答案 0 :(得分:4)

呃,这是旧的“surrogate key与非代理(自然)关键”讨论。这是一场火焰战......

我认为代理键(即ObjectIds)是可行的方法。对“自然”键(官方身份证号码)的主要反对意见是:

  • 您无法验证它们。如果用户输入的号码错误(但格式有效),您会怎么做?由于无法更改主键,因此您必须重新插入新对象并修复指向该用户的所有链接。难看。
  • 你无法控制它们。如果政府决定重新发布号码,那么您将失去运气
  • 他们的格式会随着时间的推移而改变,这对MongoDB来说不是一个大问题,但可能是代码/ API中的问题
  • 自然键可能向外部公开信息,对于系统的某些/多个用户来说,这些信息将保密。假设亚马逊将您的身份证号码用作您帐户的公共标识符。

...以及特定于MongoDB的参数

  • ObjectId有许多属性:带有时间戳,而是单调的。自然键通常无法做出这样的保证