如何为多个“姓氏”建模?


11

在说西班牙语的国家/地区,我们使用多个姓氏,例如:

姓氏↙姓氏
                Pedro ArturoRodríguezLoyola
        中间名↗(?)

我正在尝试为患者姓名建模数据。在我们国家,这很重要,因此我不能忽略第二个名字,但我想构建一个对其他开发人员,尤其是英语国家的开发人员有意义的应用程序。


我在English.SE上创建了一个类似的问题,它对为什么坚持两个价值观很重要有一些见解。


15
出于什么原因,为什么不允许“姓氏”值包含空格?您是否真的想在某些用例中使用一个姓氏,而在其他用例中使用所有姓氏?如果没有,那么我看不到问题所在。完全按照用户输入的名称保留“姓氏”,您就可以了。
Kilian Foth 2014年

3
在荷兰语中,“ van de Iets”类型名称很常见。只是让姓氏字段包含空格
棘轮怪胎

2
有一个原因,您不能只拥有一个name字段?
吞下2014年

2
@asfallows:因为如果我们打印患者列表,我们需要按姓氏对它们进行排序。例如,如果您的名字是“JoséCarlos FernandoAlmodóvarSoto”,那么我应该如何事先知道“Almodóvar”是姓氏?
Pablo Olmos de Aguilera C. 2014年

2
@FedericoPoloni:任何以姓氏查找患者的人都可能知道患者的姓氏。
Mooing Duck

Answers:


19

问:DBA如何计算?

答:0、1,很多

一个人有1个或多个给定名称和1个或多个姓氏,可能还有一个头衔。这些名称具有顺序。由本地化和文化决定如何称呼一个人。

ContactId
NamePart {“ John”,“ Smith”,...}
NameType {标题,给定,家庭,???}
顺序{1,2,3,...}

对于Pedro Arturo Rodríguez Loyola(联系人1),您将有四行:

1 /佩德罗/给予/ 1
1 /阿图罗/给予/ 2
1 /罗德里格斯/家庭/ 3
1 /洛约拉/家庭/ 4

这样,它不限于任何给定的结构,但仍然对那里的给定接触有意义。当您给一个姓氏为3或4的人或姓氏时,该怎么办?还是娘家姓?

请注意,我已更改了此答案的先前修订版本中的顺序-该顺序是整个名称的顺序,而不仅仅是名称类型中的顺序,因为在某些文化中,姓氏排在第一位,您可能已经分了标题部分为“约翰·史密斯二世爵士”。

附加阅读


2
+1但是,该程序员与许多离岸团队成员合作,但是我见过的最长的名字仍然是“特雷莎·特里尼达·鲁伊斯·毕加索的毕加索·迭戈·何塞·弗朗西斯科·德·波拉·胡安·内波米切诺·玛丽亚·德·洛斯·雷梅迪奥斯”。是否虐待儿童?
Elliott Frisch 2014年

@Darkhogg utnapistim将其作为其答案中的第一个“此”链接。它是那些“权威指南”之一。

我喜欢这个想法作为一个概念,但是要向用户展示它会写出实际名称并不难吗?我唯一能想到的就是“ GMail”联系人字段,让您“添加”部分名称。您是否考虑过如何实际使用这种数据模型?
Pablo Olmos de Aguilera C. 2014年

1
@Peteris通常在医疗应用中(最初的问题是“病人”),您需要传递一个结构化名称以与其他系统集成。拥有非结构化数据意味着您将很难与其他系统集成,甚至是将患者从一家医院转移到另一家医院或填充用于保险索赔的表格字段之类的事情。因此,有关如何以允许您以所有必需方式操纵数据的方式构造数据的问题。

1
当应用程序要求按姓氏排序或尝试与旧的EDI系统对接以将患者从救护车转移到医院(或反之)时,@ Ben自由文本字段不能很好地工作。各种保险索赔表中的适当字段。在所有这些关键区域中,都有一点数据可以指定名称的每个部分,比试图在事实之后分配含义要容易得多。自由文本字段是不错的选择,但有时它不是与其他系统一起使用的一种选择。

10

可能会有所帮助。这篇文章很幽默,但是很有见地。

[名字] [姓氏]不是通用的名称规则。你住的地方很普通。如果您在其中强加规则,迟早会有一些无法添加到系统中的人员。

基本上,请确保施加尽可能少的限制,并在实际存储的名称和任何其他名称之间留出灵活性。

我会选择这样的东西:

  • 显示名称(用于显示表单/数据时的统一名称):(应为[first] [last])。
  • 其他名称/全名(用于搜索,更精确的匹配等)。在这里,允许用户写任何东西,直到给定的长度;长度应该比您认为合理的长度还大-例如,如果您认为40个字符就足够了,请输入500 :))。
  • 寻址(先生,夫人,女士,小,小,-san,自定义值(例如Tov。)等)。
  • 内部ID(此ID应该唯一标识应用程序中的每个人,以防止名称冲突)。

例如,由于罗马尼亚语特定的变音符号,我的名字在大多数欧洲语言中均无法正确书写(因此,每当我在祖国以外的地方写下我的名字时,从技术上讲我都会错误地写出该名字,因此人们可以阅读和发音)。

一些有趣的名称示例和链接:

http://en.wikipedia.org/wiki/Nicholas_Barbon

http://en.wikipedia.org/wiki/Prince_%28musician%29

http://en.wikipedia.org/wiki/P_diddy

http://en.wikipedia.org/wiki/缅甸名


要考虑的另一件事是排序。通常希望能够按姓氏(或仅姓氏或姓氏中的第一个单词等)对人员列表进行排序。如果应用程序需要这样做,那么我们需要某种方式来识别其“排序名称”。
BenM 2014年

但我总体上还是喜欢这个想法。我们不是根据文化假设来表示名称,而是根据他们需要在系统中执行的功能来表示它们。
BenM 2014年

我喜欢你的回答。我不知道这如何帮助我输入姓名。例如,我需要对它们进行排序,我们通常使用姓氏。例如,如何将它们放在称为“其他名称”或“显示名称”的字段/列上可以帮助我?不过,缅甸名字很赞。太棒了
Pablo Olmos de Aguilera C.

@pablox,我的观点是,从概念上讲,您不应将一个人的姓名视为身份,而应将其视为身份的元数据(并且id应该是唯一的代码)。您可以根据应用程序的需求将元数据视为组织良好的。例如,您可以在“名称令牌组”中选择“将名称排序”到第二个名称(如果有)的角色,将“显示名称”用作第一个令牌,并选择“地址命名”角色作为“博士|先生|女士|等” +“显示名称”。
utnapistim 2014年

名称的排序通常将是“电话簿排序”,在此您将忽略名称的各种附加内容,并在重要部分进行排序。例如,“ van de Bogart”将按“ Bogart”而不是“ van”进行排序。如何一个多西班牙名的处理将是文化相关的-它是被用于何处以及如何使用它结合使用。
菲尔·佩里

0

这不是一件复杂的事情.....或者我错过了一些东西。

具有以下字段:name(varchar),lastname(varchar)。

然后是一个填写完整名称的表格,例如:Jorge Patricio和姓氏Pèrez Gonzáles

在搜索中,您有许多比较运算符,例如在MySQL中,这样like可以帮助您查找。

通常情况下,组成的姓氏总是有序的。Pérez González通常以这种方式说出姓氏,而不是用相反的顺序。

您将以其他方式过度设计数据库。


1
如果首先给出姓氏怎么办?链接

1
@MichaelT,那呢?展开该字段,然后在名称和姓氏表中搜索是否出现该值。总是假设您有一个类似于Google的搜索字段,否则,您可能只需要使用“名称:”和“姓氏:”的
表格

0

有三种类型的个人名称:Polynyms(具有多个组成部分的名称),Mononyms(仅具有一个组成部分的名称,例如“ Cher”)和Pictonyms(由图片表示的名称,例如The Artist)。

一个人可以有多个姓名,扮演角色,例如“法定姓名”和“首选姓名”。

一个多义词有几个组成部分,应给定名称和姓氏。有几种姓氏:

  1. 普通姓(琼斯)
  2. 双管姓(“ Vaughn Williams”或“ Louis-Dreyfus”)
  3. 真实的化合物姓氏{给定名称:“ Juan Pablo”姓氏:“FernándezdeCalderón”,第二姓氏:“García-Iglesias”}

第三点很重要,因为预计他将被任命为费尔南德斯·德·卡尔德龙先生,而不是费尔南德斯·德·卡尔德龙·加西亚·伊格莱西亚斯先生。

因此,基本上,有一个必填的姓氏字段和一个可为空的secondarySurname字段。


0

您如何模拟某人姓名的各个组成部分? 你不。不必为某个人的法定姓名的所有组成部分建模单独的字段,而是为其首选的称呼,称呼,非正式名称,用户名,昵称和句柄建模,而仅对您关心的内容建模。

奇怪的是,您的系统最多只真正关心某人的四个“名称”:

  1. 一个显示名称,让他们知道,他们是在登录到系统。
  2. 一个非正式名称,您可以通过它在电话中称呼他们。
  3. 正式名称,您可以在正式名称中引用它们。
  4. 以在列表中排序的方式表示#2的排序名称

许多系统只会将某人的正式名称用于#1和#2,而您唯一关心的名称是“代表用户名的字符串”和“代表应如何排序的字符串”。

从数据建模的角度来看,仅定义您实际需要的那些值。如何最好地优化这些值的存储是一项实现细节-只有过分优化才会使您头痛。(当然,您“可以”仅存储名字和姓氏,但是对于只有一个名字的人该怎么办?)


-1

让我们以另一种方式来考虑。

您的系统必须连接到其他系统,如果不灵活,则无所谓。那么,您必须使用哪些系统来传输数据?

当我打电话给医生预约时,他们问我我的生日,然后系统向他们显示匹配的人的名单,然后他们问我我的名字,最后问我的地址以确认他们已经选择了正确的人。

当与我交谈时,医生需要知道这个名字的名字。如果他们给我写信,他们还需要知道写在信上的名字。

因此,方法不只是允许空格的单个文本字段。除非您将以相同的方式处理它们,否则甚至没有理由将名字和姓氏分开。


3
您正在填写保险索赔表。它具有“姓氏”。这个人是日本人。拥有音译版本时,您需要在字段中输入正确的姓氏。是哪个字

@MichaelT,怎么说每个人都有姓?
2014年

2
从日本(或许多其他东部命名国家)的人那里获得名字,首先要提供姓氏。这就是解决方法。但是,填写医疗表格时,可能需要姓氏和名字不同领域-你怎么把一个字段和匹配到合适的领域给出的另一个例子是,如果要排序的姓和“何塞·卡洛斯·费尔南多·阿尔莫多瓦索托”你需要进行排序Almodóvar,而不是Fernando

@MichaelT,因此需要单独处理姓氏,因此请在其自己的字段中输入,并希望输入详细信息的人员理解东部名称。
2014年
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.