名字,中间名,姓氏.为什么不是全名?

ash*_*raf 42 database user-interface database-design

我试图找到一种更好的方法来存储表中的人名.3场超过1场用于存储人名的好处是什么?

UPDATE

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

将名字/姓氏合并到一个字段中

Ric*_*dle 64

您始终可以从其组件构造全名,但不能始终将全名解构为其组件.

假设您想要写一封以"Dear Richie"开头的电子邮件 - 如果您有一个given_name字段,您可以轻松地做到这一点,但是从他们的全名中弄清楚某人的名字是不是微不足道的.

您也可以通过given_namefamily_name,或其他任何方式轻松搜索或排序.

(请注意我用given_name,family_name等等,而不是first_name,last_name因为不同的文化把他们的名字在不同的订单.)

在一般情况下解决这个问题很难 - 这是一篇文章,讲述了它有多难:在都柏林核心中代表人们的名字.

  • 如果名称包含三个以上的组件,则无法从三个组件构造全名. (17认同)
  • @Joel:是的,你可以限制他们输入他们的名字,好像西式名字比他们的名字更好.我认为"他们"的数量超过了"我们",所以我宁愿不这样做.此外,我同意Anon关于"III"的观点.我知道两个姓氏为"Saunders,III"的计算机系统.我不喜欢他们. (7认同)
  • 但您可以限制用户以3分量格式输入数据进行存储. (5认同)
  • 经验教训是,除非您真的需要说"亲爱的约翰",否则将商店名称作为单个字段存储. (5认同)
  • 事实上,就我所知,确切意义上的"中间名"只在美国才知道.它与欧洲人拥有的第二个(第三个,第三个)名称的概念并不完全匹配.Middlename可能是一些奇怪的东西,比如"littlepage",因为第二个名字只是第二个名字(因为它可能永远是needen). (3认同)
  • 澳大利亚的大多数政府表格都有"姓氏","第一名"和"其他名字"字段,允许多个中间名... (3认同)

rao*_*son 36

尽可能保持数据清洁!

怎么样?

在您提出要求时,只需要向您的用户询问您最不需要的东西.

如何存储名称无关紧要.重要的是那个

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

如果您骚扰具有必填字段的用户多次填写并重新提问,他们可能会感到不安,而不是立即购买您的应用程序.您希望始终避免糟糕的用户体验.

没有用户关心您在数据库中查找其中间名是多么容易.他希望有一种轻松,感觉良好的体验,就是这样.

如果用户被迫输入数据,如邮政地址,甚至电子邮件地址,只需要"只读"帐户而不需要通知,用户会怎么做?他们将垃圾数据放入您的系统.这将使您的超级搜索和排序算法无论如何都无用.

因此,我的建议是在任何应用程序中收集来自用户的实际需要的信息,以便为他们提供服务,不再需要.

例如,如果您经营一家宠物食品在线商店,请不要在注册时询问您的用户他们拥有哪种宠物.一旦他们登录并且所有人都满意(新客户),他们可以选择填写.在他们订购实际运送到他们家的东西之前,不要问他们他们的邮政地址,他们支付的东西,因此关心你有他们的确切坐标.

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

在你的例子中,我只想要全名(不确定),一旦用户心甘情愿地订阅你的时事通讯,让用户决定他/她想要如何解决...

  • 这至少没有回答这个问题. (9认同)
  • 我理解你的答案,但我真的很讨厌收到公司发来的邮件总是称为"亲爱的科林安格斯麦凯".如果他们想要非正式的话,请"Hi Colin",或者如果他们想要正式的话,请"亲爱的Mackay先生".无论如何,如果你要求人们提供他们的全名,他们无论如何都会放弃垃圾.我在上次会议上有代表,我用名字徽章写着"joe blow"(没有正确大写)或"Supercool John"(当他发现"名称"字段的内容时,他真的很尴尬!) (7认同)
  • 是的,但是那时我会尝试清楚*当他们点击"将我预订到您的会议"按钮时.你给出的例子正是我的意思.他们用愚蠢的数据注册了一些页面(虽然很有趣)然后报名参加了一个会议,不知道他们两年前的详细信息会被用作名牌(lol).对他们来说更好,数据质量本来就是问他们(正确的)真实姓名*当他们报名参加会议时,他们花了他们的钱... (6认同)
  • 有趣的是,Google的联系人管理器只存储全名,而不是最后/第一/中间名,尽管您可以为它们添加自定义字段.这实际上是友好的,因为许多文化实际上并没有第一个/最后一个/中间名. (2认同)

Col*_*kay 17

正如其他人所说,如何将全名分解为其组成部分.

  • 科林安格斯麦凯
  • Jean Michel Jarre
  • 文森特 - 梵高
  • PabloDiegoJoséFranciscode Paula JuanNepomucenoMaríadelos Remedios Cipriano delaSantísimaTrinidadRuiz y Picasso

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

要了解更多信息,请参阅虚假程序员对名称的看法.


Joh*_*ers 13

几天我正在查看西班牙内战,并发现大多数规则的例外情况:


下一次我正在开发一个必须存储名称的系统时,我将尝试一些激进的东西:根据需求进行设计.

我们打算用什么名字?

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

根据名称将用于什么,我们将确定要存储多少信息.也许我们允许用户输入所有这三个,包括第一种情况下的换行符(Generalissimo Franco可能希望列出他的完整头衔和约会,如果他还没有死的话).也许我们提供First,Middle,Last,Generation作为选项,并将其余部分填入默认值.也许我们提供其他常见选项,如Surname,Given Name.

这与我在1975年开始编写COBOL编程之前使用过的旧式First,Middle,Last形成对比,并且从此以后一直"适应".

  • 不,这就是为什么我说携带单个“FullName”字段,nvarchar(1024)、FormalAddressName nvarchar(255)、ScreenName nvarchar(50)、WelcomeName nvarchar(100) 等。提供良好的默认值并让用户输入详细信息如果他们想覆盖默认值。 (2认同)

Pet*_*ore 11

不幸的是,这有点像询问在数据库中存储数字的最佳方式.这取决于你将要用它做什么 - 有时你想要一个int,有时你需要一个字节,有时你想要一个浮点数.使用名称取决于您希望用户来自哪些文化,您计划使用名称做什么(您是否会使用这些名称连接另一个将名称存储为"姓氏,名字"的系统? ),以及你有多大可以惹恼你的用户.如果这是一个内部人力资源应用程序,你可能会给用户带来很多烦恼,并且有一个非常有条理的,正式的名称组件细分(有超过3个 - 不要忘记mr/mrs,jr,III,多个中间名,带有连字符的姓氏,如果你想要处理来自所有文化的名字,谁知道还有什么.如果你有一个用户可能会或可能不关心的webapp,你就不能要求他们过多关心.


Joh*_*lan 7

您可能希望在3个单独的字段中搜索一个,并且可以便宜地连接全名.

例如,如果您想搜索所有诺兰先生,您的查询将是

SELECT Title+' '+FirstName+' '+Surname As FullName  
from table where firstname = 'Mr' and surname ='Nolan'
Run Code Online (Sandbox Code Playgroud)

只用全名来做这件事会很痛苦.

  • 此外,您可能希望对名称的各个方面进行排序,如果它只在一个列中,则无法执行此操作. (2认同)

小智 5

我是英国人,只有一个名字。我通常把它放在“姓氏”字段中,以免造成麻烦。我通常也被迫在“名字”字段中输入一些内容,这根据定义是错误的。

任何强加除“名称”之外的内容的尝试至少在某些时候注定是错误的,有时甚至会让用户感到非常沮丧。在印度南部、印度尼西亚和巴基斯坦(有数亿人口),单名很常见,在英国偶尔也会出现像我这样的怪人。

“第一、中间、最后”的事情非常以美国为中心。很少有其他国家会这样考虑名字。请停止这样做。