Best practice nei campi delle persone comuni (nome, email, indirizzo, genere ecc ...) [chiuso]


44

Quali sono le migliori pratiche più comuni su lunghezza e tipo di dati su campi comuni come:

  • Nome di battesimo
  • Cognome
  • Indirizzo
  • E-mail
  • Sesso
  • Stato
  • Città
  • Nazione
  • Numero di telefono

eccetera....


Questa domanda è WAYYY in senso lato. Dovrebbe essere eliminato ed eliminato.
Evan Carroll

Risposte:


50

Tenderei ad essere molto sospettoso di qualsiasi insieme di migliori pratiche universali perché, per la maggior parte di questi campi, il diavolo è nei dettagli. Solo perché le informazioni sono relativamente comuni non significa che l'applicazione utilizzi i dati esattamente nello stesso modo in cui le usano altre applicazioni. Ciò significa che il tuo modello di dati potrebbe dover essere leggermente diverso.

  • Nome e cognome: perché stai acquisendo il nome? Se hai l'obbligo di acquisire il nome legale completo di una persona (cioè stai preparando documenti legali o certificati di nascita), probabilmente vorrai consentire più spazio alle persone da digitare rispetto a quanto faresti se stai solo chiedendo il nome di una persona in modo da avere qualcosa da chiamare nella tua nuova app web.
  • Indirizzo: che cosa hai intenzione di fare con l'indirizzo? Che tipo di indirizzi stai memorizzando? Se stai memorizzando l'indirizzo di una proprietà negli Stati Uniti su cui stai creando un mutuo, probabilmente ti preoccupi molto di ottenere un indirizzo completamente standardizzato nel qual caso il modello di dati probabilmente vorrà andare molto vicino a qualunque sia il tuo indirizzo ritorni strumento di standardizzazione. Se vuoi solo che le persone siano in grado di digitare un indirizzo per consegnare un prodotto, probabilmente sono sufficienti un paio di righe per il testo a mano libera. La lunghezza delle linee può dipendere dai requisiti dei processi a valle che fanno cose come stampare le etichette degli indirizzi.
  • Stato: supponendo che sia possibile identificare i valori di stato validi, probabilmente ha senso creare una STATEtabella e creare una relazione di chiave esterna tra le tabelle STATEe ADDRESS. Ma la capacità di identificare i valori validi implica che stai limitando il set di indirizzi validi almeno a un determinato set di paesi. Va bene per molti siti, ma poi devi fare un po 'di lavoro per supportare un nuovo paese.
  • Città: se hai a che fare con dati in cui sono potenzialmente in vigore normative a livello di città (ovvero dove ci sono diversi tipi di aliquote fiscali applicate in base alla città), potresti volerli trattare in modo simile allo stato e avere un CITYtabella con le città valide e una relazione di chiave esterna tra le tabelle CITYe ADDRESS. D'altra parte, se stai solo cercando di ottenere un prodotto consegnato e non ti interessa molto se hai diverse versioni della stessa città nella tua tabella, lasciare che l'utente in formato libero inserisca il testo è sufficiente. Naturalmente, se stai memorizzando chiavi esterne, avrai una buona dose di lavoro per assicurarti di avere tutti i valori validi. Ma ci sono prodotti in cui il punto è che la società ha già fatto quel lavoro (ad es. Database delle imposte sulle vendite).
  • Telefono: cosa stai facendo con i numeri di telefono e perché? Alcune applicazioni vorranno inserire i numeri di telefono in qualunque formato l'utente decida di inserirli e conservare tale formattazione per tutte le successive query. Ciò sarebbe comune se si sta progettando una rubrica personale in cui gli utenti hanno le proprie preferenze su come i numeri di telefono vengono memorizzati e visualizzati. Altre applicazioni vorrebbero ignorare la formattazione inserita, estrarre solo i caratteri numerici e quindi formattare i dati al momento del recupero in modo che tutti i numeri di telefono abbiano una formattazione simile. Se fai catering per le aziende, potresti voler inserire un campo separato per gli utenti per inserire un'estensione. Se stai tentando di supportare un processo di chiamata in uscita, potresti voler memorizzare il prefisso e il prefisso nazionale in colonne separate perché "
  • Genere: per molte applicazioni, è perfettamente ragionevole memorizzare un codice di genere ('M' o 'F') in una tabella. D'altra parte, ci sono casi in cui potresti desiderare opzioni aggiuntive (Altro, Intersex, Transgender) o in cui è necessario archiviare qualcosa come il genere alla nascita e il genere attuale.

risposta interessante con molte cose a cui pensare - ma mancando di qualche idea utile per aiutare le persone ad andare oltre ... ad esempio il telefono c'è una cosa abbastanza semplice che coprirà> = 80% dei casi: il numero che puoi digitare da qualche parte per raggiungere qualcuno al telefono, forse con l'aggiunta che dovrebbe coprire anche altri paesi. quindi sì, c'è una differenza di pochi caratteri, se si considera un numero potrebbe essere con / senza il prefisso paese, ma c'è sicuramente è una cosa del genere il numero di telefono più lungo del mondo e l'utilizzo di questo, più un paio di più è abbastanza sicuro per la maggior parte casi
Henning

24

Puoi anche indovinare in base ai dati di esempio e al pubblico previsto. Dipende dalla tua posizione.

Alcune note:

indirizzi:

nomi:

Numero di telefono: prefisso internazionale, lunghezza, cellulare vs casa, consente il cellulare come unico numero


3
Gli ultimi due collegamenti ("Nome per primo" e "Qual è il più lungo ...") sono interrotti.
Marc L.,

1
@MarcL. Ho corretto il link "Cognome Nome" (se la mia modifica viene accettata). Le domande SO di "Qual è il più lungo ..." sono state chiuse come "non costruttive" ed eliminate (puoi ancora vederle se hai> 10k rep).
ax.

2
Wayback Machine ha l'articolo "Cognome Nome": web.archive.org/web/20160823135055/http://www.solidether.net/…
Av Pinzur

10

Oltre alle ottime risposte sopra, non dimenticare di accettare caratteri unicode. Solo perché sei negli Stati Uniti non significa che non vuoi accettare caratteri stranieri nelle tue colonne.

Detto questo, di solito raccomando 50 caratteri per i nomi. 320 dovrebbe essere più che sufficiente per un indirizzo e-mail (puoi essere sicuro dello standard ANSI). Per errore di indirizzo sul lato della cautela con 255 caratteri. Anche se probabilmente non avrai mai bisogno di un indirizzo così grande, potresti includere linee C / O e cose del genere. La città dovrebbe essere piuttosto grande, ci sono alcuni nomi di città piuttosto lunghi là fuori. Per lo stato vai con una tabella figlio, lo stesso con il paese. Per il codice postale non dimenticare i codici postali internazionali che sono più lunghi dei codici postali statunitensi. Solo perché non supporti internazionale potresti essere. Ci sono molti cittadini statunitensi che vivono in diverse contee, compresi i militari.

Non dimenticare che lo stato dovrebbe essere facoltativo poiché molti paesi non hanno stati.


Nel mio ultimo progetto, ho trovato un documento sugli standard postali internazionali che indicava 39 come lunghezza massima della linea. La Francia ha un codice separato per i destinatari di grandi volumi che inseguono la città. Consentirei 3 o 4 campi in formato libero di queste dimensioni più il Paese.
BillThor,

9

Il mio sedere sta diventando dolorante da seduto sul recinto, quindi ho intenzione di buttare via alcune risposte e spero di non essere votato all'oblio. Si prega di offrire critiche costruttive.

Indirizzo email:

min: 6 (a@g.cn). Oppure 3 se si desidera tenere traccia degli indirizzi e-mail del dominio locale
max: 320 254 (RFC)

La quantità di codice per convalidare un'e-mail è in realtà folle, quindi supponiamo che sia valida se ha un "@"

Potresti voler astrarre un indirizzo email come "metodo di comunicazione", in modo da poter elencare facilmente tutti i metodi con cui comunicare con un utente.

Genere

Il genere può cambiare nel tempo, quindi puoi rintracciarlo se è importante per te. Segui http://en.wikipedia.org/wiki/ISO/IEC_5218

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

Indirizzi: NORAM

Prenderò la via più economica e mi atterrò agli indirizzi nordamericani.

È conveniente astrarre paesi, divisioni, città e contee principalmente a causa della tassazione. Le tasse possono essere applicate a molti livelli, quindi se puoi indicare un'aliquota fiscale in un'area geografica astratta, sei d'oro.

GeographicArea :

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

Indirizzo :

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

Aggiungi line2 e line3 se necessario.

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

Ora, un indirizzo è un indirizzo. Più persone possono vivere a un indirizzo e una persona può avere più indirizzi contemporaneamente e nel tempo, quindi è necessario disporre di una tabella molte per questo.

PartyAddress

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

Aggiungi a from_datee nullable to_datese traccia nel tempo.

Numeri di telefono

Una parte può avere più numeri di telefono e un numero di telefono può essere utilizzato da più persone. Un numero di telefono può essere utilizzato per fax, chiamate telefoniche, modem, ecc. E può avere interni. Anche questi possono cambiare nel tempo.

Numero di telefono

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

Il min potrebbe essere 3 (per "911") o forse 7 ("310-4NET", che è un tipo speciale di numero locale che non consente di comporre il prefisso)

Puoi dividerlo in prefisso internazionale, ecc. Se necessario.

Dovresti usare lo standard http://en.wikipedia.org/wiki/E.164

PartyPhoneNumber

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

nomi

I nomi sono difficili. Ecco perché:

  1. Alcune persone hanno un nome legale con una sola parola al suo interno http://it.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Alcune persone hanno nomi con molte parole http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Alcune persone hanno più nomi contemporaneamente (ad esempio, nella mia università ci sono molti studenti asiatici, ma a loro piace usare nomi "preferiti" più occidentalizzati)

  4. A volte, è necessario tenere traccia dei nomi delle persone nel tempo, come nomi da nubile e nomi sposati.

  5. Vuoi astrarre individui e organizzazioni per una serie di buoni motivi

    creare table party (id chiave primaria bigserial);

    crea una tabella party_name (id chiave primaria bigserial, party_id bigint non riferimenti null party (id), digita smallint non riferimenti null party_name_type (id) --elided, ex "maiden", "legal");

    crea la tabella name_component (id chiave primaria bigserial, nome_ party_id bigint non riferimenti null nome_ party (id), digita smallint non riferimenti null nome_component_type (id), --elided ex "nome" testo non nullo);


3

Da una prospettiva leggermente diversa rispetto alle risposte precedenti e poiché sembra corretto parlare di LDAP , RFC 4519 - "Lightweight Directory Access Protocol (LDAP): Schema for User Applications" potrebbe essere interessante.

Può essere utile se l'applicazione deve essere mappata su tale directory. Altrimenti, probabilmente non è adattato alle tue esigenze.

Queste definizioni non riguardano solo i dati, ma anche alcuni operatori che possono essere utilizzati nei campi. postalAddress, ad esempio è a caseIgnoreListSubstringsMatch. Non sto suggerendo che dovresti aderire rigorosamente a questo schema, ma osservare i principi potrebbe essere interessante, in particolare il modo in cui potresti dover confrontare il nome e gli indirizzi nella tua applicazione potrebbe essere rilevante per la progettazione del tuo database.


3

Per quanto riguarda i nomi, prendi in considerazione l'uso delle virgolette in modo da non dover sfuggire agli apostrofi con nomi irlandesi o italiani (ad esempio O'Hara o D'Amato).

Ti consiglierei anche di usare un buon set di espressioni regolari, in modo da poter produrre parti dei campi del tuo nome (es. Prima iniziale, soprannome, Jr / Sr, ecc.).


1
O nomi olandesi come il mio cognome.
Colin 't Hart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.