分别建模名字和姓氏


32

在设计新系统时,应该考虑哪些参数,并且必须将一个人的姓名存储为一个字段,或者将其分别存储为名字/姓氏?

单一领域的优点:

  • 简单的用户界面
  • 尝试输入一个名字很长的人的名字时没有歧义(通常不明显,这是姓氏/名字..)
  • 处理标题时的复杂度较低(例如,无需单独输入“ MD”或“ Dr.”)

拆分字段的优点:

  • 可以通过“亲爱的X先生”或“亲爱的朱莉”进行个性化交流
  • 如果使用的Web服务需要单独的名字/姓氏,则可以轻松提供。
  • 对于具有严格标识要求的任何行业(例如医疗,政府等)的更好选择
  • 选择更加安全,因为您可以随时返回到单一字段替代方案

您是否看到上面未列出的任何其他参数?

更新:问题是,可以为每个解决方案列出哪些其他(未在问题中列出)参数。我认为提出意见而不是可能的利弊会以错误的方式推动讨论。每个开发人员都必须对这个问题做出决定,这个问题的目的是汇编一个非平凡的参数列表,可以在需要时进行评估。


11
您想用这些名字做什么?您有法律要求吗?除了显示用户名之外,还有其他结果吗?
Darkhogg '17

9
姓氏/姓氏区分不支持仅使用“ Cher”之类的单个名字的人。
JacquesB

77
我建议您阅读以下文章:kalzumeus.com/2010/06/17/…在考虑名称时,这确实令人大开眼界。
Pieter B

10
您可以考虑在“ 用户体验”上询问此问题,那里的社区也许可以对这个本质上的用户界面问题提供不同的看法。
7684年

9
@PieterB该文章中的某些观点值得怀疑,有时您必须做出假设才能完成任务。该文章没有提供有关如何处理名称的有用建议。如果名称包含非Unicode字符,该怎么办,允许用户上传图片?如果存在非视觉方面-允许视频带声音怎么办?如果一个名字叫行为艺术,只能在香港的午夜演出,该怎么办?在某个时候,您必须变得现实并继续解决问题,而不是沉迷于用户群永远不会遇到的理论性极端情况。
恢复莫妮卡

Answers:


50

名和姓不是有用的概念。名称在不同国家/地区的用法不同。在大多数亚洲国家/地区,姓氏是写在第一位的,但仍用于排序-因此您可以将姓氏放在首位,这样排序将是错误的,也可能是姓氏,然后是显示。还有像冰岛这样的国家,它们根本不使用姓氏,而是使用父亲的姓氏。因此,它们只是按给定名称排序。

在这方面,“姓氏”和“姓氏”(或“姓氏”)一词比较好,但是除非绝对必要,否则我还是会避免使用它们(例如,像护照这样的官方文件中确实有它们,所以您就需要它们),因为他们只会使事情变得更复杂。

  • 可以通过“亲爱的X先生”或“亲爱的朱莉”进行个性化交流

除非您不知道是用名字,姓氏还是名字来称呼某人。而且,不要让我开始使用有宾格的语言- 一般而言,您不能从主格获得宾格。不,如果您简单地问用户如何称呼他们,那会更好。

  • 如果使用的Web服务需要单独的名字/姓氏,则可以轻松提供。

如果。如果您依赖其他服务,那么您将被锁定在他们的错误选择上。您自己的设计没有优势。

  • 对于具有严格标识要求的任何行业(例如医疗,政府等)的更好选择

不,这是错误的选择。正式文件通常使用术语“给定名称”和“姓氏”(或“家族名称”),这些术语不太含糊。

  • 选择更加安全,因为您可以随时返回到单一字段替代方案

实际上,由于亚洲名称含糊不清,因此尚不清楚。


2
如果应用程序在世界的不同地方使用,则字段标签以及它们的组合/使用方式都需要进行本地化。
JeffO '17年

5
@JeffO,真正的问题是,如今您很可能会在同一系统中拥有来自不同国家的人,因此您需要创建一个系统并找到一种方法,以将来自不同文化的名称插入该系统中,以使其合理地持续工作。除非确实需要,否则不要进入那个兔子洞。
Jan Hudec

4
@IstvanDevai在加利福尼亚州有一个法律案件,由于信用法律要求“姓氏”,因此宣布合同无效。此人有双重西班牙裔姓氏,但是当要求提供姓氏时,通常会使用姓氏(父亲)。另一方败诉,因为合同上的名字不是他的“姓”,即全名末尾的名字。第一个/最后一个如何引起混淆的示例,并不完全与给定名称/姓氏同义。

6
@Casey-中间名应包含在给定名称字段中,因为这就是它们:次要给定名称。如果我每次见过一个没有中间名的西班牙裔人,但每次都有美元,但双重姓氏在中间名字段中出现了他们的第一个(也是最重要的)姓氏,那么我已经退休了。如果您想知道如何称呼某人,请为此输入一个与姓名分开的字段。然后,巴塞洛缪弗兰克·爱德华·史密斯·惠灵顿可以告诉您称呼他们为巴特。我们可能会说英语,但是这里有些人来自非英语国家,他们的名字也被输入了。

4
-1。尽管答案本身并非完全错误,但对于眼前的问题却没有多大意义。OP使用一个字段或两个字段作为人名查找更多参数。不管是“第一个/最后一个”还是“给定的/ sur”都不是焦点,这只是OP想到的标签。所有其他观点在我看来都是很自以为是的,并且根据我为大型客户创建和部署应用程序的个人经验,OP的假设是完全正常的,而且确实会发生这种情况。这个答案只是试图解决问题的参数。
AnoE

31

唯一重要的参数是系统的要求什么?

您只需要应对一种文化?如果是这样,请遵循该文化。否则,要计划国际化(正如其他人指出的那样)。

您是否需要获取数据来处理政府表格,医疗保健或其他法律/系统要求?遵循那些指示。如果这意味着名字和姓氏,请这样做。如果这意味着不同,请执行此操作。

您是否需要使用名字和姓氏的API(或者是否有可能足以忽略YAGNI)?在那里做有意义的事情。

如果您需要个性化通信,问一个人自己喜欢的名字并存储起来是否合理?

系统的要求应确定您的工作。做您必须做的,其余的由YAGNI完成。


7
不再有“一种文化”之类的东西。即使是最小的社区也有不同的文化规范和语言。
BobDalgleish

7
@BobDalgleish是的,但有时并不重要。有时,支持多种文化的成本使商人只是拒绝。
Becuzz

9
@BobDalgleish大概是哪个文化在正在开发应用程序的市场中占主导地位?我认为这实际上不是那么神秘或罕见。
Casey

3
@BobDalgleish-与“文化”无关。签发文件时没有人问您的文化。如果我只需要支持塞尔维亚(目前我在哪里),那么我将包括该国家在每份文件上定义的名字和姓氏,仅此而已。不管你的文化是什么。您的护照,驾驶执照等将有名字和姓氏,期间。
达沃·德拉罗(DavorŽdralo)'17

2
@icirellik用什么方式错了?如果您试图对宇宙进行完美建模,那么这些事情(长度限制等)是否错误?当然。但是从未有人要求我完美地模拟宇宙,以及有人可能想要选择名称的所有可能方式。我是否可以使用克林贡语名字?不,为什么不呢?某人可能会在某天这样做(诚实的说,如果有人现在这样做我不会感到惊讶)。但是有一点您只是知道有些事情将不适用于您的模型。而且,花额外的开发时间来处理所有可能性是不值得的。(续...)
Becuzz

5

如果您有多种显示和/或使用名称的方法,则可能需要单独的字段。除了数据输入外,您还可以提供反馈以向用户显示如何使用它。如何将它们组合在一起,可能会导致将来转换为单个字段。

带有一些显示的标签:问候语或显示名称:名字+姓氏组织/排序:姓氏,名字

如果您不确定将来如何使用该名称,请从拆分名称开始,然后在意识到这是您真正需要的全部内容时,可以将它们合并为一个字段。这并不是说编写一个将单个名字字段分为名字和姓氏的算法很困难,但是您会在一些名字上犯错误,而且人们真的不喜欢名字错误。使用拆分字段,用户可以在看到名称使用方式时调整其输入方式。将它们组合在一个永久的单一名称字段中的风险较小。


5

我同意@JanHudec所说的很多内容,尽管我想在此基础上作一些扩展:

  • 您需要知道真正的需求是什么,但是将信息组合起来比将信息再次组合起来要容易得多。
  • 排序始终是一个挑战,因为规则可能因地区和文化而异。
  • 许多文化与您的文化不符,这会导致错误的假设。(这是扬的最大观点)

术语很重要

类似条款给定的名称或者语义上的含义,你的数据库应该始终反映数据的语义。诸如名字姓氏之类的词具有位置含义,通常基于英语和美国关于名称如何工作的想法。对数据的语义使用正确的术语。

您需要分解多远?

有一些标题的概念(Mr. Mrs. Mrs.等)或序数(Jr.,Sr.,III等),甚至是证书(PhD,MS,PCAM等)也很重要,具体取决于上下文和目的。

许多语言环境都有多个姓氏(父系和母系)的概念,有些则没有。填写表格时,有时人们必须做出艰难的选择,例如使用美国形式的“姓氏”的父系姓氏,或根据父亲的名字得出姓氏(詹森) )。

在美国,通常会有一个或多个中间名,但在家庭之外经常被忽略。

排序

有一个专用的排序名称字段会有所帮助。这样,您可以在创建记录时消除规则的歧义。它还可以确保您在国际范围内以正确的顺序对名称进行排序。

常规做法

您的实际要求决定了姓名的正确性。如果要创建政府或银行网站,那么对存储和处理名称的要求要比诸如Facebook之类的非正式要求更高。

非正式准则

  • 有一个字段描述用户希望如何被认识
  • 排序并显示使用该名称

半正式指南

  • 在一个字段中输入昵称或用户的姓名地址
  • 有两个字段,一个用于给定名称,一个用于姓氏(姓氏是可选的)
  • 根据语言环境和给定/姓氏组合计算排序字段
  • 直接与用户联系时使用昵称
  • 列出人员时使用正式名称

正式准则

  • 这些取决于您所支持实体的现有政策和程序
  • 您需要的字段数将与要支持的名称部分的最大数量一样多,并根据其名称进行语义上的命名。
  • 包括一个排序字段,该字段像半正式案例一样处理排序
  • 显示通常还取决于现有的政策和程序。您需要熟悉它们。

下降投票者会在意吗?也许我错过了什么?
Berin Loritsch '17

在我看来,这是全面的,这里给出了最务实的建议。
杰西·克拉克

4

除了@JanHudec指出的观点并得到我的同意外,还值得注意的是,在许多国家/地区,人们拥有多个姓氏,因此,单个姓氏字段可能无关紧要。例如,在西班牙,人们有两个姓,根据情况,他们仅使用其中一个或两个。

此外,您不应基于自己的假设来个性化通信,因为在某些文化中,当您用姓氏来称呼别人时,您似乎是不礼貌的,而在其他情况下,则可能相反。

同样,某些文化强调“ Mrs”和“ Ms”之类的形式,并且根据具体情况,它们也可能将此单词与名字或姓氏结合起来。

因此,我倾向于使用一个解决方案,在该解决方案中,您将拥有一个姓名字段,以及可能由用户填写的其他字段来提示如何求助于用户-与许多航空公司在网上购买机票时所做的事情类似。如果您提到的外部Web服务需要使用名称,这也可以解决如何拆分名称的问题。


1
据推测,如果您实际上是在本地化,则可以为不同的语言使用不同的模板
Casey

4

@JanHudec和@KjMag指出的甚至更多,即使在非常接近英语的文化/语言中,这也成为一个问题。以德语为例。您有名叫Vornamen,名,Nachnamen,Last name和Rufname的概念。以我父亲为例,他有3个名字,在他的出生证上按克里斯托弗·斯蒂芬·安德里亚斯的顺序列出。他有一个姓。您认为他叫什么名字?

正确答案:安德烈亚斯。那是他的Rufname,在美国,他把它作为符合美国模板的名字。因此,您可能会假设在德国姓氏的名字是您的名字的名字,但是您有了我的兄弟:Christoph Sebastian Herbert Maria。(现在我已经放弃了我们是巴伐利亚人)或我的姐姐克里斯汀·加布里埃尔。您认为它们叫什么名字?塞巴斯蒂安和克里斯汀。

我会将回答一个字段全名的答案放在第三位。我要补充一点:也许为姓氏/姓氏添加另一个字段并提出一个问题:您将在列表中按哪个名字排序?然后是最后一个领域:您想如何解决?


1
“姓氏”只是“姓氏”的另一个名称,而不是字面上出现在最后的单词。中山太郎的姓氏是“中山”。
Casey

2
再加上一个例子:我的祖父被称为“ Antoon Leendert van Ingen Schenau” =>给出了一个名字:“ Antoon Leendert”;称为:“ Leen”;全名:“ van Ingen Schenau”,将在“ Ingen”下排序。从名字/姓氏条目中都无法轻易得出呼叫名称或正确的排序。
巴特·范·英根·谢瑙

1
@Casey是根据谁的?在日本,它是“大名”,而不是“姓氏”。
eis

1
@eis在日本是名字。但是在英语世界中,“姓氏”是“姓氏”的同义词,而不是字面上的“某人名字序列中的姓氏”。
Casey

1
@eis我不确定您要提出什么观点。如果您调用数据库字段last_name而不是姓氏,那么用户将不知道它们之间的区别;一个只是另一个的同义词。如果您担心要向非英语用户展示该软件,则无关紧要,因为“姓氏”和“姓氏”都是英语术语,因此您应使用任何意味的语言来将该页面本地化。如果您担心的是您希望不懂英语的人能够使用英语页面,那似乎是解决实际问题的三心二意。
Casey

-2

如果要进行全球申请,则可能会将一个人的名字建模为字符串数组。例如,考虑电影《专制》中总统的名字:

  • Dwayne Elzondo山露水赫伯特·卡马乔

那是他的全名。该名称在数组中包含6个元素。对于美国文化,名字是数组中的第一个元素(Dwayne),姓氏是数组中的最后一个元素(Camacho)。但这并非总是如此。

如果名字实际上是最后一个元素,则可以应用特定于文化的规则来确定“名字”,依此类推,取决于名称在不同文化/地区中的工作方式。

同样,在美国,某些情况下last元素不是姓氏,例如:

  • Dwayne Elzondo山露小赫伯特·卡马乔

因此,一个名称后缀字段或一个字段将不得不解析最后一个元素,以根据区域性查找已知的后缀,以获取正确的姓氏。

因此,最好将名称存储在一个元素(全名)中,然后对其应用“标准化/卫生”例程,以根据需要解析出特定元素。存在类似的地址策略。通常将它们收集为一个字符串,然后发送到服务以解析各部分。


3
单个字段然后“解析”是一个非常糟糕的主意。考虑一个姓“ Senior”的人:您如何解析?那“德拉荷亚”这个姓怎么办?
BobDalgleish

我提到了解析或名称后缀字段。如果需要通用解决方案,则需要一个名称解析器,以便您可以处理“ Senior”和“ de la Jolla”之类的每种情况。可以使用AI并对其进行训练以识别名称。我敢打赌,如果有人给它提供足够大的数据集,它将能够识别世界的“德拉约拉”。但这是一种可能的解决方案。当然也可以收集离散的零件,但这是不利的。
乔恩·雷诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.