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