2009-02-18 2 views
6

Eines der häufigsten Probleme bei der Erstellung eines Informationssystems ist die Tatsache, dass die Leute so viele verschiedene Namen haben. Jemand namens "Bill Smith" könnte "Will Smith", "William Smith", "Smith, Will" usw. heißen. Wenn ich zum Beispiel eine Anwendung schreiben würde, um Blog-Posts mit Autoren zu verlinken, müsste ich mich anmelden für all diese Namen.Wie gehen Sie mit "Viele Namen für 1 Person" um?

Meine Frage ist: Welche Ansätze verwenden Sie, um konsistente Daten in Ihrer gesamten Anwendung zu halten. Wie strukturieren Sie Ihre Datenbank so, dass Sie auf einen einzelnen Bezeichner verweisen können, um alle diese Namen zu finden? Welche UI-Ansätze verwenden Sie, um sicherzustellen, dass Personen konsistent Namen eingeben?

+0

Sie sollten eine Antwort auf diese Frage akzeptieren. Es ist mehrere Monate her. – Sampson

Antwort

10

Es ist wahrscheinlich eine gute Idee, nur einen Namen von Ihrem Benutzer zu akzeptieren und ihnen einen "Spitznamen" oder einen "öffentlichen Namen" zu erlauben. Das gibt ihnen die Freiheit, einen legalen Namen zu haben, vielleicht für Mailing oder Abrechnung, und einen öffentlich sichtbaren Namen für die Interaktion auf Ihrer Website.

Darüber hinaus glaube ich nicht, dass ich meinen Benutzern erlauben würde, mehrere Namen zu haben, es sei denn mein System benötigt es. Wenn ich das täte, ich es in zwei Tabellen aufgeteilt würde:

  • Benutzer:

    • userid (ex: 1821)
  • Benutzernamen:

    • userid (ex: 1821)
    • vorName (ex: Jonathan)
    • nachName (ex: Sampson)

Darüber hinaus könnten Sie ein Feld hinzufügen, in die usernames Tabelle mit dem Namen 'isPrimary'. Dies wäre ein boolescher Wert, der Ihnen sagt, welcher Name als primärer Name für den Benutzer gilt. Dies ist ähnlich wie Wikipedia speichert eine Geschichte von Daten/Änderungen. Sie behalten alle, aber markieren Sie, was "aktiv" ist, oder in Ihrem Fall "primär".

17

Solange Sie für jeden Benutzer eine eindeutige ID haben (nicht deren Name), können Sie eine Tabelle erstellen, die Namensvarianten einer eindeutigen ID zuordnet und dann jeden Beitrag dieser eindeutigen ID zuordnet.

 
(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

Definitiv. Wenn jemand heiratet oder seinen Namen ändert, möchten Sie wahrscheinlich, dass er einfach nur seinen Namen auf Ihrer Website ändern kann, ohne die Kontinuität der Daten zu stören, die mit seiner Benutzer-ID verknüpft sind. –

+0

Ich denke, ich würde "Preferred Name" ein Flag in der Tabelle sein, die Namen auf UIDs abbildet, da es logischerweise ein Name in dieser Liste ist und somit denormalisiert wird. Das ist ein ziemlich kleiner Fehler. Ansonsten hätte ich dieselbe Lösung gefunden. +1 – rmeador

+0

@rmeador Ja, es sieht so aus, als ob Jonathan etwas wie die Flagge in seinem Post erwähnt hätte; Es scheint ziemlich logisch zu sein. –

2

Es klingt für mich wie Sie ihren Namen als Primärschlüssel oder UID zu verwenden versuchen. Das ist der falsche Weg. Sie sollten eine separate UID als Primärschlüssel haben, dann kann der Name sein, was Sie wollen, und Sie können sogar eine Liste alternativer Namen haben.

+0

Datenbank Puristen (wie Joe Celko) würde anders argumentieren. Tabellenschlüssel sollten "natürliche" Schlüssel sein. Erstellen einer künstlichen ID würde als der falsche Weg betrachtet werden. Dies ist jedoch eine ziemlich übliche Art, mit dem Problem umzugehen, aber es ist keine Frage von "richtig oder falsch". Du bist zu schwarz und weiß. –

+0

@Mystere Man: Argument, dass Sie ein Feld wie einen Namen, der sich ändern oder ein Duplikat als Primärschlüssel oder UID verwenden kann, ist ziemlich dumm. Ich kann mir nicht vorstellen, wie Sie diese Idee bekommen haben, aber bitte verbreiten Sie diese Art von Ideen nicht. – GEOCHET

+0

ein natürlicher Schlüssel für einen Tabellenschlüssel wäre schön, aber nicht, wenn dieser natürliche Schlüssel die Grundlagen einer UID verletzen würde. – TheTXI

2

Ich stimme den ersten drei Posts zur Strukturierung Ihres Schemas zu.

In Bezug auf die Benutzeroberfläche würde ich ein Feld für die Personen legal ersten, mittleren und Nachnamen erlauben, die sehr selten ändern sollte.

Dann erlauben Nickname (n) je nach Ihren Anforderungen an die Anwendung.

Ihr vollständiger offizieller Name kann sich auch für Abrechnungs-/Finanz-/HR-Situationen als nützlich erweisen.

+0

Manchmal ändern Leute ihren legalen Namen aus anderen Gründen als Ehe. –

+0

guten Punkt, ich reformierte es. – Element

2

Das eigentliche Problem tritt auf, wenn Sie mehrere Anwendungen haben und jedes über ein eigenes Schema für Benutzerinformationen verfügt. Das Abrechnungssystem könnte "Will Smith" haben; das Gehaltsabrechnungssystem könnte "William Smith" haben; das Versicherungssystem könnte "Willie X. Smith" haben. Alle sind wirklich die gleiche Person. Wie geht's? Es ist ein großes Problem für Stovepipe, Legacy-Apps.

1

Sie könnten immer eine AKA-Tabelle erstellen, wo Sie den Vornamen AKA-Namen haben könnten. Wenn also jemand den Namen Bill benutzt, kannst du ihn immer durch William ersetzen.

Ich habe dieses Konzept nie persönlich für Namen verwendet, aber ich unterstütze ein Projekt, das mit Movie Titles etwas Ähnliches macht, das für verschiedene Länder variiert werden kann.

Verwandte Themen