2009-02-18 88 views
6

創建任何信息系統時遇到的最常見問題之一是人們走了這麼多不同的名字。有人命名爲「比爾史密斯」可能會通過「威爾史密斯」,「威廉史密斯」,「史密斯威爾」等...如果說,我想寫一個應用程序鏈接到作者的博客帖子,我將不得不帳戶所有這些名字。你如何處理「一人多名」?

我的問題是:你採取什麼方法來保持整個應用程序的一致性數據。你如何構建數據庫,以便引用單個標識符來查找所有這些名稱?你採取了哪些UI方法來確保人們以一致的方式輸入姓名?

+0

你應該接受這個問題的答案。已經有好幾個月了。 – Sampson 2009-06-28 14:03:28

回答

10

這可能是一個好主意,只接受來自用戶的一個名稱,並允許他們使用「暱稱」或「公共名稱」。這使得他們可以自由擁有合法的名稱,可能用於郵寄或帳單,並且可以在您的網站上公開查看名稱進行交互。

除此之外,我不認爲我會允許我的用戶有多個名稱,除非我的系統需要它。如果我做了,我把它分解成兩個表:

  • 用戶:

    • 用戶ID (例如:1821)
  • 用戶名:

    • 用戶ID (例如:1821)
    • 的firstName (例如:喬納森)
    • lastName的(例如:桑普森)

此外,您可以添加一個字段usernames表稱爲'isPrimary'。這將是一個布爾值,它會告訴你哪個名字被視爲用戶的主要名字。這與維基百科如何存儲數據/更改歷史類似。他們保留所有,但標記哪些是「活躍」,或在你的情況「主要」。

17

只要你有每個用戶的唯一ID(這是他們的名字),你可以有一個名稱的變化映射到一個唯一的ID的表,然後每個崗位與唯一ID相關聯。

 
(Table mapping names to UIDs) 

Name  UID 

Robert S 123456 
Bob S  123456 
Bert S  123456 
Darren  987654 
 
(Table with post information, including author's UID) 

Title  Author ... 

Post 1 123456 
Post 2 123456 
Post 3 987654 
 
(Table with author information) 

UID  Preferred Name Webpage    ... 

123456 Robert Smith  http://www.robert.com 
987654 Darren Jones  http://www.jones.com 

+0

當然。如果某人結婚或更改了姓名,您可能希望他們能夠自行更改自己的網站名稱,而不會中斷與其用戶ID關聯的數據的連續性。 – 2009-02-18 19:12:51

+0

我想我會把「首選名稱」作爲表名上的一個標誌,將名稱映射到UID,因爲它在邏輯上將成爲該列表中的名稱,並因此被非規範化。這是一個非常小的抱怨,但。除此之外,我會想到同樣的解決方案。 +1 – rmeador 2009-02-18 19:57:50

+0

@rmeador是的,看起來Jonathan在他的帖子中提到了一些像旗子的東西;這看起來很合理。 – 2009-02-18 20:07:23

2

這聽起來像你對我都試圖用自己的名字作爲主鍵或UID。這是一個錯誤的路要走。你應該有一個單獨的UID作爲主鍵,然後這個名字可以是任何你想要的,你甚至可以有一個備用名字列表。

2

我同意關於如何架構架構的前3篇文章。

關於用戶界面,我會允許一個字段爲合法的第一,中間和最後一個名字,應該很少改變。

然後根據您的應用程序要求允許暱稱。

具有完整的合法名稱也可以用於計費/財務/人力資源情況。

2

如果您有多個應用程序,並且每個應用程序都有自己的用戶信息架構,則會出現真正的問題。計費系統可能有「威爾史密斯」;工資系統可能有「威廉史密斯」;索賠系統可能有「Willie X. Smith」。所有人都是真正的同一個人。你是做什麼?這對瘦腿,傳統應用來說是一個巨大的問題。

1

你總是可以做一個AKA表,你可以在那裏有更喜歡的名字給AKA名字。所以如果有人使用Bill的名字,你可以隨時用William替換。

我從來沒有親自將這個概念用於名稱,但是我確實支持一個與電影標題類似的項目,它可以針對不同的國家進行改變。