你如何处理“一个人的多个名字”?

时间:2009-02-18 19:06:42

标签: data-structures

我在创建任何信息系统时遇到的最常见问题之一是人们有这么多不同的名字。名叫“比尔史密斯”的人可能选择“威尔史密斯”,“威廉史密斯”,“史密斯,威尔”等......如果说,我想编写一个应用程序将博客帖子链接到作者,我将不得不考虑所有这些名字。

我的问题是:您采取了哪些方法来保持整个应用程序中的一致数据。如何构建数据库,以便您可以引用单个标识符来查找所有这些名称?您采用哪些UI方法确保人们以一致的方式输入名称?

6 个答案:

答案 0 :(得分:17)

只要您拥有每个用户的唯一ID(他们的名字),您就可以拥有一个将名称变体映射到唯一ID的表格,然后将每个帖子与该唯一身份相关联ID。

(Table mapping names to UIDs)

Name        UID

Robert S    123456
Bob S       123456
Bert S      123456
Darren      987654
(Table with post information, including author's UID)

Title     Author  ...

Post 1    123456
Post 2    123456
Post 3    987654
(Table with author information)

UID     Preferred Name   Webpage                ...

123456  Robert Smith     http://www.robert.com
987654  Darren Jones     http://www.jones.com

答案 1 :(得分:10)

从您的用户只接受一个名称并允许他们使用“昵称”或“公共名称”可能是个好主意。这使他们可以自由拥有合法的名称,可能用于邮寄或结算,以及可在公众网站上进行互动的公众名称。

除此之外,我不认为我会允许我的用户拥有多个名称,除非我的系统需要它。如果我这样做,我会把它分成两个表:

  • 用户:

    • userid (例如:1821)
  • <强>用户名:

    • userid (例如:1821)
    • firstName (例如:Jonathan)
    • lastName (例如:Sampson)

此外,您可以在名为“usernames”的isPrimary表格中添加字段。这将是一个布尔值,它将告诉您将哪个名称视为用户的主要名称。这与维基百科存储数据/更改历史的方式类似。他们保留所有,但标记“活跃”,或在您的情况下“主要”。

答案 2 :(得分:2)

听起来我正在尝试将他们的名字用作主键或UID。这是错误的方式。你应该有一个单独的UID作为主键,然后名称可以是你想要的任何名称,你甚至可以有一个替代名称列表。

答案 3 :(得分:2)

我同意有关如何构建架构的前3篇帖子。

关于UI我会允许合法的第一,中间和姓氏的字段,这应该很少改变。

然后根据您的应用要求允许昵称。

拥有完整的法定名称也可以为计费/财务/人力资源情况派上用场。

答案 4 :(得分:2)

当您拥有多个应用程序时,会发生真正的问题,每个应用程序都有自己的用户信息架构。计费系统可能有“Will Smith”;薪资系统可能有“威廉史密斯”;索赔系统可能有“Willie X. Smith”。所有人都是同一个人。你是做什么?对于瘦腿,遗留应用来说,这是一个巨大的问题。

答案 5 :(得分:1)

你总是可以制作一张AKA表,你可以在这里找到AKA名称的首选名称。因此,如果有人使用名称Bill,您可以随时将其替换为William。

我从未亲自将这个概念用于名称,但我确实支持一个与电影标题类似的项目,这些项目可能因不同国家而异。