0

对于我们的应用程序来说,它有一个网站和一个后端,我们非常喜欢为人们捕捉一个“全名”的概念,以允许表达某人姓名的多种不同方式。然而;如何在不借助“标题,名字,姓氏”字段的情况下记录一个人的姓名?

  • 支付服务供应商希望“所有的名字,姓”,这 是强制性的银行卡支付
  • 人希望有一个奇异的“名字”,因此该公司可以被看作是更多的“个人”简讯
  • 账目的人希望能够通过
  • 我们的程序员已经在我们的数据库中发现以下客户端“姓”进行排序:
    • 西蒙玛丽亚 - 她的“名”是玛丽亚和她的“姓”是西蒙
    • 达内什 - 只有一个名字(虽然我认为这是不同的写在相应的字符集!)
    • 陈心兰 - 不知道这是第一个名字或姓氏(据推测,该客户端会写在罗马字符集,如果被迫这样做)

这使得有必要单独捕获每个人的名字的元素,并以某种方式使这真的不适合“称号的名字,第一姓氏,姓氏“模式无论如何都适合。

因此,如果没有“Right Hon。Chev。John Barrington Smythe Doe III OBE LLD MEng”每个部分的字段,或者只有一个只输入“John”的字段,那么您如何构建应用程序和数据库在实践中,以便以后不会被抓到?

我已经通过SO职位如看: First name, middle name, last name. Why not Full Name?Person name structure in separate database table,但没见过的人如何实现最佳实践方法的任何实例不必处理时,在现实世界(捕捉“FULL_NAME”)与其他系统可能不是当前或最佳实践...

谢谢!

EDITED - 为清楚起见

+0

设计模式?真? –

+0

@Neville - “在特定环境下常见问题的一般可重用解决方案” - 为什么不? – boatingcow

+0

它不仅仅是一个设计模式的域模式 - 大多数人在“四人帮”风格问题的背景下使用设计模式。 –

回答

0

那么它看起来像你一定要有“冠军”,“FIRST_NAME”和“姓”字段。

然后最好有一个像'full_formal_name'这样的第4个字段。
这取决于您想要使用哪些名称以及您希望使用您的网站的用户。

这可能是值得拥有的几个字段, 标题(S),名字,中间名,姓,学历(或任何你想打电话给他们,这也可能是代名,即III)

第二种方式需要更多字段,但用户不必为其全名重新输入数据。

+0

嗨理查德 - 我试图避免有'n'数字田地 - 当有人指出德国“里特”没有田地时会发生什么?该网站(和管理员)打算供全球任何人使用,所以我不确定为常见的西部名称部分创建列是足够的。 – boatingcow

1

首先,我们需要区分“演示”和“存储”之间的问题。您给出的3个示例都是演示问题,可以通过在“标题,名字,姓氏”字段中存储名称轻松进行处理。

捕获数据最明确的方法是为每个部分的名称都有一个带有显式字段的表单。例如,不同的国家对人们如何输入姓名有不同的约定 - 例如,欧洲大陆的大部分用“LASTNAME,firstname”作为填表的惯例。您可以通过为每个名称部分设置明确的表单字段来避免混淆。

我看到存储实现的最灵活的方式是使用“名称部分”的概念,并将名称部分存储在子表中。 您可能需要添加名为“known as”的名称部分。 例如:

table People 
Person_ID d.o.b 
1   1 Jan 1988 
2   3 Feb 1989 
3   11 Oct 2001 

table NameParts 
namepart_ID  description 
1    Title 
2    FirstName 
3    Lastname 
4    Suffix 

table Person_Name 
person_id namepart_id  value 
1   1    Right Hon. 
1   1    Chev. 
1   2    John 
1   2    Barrington 
1   3    Smythe-Doe 
1   4    III 
1   4    OBE 
1   4    LLD 
1   4    MEng 
2   2    Joe 
2   3    Blob 
3   1    Ms 
3   2    Mary 
3   3    Hinge 
+0

感谢您的意见@Neville - 我喜欢您对名称部分的想法,尤其是当它与我们正在开发的应用程序类型一致时。 – boatingcow