2.4 糟糕的标识方法
以前我总想成为别人,但现在我意识到我更应该成为特别的自己。
―Lily Tomlin
可怜的标识符名字。一种显而易见的情况是,名字不唯一,例如姓氏Smith、Zhang、Garica、Lo,名字John、Susan);另一个情况是,一个名字有很多表示方法,可能的原因有很多,以下列出部分:
1.姓氏的修改,如du Bois、DuBois、Du Bois、Dubois、Laplace、La Place、van de Wilde、Van DeWilde等。
2.口音,如重音符、变音符、停顿、腭化辅音、连音符、双元音、元音变音、音调等。
3.特殊字符,如妗?
4.一个人可能有多个中间名,这些可能不会被记录下来。例如,平时,我们总会使用中间名来代替全名,而法律文件中仍保留我们的全名写法。
5.一个人名有拉丁语等其他版本,例如Carl Linnaeus、Carl von Linne、Carolus Linnaeus、Carolus a Linne。
6.复姓和中间名混淆。例如,Jean-Jacques Rousseau还是Jean Jacques Rousseau, Louis-Victor-Pierre-Raymond、7th duc de Broglie、Louis Victor Pierre Raymond Seventh duc deBroglie搞不清姓和中间名。
7.文化差异导致名字顺序被打乱。
8.改名,如别名、笔名、一时兴起的变化,而这些都是合法的。
除了上面这些显而易见的后果,利用名称作为标识符还有一些潜在问题。例如,在名字中使用重音字符会破坏拼写的正确性和字母顺序。一个包含变音字符的名字放到哪里?假装看不到变音并且把这个名字按字母顺序放到普通字符里?还是要基于ASCII数字分配方法让变音字母不会出现在按字母顺序排列的普通字母组成的单词列表中?同样的问题也适用于其他特殊的字符。
姓氏编辑也存在类似问题。姓氏de Broglie是按D、d还是按B排序?如果按B排序,要是写成deBroglie又该怎么处理?
遇到这类问题,不可能完全按照字母顺序排列名字列表。这意味着按照字母排序设计的搜索程序容易出错。
我曾与众多智能化领域的专业人才进行谈话,他们需要为人分配标识符。在每次谈话时,他们都好像觉得有必要解释,虽然人名不能作为一个标识符,但人名+出生日期这种组合基本上可以满足标识符唯一性的需要。有时候,他们又会说,人名+出生日期+社会安全号码的组合提供了完美的标识符,因为没有两个人有相同的人名、相同的出生日期和相同的社会安全号码。这种说法简直可以称得上愚蠢,完全忽略了标识的意义所在。正如我们将看到的,就前面所言,为个人或任意数据对象分配唯一的标识符是相对容易的事情,但对于数据管理者而言,他们关心的是如何确保分配到每个人的标识符是唯一的。
让我们来看看,以名字+出生日期的组合来创建标识时会发生什么。而名字+出生日期+社会安全号码的组合会在稍后给出。
例如,Mary Jessica Meagher,出生于1912年7月7日,她决定在10个银行里开个人账户。一些银行有申请表,她也准确地填完了。剩下的银行通过柜员问她一些问题,并直接将回答转录到计算机终端,就这样登记她的账户。该女士无法看到电脑屏幕,无法检查各条目内容的准确性。
以下是她的名字+出生日期可能的写法:
- Marie Jessica Meagher,June 7,1912(柜员把Mary错写成Marie)。
- Mary J. Meagher,June 7,1912(申请表需要写中间名全称,而不是名字全称)。
- Mary Jessica Magher,June 7,1912(柜员拼错了姓氏)。
- Mary Jessica Meagher,Jan 7,1912(申请表要求出生月用三个字母简写,Jun被转换成了Jan)。
- Mary Jessica Meagher,6/7/2012(申请表只留出了两格填写年份,银行注册奇迹般地让女士一个世纪后又复活了)。
- Mary Jessica Meagher, 7/6/12(按照欧洲常用顺序,申请表询问了出生的日、月、年)。
- Mary Jessica Meagher,June 1,1912(申请表里的7被看成了1)。
- Mary Jessie Meagher,June 7,1912(中间名的非正式写法让该女士听着像个孩子)。
- Mary Jessie Meagher,June 7,1912(柜员把名字看做一个男性的写法)。
- Marie Jesse Mahrer,1/1/12(柜员点击速度过快导致字母部分缺失,而计算机自动给添加了其他错误的字母)。
这样,Mary Jessica Meagher在10个银行里拥有了10个不同的标识符。即便Mary重新注册登记,结果可能还是一样。
如果加上社会安全号码,情况会更复杂。人的社会安全号码绝不是唯一的。我们很少会携带社会保障卡原件,我们的社会安全号码也会因记忆错误而写错(“你的意思是我这些年都记错了?”),数据录入错误(“字符transpositoins”,我的意思是“字符transpositions”,这是很常见的),或者意图欺骗(“我不想给那些人我真实的安全号”),或者完全的乱写(“我不记得了,就随便写了”),又或者仿照(“我没有医疗保险,所以我会用我朋友的社会安全号码”)。通过要求患者携带社保卡来减少错误并没有起多大作用。
迫使个人提供社会安全号码的做法的合法性令人怀疑。社会安全号码原本是用于在社会保障体系里验证一个人的身份,最近,还被用来追踪税务交易(包括银行账户、发放的薪金)。社会安全号码在其他地方的使用并不受法律保护。(美国)社会保障法(Section 208 of Title 42 U.S. Code 408)明确禁止他人或机构强迫个人提供他们的社会安全号码。
考虑到社会安全号码在大多数事务中的不可靠性,以及要求个人泄露自己的社会安全号码的脆弱合法性,审慎的医疗设计标识系统必须限制使用这些数字。将姓名和出生日期与社会安全号码结合的思想无形中使得标识系统将违反严格的一对一个的客户规则。