名中间名姓。 为什么不是全名?

我试图find一个更好的方法来存储人的名字在表中。 3个字段存储人名的好处是什么?

UPDATE

这里有一个有趣的讨论和关于存储名称和用户体验的资源

名字/姓氏合并成一个字段

保持您的数据尽可能干净!

怎么样?

问你的用户只有在你问的时候你绝对需要的东西。

如何存储名称并不重要。 重要的是这个

  1. 用户体验尽可能好
  2. 你的系统中没有错误的数据

如果用户使用强制性的字段填写和重复提问几次,他们可能会感到不安,而不会立即购买到您的应用程序。 您希望始终避免不良的用户体验。

没有用户关心你是如何轻松地search你的数据库的中间名。 他希望有一个容易,感觉良好的经验,就是这样。

用户如果被迫input数据,如邮政地址,甚至电子邮件地址,他们只需要一个“只读”帐户,而没有通知需要做什么? 他们把垃圾数据放入你的系统。 这将使你的超级search和sortingalgorithm无用。

因此,我的build议是在任何应用程序中收集用户所需的尽可能less的信息,以便为您提供服务。

例如,如果您经营一家网上商店的宠物食品,不要要求您的用户注册他们拥有什么样的宠物。 一旦他们login并且所有开心(新客户),让他们select填写。 不要问他们的邮寄地址,直到他们订购的东西,实际上是搬到他们的房子, 他们支付的东西,因此在意,你有他们的确切坐标

这将导致更好的数据质量,这是你应该关心的,而不是技术细节,用户没有从中受益….

在你的例子中,我只是要求全名(不知道),一旦用户愿意订阅你的通讯,让用户决定如何处理他/她…

您始终可以从其组件构build完整名称,但是不能始终将全名parsing为其组件。

假设你想写一封以“Dear Richie”开头的电子邮件 – 如果你有一个given_name字段,那么你可以轻松地做这given_name ,但搞清楚某个人的名字是不是全名。

你也可以按照given_namefamily_name或者其他方式进行简单的search或sorting。

(注意我使用的是given_namefamily_name等,而不是first_namelast_name ,因为不同的文化以不同的顺序命名它们的名字。)

在一般情况下解决这个问题是非常困难的 – 这里有一篇文章给出了它的难度: 在都柏林核心中代表人物的名字 。

正如其他人所说,如何分解一个全名到它的组成部分。

  • 科林安格斯麦凯
  • Jean Michel Jarre
  • 文森特 – 梵高
  • Pablo DiegoJoséFrancisco de Paula Juan Nepomuceno玛丽亚德洛斯雷梅迪奥斯Cipriano de laSantísima特立尼达Ruiz y Picasso

你如何可靠地分解这批货?

要了解更多信息,请参阅程序员相信名称的谎言 。

那天我正在查看西class牙内战 ,并发现这个例外的大多数规则:

  • Francisco Paulino HermenegildoTeóduloFranco y Bahamonde,Salgado y Pardo de Andrade
  • 父亲:NicolásFranco y Salgado-Araújo
  • 母亲:玛丽亚·皮拉尔·巴哈蒙德·帕尔多·德安德拉德

下一次我正在研究一个需要存储名称的系统时,我会尝试一些激进的:从需求devise。

我们要用什么名字?

  1. 邮政服务地址标签上的名称
  2. 在网站上的问候
  3. 非正式名称

根据名称的用途,我们将确定要存储多less信息。 也许我们允许用户input所有这三个,包括第一个案例中的换行符(如果他还没有死的话,委员长Franco可能希望他列出完整的头衔和约会)。 也许我们提供First,Middle,Last,Generation作为选项,并将其余的填入默认值。 也许我们提供其他常见的选项,如姓氏,名字。

这与之前我们在1975年开始使用COBOL编程之前所使用的老式的First,Middle,Last形成鲜明对比,从那以后,它们已经“合身”了。

不幸的是,这有点像问什么是在数据库中存储数字的最佳方式。 这取决于你要用它做什么 – 有时你需要一个int,其他时候是一个字节,有时候是一个浮点数。 名字取决于你期望用户来自哪种文化,你计划如何使用这些名字(你会使用这些名字来连接另一个存储名字为“姓氏,名字”的系统吗? ),你有多less能够惹恼你的用户。 如果这是一个内部的人力资源应用程序,你可能负担得起的用户很多,并有一个非常有条理的正式细分名称组件(有3个以上的方式 – 不要忘记先生/女士,小,三,多个中间名,连字号,以及如果你想处理来自不同文化的名字的话,谁知道还有什么,如果你有一个用户可能会或可能不关心的web应用程序,你不能要求他们太在意。

您可能需要在3个独立的字段上进行search,而对于全名来说,它并不昂贵。

例如,如果你想search所有的Nolans先生你的查询将是

 SELECT Title+' '+FirstName+' '+Surname As FullName from table where firstname = 'Mr' and surname ='Nolan' 

只用全名来做到这一点是一件痛苦的事情。

我是英语,只有一个名字。 我通常把它放在“姓氏”字段中,以至less加重。 我通常也被迫在“名字”字段中添加一些东西,这在定义上是错误的。

任何超过“名称”的企图都至less在某些时候注定是错的,有时甚至会让使用者感到沮丧。 印度南部,印度尼西亚和巴基斯坦(这是数亿人)以及像我这样的英国偶像怪人都是单一的名字。

“第一,中,最后一个”是非常以美国为中心的。 其他国家很less有人这样想。 请停止这样做。

保持字段分离可以让您支持不同的输出格式和文化,首先写出姓氏

大多数情况下,他们都支持写一些类似“先生先生”这样的表格信件,或者按照很常见的姓氏进行search/sorting。

鉴于第一/中/末可能不适用于所有的文化,可能会有更好的方法。 这可能更好地expression为“非正式名称”/“正式名称”/“法定名称”或类似的东西。

不过,在这一点上,首先/中间/最后是非常普遍的,从数据input的angular度来看,这是大家所期望的。

当你把名字分解成多个字段的时候, ORDER BY firstname或者ORDER BY lastname是可能的。

将所有名称混合到一个字段中时不容易。

关于唯一我能想到的是用于search的目的。 用[=]而不是用[like]来search一个字段比较好。

如果您不需要将名称显示为单独的字词,则使用单个字段。

但是,如果你需要做一些像[亲爱的阿丘先生]那么也许3场的方法会更好。

只有两个字段,“全名”和“首选名称” – 很容易。 支持存在的每一个名字(只要语言具有词汇符号…所以,是的,这排除了没有书面forms的语言)。

只要确保它们以某种unicode格式处理,并且该应用程序代码能够正确处理unicode转换。

事情就是这样,即使是人类也不可能一直这样做,数据太多,特殊情况也太多。 我现在可以把我的名字改成20个部分,中间的13个作为我的“第一个”名字。 名字的部分可以包含任意数量的单词,并且可以有任意数量的名字部分。 有些人只有一个名字(没有姓)。 有些人有很多中间名。 有些人有几个字组成的姓或名。 有些人先列出他们的姓。 有些人的中间名。 有些人的绰号与他们的名字没有明显的关系。

如果你试图用软件猜测这些惯例,你将会失败。 期。 也许你会在一些时间,甚至大部分时间都能正确地做到这一点,但是甚至是值得的? 在我看来,你应该把名字作为一个字段来存储,并且不要试图用名字来引用一个人的可爱。 如果您需要关于名称的其他信息(例如昵称),请询问用户!

如果您不需要按名称,中间名或姓氏进行sorting或search,则没有任何好处。

我投了一些这样的答案,但是如果你想避免代码中的重复或冗余或混乱的连接,你总是可以使用数据库中的计算列或类中的方法来公开重复名称。 如果这些连接是昂贵的(因为你打印了一百万条语句),你可以使用一个持久化的列。

通常你会允许用户指定名字,比如昵称或友好名字,这样你就不是通过logging中的名字来引用它们,也不是像史密斯先生那样。

这一切都取决于你的要求。 没有预期的环境,没有一个好的答案。

这个国际性的问题可能会成为一个问题。 某些文化首先使用姓氏,最后使用名字,这就引发了名字和姓氏的概念,所以我们转向田姓和名字。 等等 ,有些文化没有姓氏,或者姓氏是由名字的性别修改的。
我们可以进入部落文化,这个人在成年后更名。 “坐公牛”童年的名字是“跳獾”。
这是一个漫无目的的,但我所显示的是,越多的领域,你有更精确的devise。 至less应该有一个not null “给定名称”字段和一个optional “姓”字段绑定到一个整数的PK 。 如果遵守上述要求,则可以添加字段而不存在中断查询的问题。

不知道这是多么实际,但如果文化敏感性在开发应用程序的情况下很重要,那么可能一个名称应该是一个集合,集合中的每个元素都带有一个值,指示名称是否是可寻址的“名字“或可寻址的”姓氏“等等来表示”标题“或其他任何需要标识的内容。 可以使用名称ID来标识用于重新组成全名的元素的顺序。

一些问题可以通过存储一个像PreferredName这样的附加列来解决。 我们在我们的数据库中这样做,也存储前缀列和后缀列。 例如“亨利·W·琼斯教授”,首选名称为“印第安纳·琼斯”。

每个单独的名字都是primefaces数据。 当它们分开存储时,可以更容易地以不同的格式打印出来,例如名字和姓氏,名字。

灵活性。

例如,如果某人有一个双桶pipe姓和没有中间名。

对我来说,最好是存储3个名称,以便稍后需要显式parsing时,如果需要单个组件。

你不能总是将姓氏与姓氏完全分开,所以有很好的理由将其分开,因为你经常需要姓氏。 这样做后,有两种常见的方法:

  1. first_name和middle_name; 要么
  2. 姓。

(2)可以说是更可取的,因为人们有时不止两个名字,(1)在这方面更不灵活。

此外,另一个常见字段是preferred_name(除了上述内容)。