Bewährte Vorgehensweisen für Felder mit allgemeinen Personen (Name, E-Mail-Adresse, Geschlecht usw.) [geschlossen]

44

Was sind die gängigsten Best Practices für Länge und Datentyp in gemeinsamen Feldern wie:

  • Vorname
  • Familienname, Nachname
  • Adresse
  • Email
  • Geschlechtsverkehr
  • Zustand
  • Stadt
  • Land
  • Telefonnummer

usw....

Snow_Mac
quelle
Diese Frage ist viel zu weit gefasst. Es sollte gelöscht und gelöscht werden.
Evan Carroll

Antworten:

50

Ich würde jeder Reihe von universellen Best Practices gegenüber sehr misstrauisch sein, da in den meisten dieser Bereiche der Teufel im Detail steckt. Nur weil die Informationen relativ häufig sind, bedeutet dies nicht, dass Ihre Anwendung die Daten genauso verwendet, wie andere Anwendungen sie verwenden. Das bedeutet, dass Ihr Datenmodell möglicherweise etwas anders sein muss.

  • Vor- und Nachname: Warum erfassen Sie den Namen? Wenn Sie den vollständigen Namen einer Person erfassen müssen (z. B. wenn Sie juristische Dokumente oder Geburtsurkunden vorbereiten), möchten Sie wahrscheinlich mehr Platz für die Eingabe durch Personen freigeben, als Sie dies tun würden, wenn Sie nur nach dem Namen einer Person fragen Haben Sie etwas, um sie in Ihrer neuen Web-App anzurufen.
  • Adresse: Was machen Sie mit der Adresse? Welche Adressen speichern Sie? Wenn Sie die Adresse einer Immobilie in den USA speichern, für die Sie eine Hypothek aufnehmen, ist es Ihnen wahrscheinlich sehr wichtig, eine vollständig standardisierte Adresse zu erhalten. In diesem Fall möchte das Datenmodell wahrscheinlich sehr genau auf Ihre Adresse eingehen Standardisierungstool kehrt zurück. Wenn Sie nur möchten, dass Benutzer eine Adresse eingeben können, um ein Produkt zu liefern, reichen wahrscheinlich ein paar Zeilen für Freiformtext aus. Die Länge der Zeilen dort hängt möglicherweise von den Anforderungen der nachgeordneten Prozesse ab, die beispielsweise Adressetiketten drucken.
  • Status: Angenommen , Sie können die gültigen Zustandswerte identifizieren, macht es wahrscheinlich sinnvoll , einen erstellen STATETabelle und eine Fremdschlüsselbeziehung zwischen dem Erstellen STATEund ADDRESSTabellen. Die Möglichkeit, die gültigen Werte zu identifizieren, impliziert jedoch, dass Sie den Satz gültiger Adressen zumindest auf einen bestimmten Satz von Ländern beschränken. Das ist für viele Websites in Ordnung, aber dann muss man ein bisschen arbeiten, um ein neues Land zu unterstützen.
  • Stadt: Wenn Sie mit Daten zu tun haben, für die möglicherweise Vorschriften auf Stadtebene gelten (dh für die je nach Stadt unterschiedliche Steuersätze gelten), möchten Sie diese möglicherweise ähnlich wie für den Staat behandeln und haben eine CITYTabelle mit den gültigen Städten und einer Fremdschlüsselbeziehung zwischen den Tabellen CITYund ADDRESS. Wenn Sie jedoch nur versuchen, ein Produkt auszuliefern, und es Ihnen egal ist, ob Sie verschiedene Versionen derselben Stadt in Ihrer Tabelle haben, reicht es aus, den Benutzer in freier Form Text eingeben zu lassen. Wenn Sie Fremdschlüssel speichern, müssen Sie natürlich eine Menge Arbeit aufbringen, um sicherzustellen, dass Sie alle gültigen Werte haben. Aber es gibt Produkte, bei denen der springende Punkt ist, dass das Unternehmen diese Arbeit bereits erledigt hat (dh Umsatzsteuerdatenbanken).
  • Telefon: Was machst du mit Telefonnummern und warum? Einige Anwendungen möchten Telefonnummern in jedem vom Benutzer festgelegten Format eingeben und diese Formatierung für alle nachfolgenden Abfragen beibehalten. Dies ist häufig der Fall, wenn Sie ein persönliches Adressbuch entwerfen, in dem Benutzer ihre eigenen Einstellungen zum Speichern und Anzeigen von Telefonnummern haben. Andere Anwendungen möchten die eingegebene Formatierung ignorieren, nur die numerischen Zeichen extrahieren und dann die Daten beim Abrufen so formatieren, dass alle Telefonnummern eine ähnliche Formatierung haben. Wenn Sie Unternehmen beliefern, möchten Sie möglicherweise ein separates Feld, in das Benutzer eine Nebenstelle eingeben können. Wenn Sie versuchen, einen ausgehenden Anruf zu unterstützen, möchten Sie die Vorwahl und die Landesvorwahl möglicherweise in separaten Spalten speichern, da Sie
  • Geschlecht: Für viele Anwendungen ist es durchaus sinnvoll, einen Geschlechtscode ('M' oder 'F') in einer Tabelle zu speichern. Auf der anderen Seite gibt es Fälle, in denen Sie zusätzliche Optionen wünschen (Andere, Intersex, Transgendered) oder wo Sie etwas wie das Geschlecht bei der Geburt und das aktuelle Geschlecht speichern müssen.
Justin Cave
quelle
Eine interessante Antwort mit vielen Überlegungen - aber ohne nützliche Ideen, die den Menschen helfen könnten, weiterzukommen. Zum Beispiel ist die Telefonsache eine ziemlich einfache Sache, die> = 80% aller Fälle abdeckt: die Zahl, die Sie eingeben können irgendwo, um jemanden am Telefon zu erreichen, vielleicht mit dem Zusatz, dass es auch andere Länder abdecken sollte. also ja, es gibt einen Unterschied von ein paar Zeichen , wenn Sie eine Reihe betrachten mit / ohne Ländervorwahl sein könnte, aber es definitiv ist eine Sache wie die längste Telefonnummer in der Welt und mit diesem plus ein paar mehr ist ziemlich sicher für die meisten Fälle
Henning
24

Sie können auch anhand der Beispieldaten und der erwarteten Zielgruppe raten . Das hängt von Ihrem Standort ab.

Einige Notizen:

Adressen:

Namen:

Telefonnummer: Internationale Vorwahl, Länge, Handy gegen Haus, Handy als einzige Nummer zulassen

gbn
quelle
3
Die letzten beiden Links ("Nachname zuerst" und "Was ist der längste ...") sind defekt.
Marc L.
1
@MarcL. Ich habe den Link "Nachname zuerst" behoben (wenn meine Bearbeitung akzeptiert wird). Die "Was ist die längste ..." SO Fragen wurde als "nicht konstruktiv" geschlossen und gelöscht (Sie können es immer noch sehen, wenn Sie> 10k rep haben).
Axt.
2
Wayback Machine hat den Artikel "Nachname zuerst": web.archive.org/web/20160823135055/http://www.solidether.net/…
Av Pinzur
10

Vergessen Sie nicht, zusätzlich zu den großartigen Antworten oben auch Unicode-Zeichen zu akzeptieren. Nur weil Sie in den USA sind, heißt das noch lange nicht, dass Sie keine fremden Zeichen in Ihre Spalten aufnehmen möchten.

Trotzdem empfehle ich normalerweise 50 Zeichen für Namen. 320 sollte mehr als genug für eine E-Mail-Adresse sein (Sie können den ANSI-Standard überprüfen, um sicherzugehen). Bei Adressfehlern Vorsicht mit 255 Zeichen. Während Sie wahrscheinlich nie eine so große Adresse benötigen werden, können Sie dies tun, wenn Sie C / O-Zeilen und ähnliches einfügen. Die Stadt sollte ziemlich groß sein, da draußen gibt es einige ziemlich lange Städtenamen. Für Staat gehen Sie mit einem Kindertisch, das selbe mit Land. Vergessen Sie für die Postleitzahl nicht die internationalen Postleitzahlen, die länger sind als die US-Postleitzahlen. Nur weil du keine internationale Unterstützung hast, bist du vielleicht immer noch dabei. Es gibt viele US-Bürger, die in verschiedenen Ländern leben, darunter auch Militärangehörige.

Vergessen Sie nicht, dass der Status optional sein sollte, da viele Länder keinen Status haben.

mrdenny
quelle
Bei meinem letzten Projekt habe ich ein Dokument über internationale Poststandards gefunden, in dem 39 als maximale Zeilenlänge angegeben ist. Frankreich hat einen separaten Code für großvolumige Empfänger, der nach der Stadt geht. Ich würde 3 oder 4 freie Formatfelder dieser Größe plus Land erlauben.
BillThor
9

Mein Hintern tut mir weh, weil ich auf dem Zaun sitze, also werfe ich ein paar Antworten raus und hoffe, dass ich nicht in Vergessenheit gerate. Bitte geben Sie konstruktive Kritik.

E-Mail-Addresse:

min: 6 ([email protected]). Oder 3, wenn Sie lokale Domain-E-Mail-Adressen verfolgen möchten,
max .: 320 254 (RFC)

Die Menge an Code zum Überprüfen einer E-Mail ist tatsächlich verrückt. Nehmen wir also an, dass der Code gültig ist, wenn er ein "@" enthält.

Möglicherweise möchten Sie eine E-Mail-Adresse als "Kommunikationsmethode" abstrahieren, damit Sie auf einfache Weise alle Methoden auflisten können, mit denen Sie mit einem Benutzer kommunizieren können.

Geschlecht

Das Geschlecht kann sich im Laufe der Zeit ändern, sodass Sie es nachverfolgen können, wenn es Ihnen wichtig ist. Folgen Sie http://en.wikipedia.org/wiki/ISO/IEC_5218

NOT_KNOWN(0),
MALE(1),
FEMALE(2),
NOT_APPLICABLE(9);

Adressen: NORAM

Ich werde den billigen Ausweg nehmen und mich an nordamerikanische Adressen halten.

Es ist praktisch, Länder, Divisionen, Städte und Landkreise zu abstrahieren, die hauptsächlich steuerpflichtig sind. Steuern können auf vielen Ebenen anfallen. Wenn Sie also einen Steuersatz auf ein abstraktes geografisches Gebiet verweisen können, sind Sie goldrichtig.

GeographicArea :

id: int  
type: {country, division, county, city, indian reservation}  
name: varchar(45)  [1]
abbreviation: nullable varchar(4)  
parent_id: nullable int  

Adresse :

id: int  
postal_area_id: int, references GeographicArea  
county_or_city_id: int, references GeographicArea  
street_address: varchar(255)  
suite: nullable varchar(255)  

Fügen Sie bei Bedarf Zeile2 und Zeile3 hinzu.

Siehe http://en.wikipedia.org/wiki/Address_(geography)

Nun ist eine Adresse eine Adresse. Mehrere Personen können an einer Adresse wohnen, und eine Person kann gleichzeitig und im Laufe der Zeit mehrere Adressen haben. Daher benötigen Sie eine Many-Many-Tabelle.

PartyAdresse

party_id: int references Party  
address_id: int references Address  
purpose: {home, work, ...}  

Fügen Sie a from_dateund nullable hinzu, to_datewenn die Verfolgung über einen längeren Zeitraum erfolgt.

Telefonnummern

Eine Partei kann mehrere Telefonnummern haben, und eine Telefonnummer kann von mehreren Personen verwendet werden. Eine Telefonnummer kann für Faxe, Telefonanrufe, Modems usw. verwendet werden und kann Nebenstellen haben. Diese können sich auch im Laufe der Zeit ändern.

Telefonnummer

id: int  
value: varchar(15) - the max allowed by the ITU  

Die Mindestanzahl kann 3 (für "911") oder 7 ("310-4NET", eine spezielle lokale Nummer, bei der Sie die Vorwahl nicht wählen können) sein.

Sie können dies gegebenenfalls in Ländercodes usw. aufteilen.

Sie sollten den http://en.wikipedia.org/wiki/E.164 Standard verwenden

PartyPhoneNumber

party_id: int references Party  
phone_number_id references PhoneNumber  
extension: nullable varchar(11) - ITU max  
purpose: {home, work, fax, modem, ...}  

Namen

Namen sind hart. Hier ist der Grund:

  1. Einige Leute haben einen legalen Namen mit nur einem Wort darin http://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Einige Leute haben Namen mit vielen Wörtern http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Einige Leute haben mehrere Namen gleichzeitig (zum Beispiel an meiner Universität gibt es viele asiatische Studenten, aber sie mögen "bevorzugte" westlichere Namen)

  4. Manchmal müssen Sie die Namen von Personen im Laufe der Zeit nachverfolgen, z. B. Mädchennamen und Ehenamen.

  5. Sie möchten Einzelpersonen und Organisationen aus einer Vielzahl von guten Gründen abstrahieren

    create table party (ID des großen Primärschlüssels);

    create table party_name (ID des Hauptschlüssels, party_id bigint nicht null referenziert party (id), type smallint nicht null referenziert party_name_type (id) --elided, ex "maiden", "legal");

    create table name_component (id Hauptschlüssel, party_name_id bigint nicht null referenziert party_name (id), type smallint nicht null referenziert name_component_type (id), --elided ex "given" name text nicht null);

Neil McGuigan
quelle
3

Aus einer etwas anderen Perspektive als in den vorherigen Antworten und da es in Ordnung zu sein scheint, über LDAP zu sprechen , kann RFC 4519 - "LDAP (Lightweight Directory Access Protocol): Schema für Benutzeranwendungen" von Interesse sein.

Dies kann hilfreich sein, wenn Ihre Anwendung einem solchen Verzeichnis zugeordnet werden muss. Ansonsten ist es wahrscheinlich nicht an Ihre Anforderungen angepasst.

Bei diesen Definitionen handelt es sich nicht nur um Daten, sondern auch um einige Operatoren, die für die Felder verwendet werden können. postalAddressZum Beispiel ist ein caseIgnoreListSubstringsMatch. Ich schlage nicht vor, dass Sie sich strikt an dieses Schema halten sollten, aber es könnte interessant sein, die Prinzipien zu betrachten, insbesondere, wie Sie Namen und Adressen in Ihrer Anwendung vergleichen müssen, kann für das Design Ihrer Datenbank relevant sein.

Bruno
quelle
3

Verwenden Sie in Bezug auf Namen doppelte Anführungszeichen, um Apostrophe in irischen oder italienischen Namen (z. B. O'Hara oder D'Amato) zu vermeiden.

Ich würde auch empfehlen, einen guten Satz von regulären Ausdrücken zu verwenden, damit Sie Teile Ihrer Namensfelder ausgeben können (z. B. Vorname, Spitzname, Jr / Sr usw.).

KiloVoltaire
quelle
1
Oder niederländische Namen wie mein Nachname.
Colin 't Hart