Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用官方身份证id或生成的id';来自MongoDB的用于识别用户的信息?_Mongodb_Database Schema - Fatal编程技术网

使用官方身份证id或生成的id';来自MongoDB的用于识别用户的信息?

使用官方身份证id或生成的id';来自MongoDB的用于识别用户的信息?,mongodb,database-schema,Mongodb,Database Schema,我正在为一个简单的MongoDB数据库设计模式,其中将有一个客户集合 识别客户的自然方式是使用其官方身份证id(6个号码和一个字母,每个人在该国都是唯一的)。另一种方法是让MongoDB选择_id字段值,并将卡id用作另一个字段 任何关于选择一个带有6个数字和一个字母的字符串作为_id,或选择由Mongo创建的和ObjectId的优点/缺点的建议?呃,这是旧的“与非代理(自然)键”讨论。这是一场有点激烈的战争 我认为代理键(即objectid)是一个不错的选择。对“自然”钥匙(官方身份证)的主要

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

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

任何关于选择一个带有6个数字和一个字母的字符串作为_id,或选择由Mongo创建的和ObjectId的优点/缺点的建议?

呃,这是旧的“与非代理(自然)键”讨论。这是一场有点激烈的战争

我认为代理键(即
objectid
)是一个不错的选择。对“自然”钥匙(官方身份证)的主要异议如下:

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

  • ObjectId
    有许多属性:它带有时间戳,并且单调。自然键通常不能保证这一点

回答得很好,@mnemosyn非常感谢!