Najlepsze praktyki dotyczące pól zwykłych osób (imię i nazwisko, adres e-mail, adres, płeć itp.) [Zamknięte]

Odpowiedzi:

50

Byłbym bardzo podejrzliwy wobec jakiegokolwiek zestawu uniwersalnych najlepszych praktyk, ponieważ w większości tych dziedzin diabeł tkwi w szczegółach. To, że informacje są dość powszechne, nie oznacza, że ​​aplikacja korzysta z danych dokładnie w taki sam sposób, jak inne aplikacje. Oznacza to, że Twój model danych może być nieco inny.

  • Imię i nazwisko: Dlaczego przechwytujesz imię? Jeśli masz obowiązek przechwycenia pełnego imienia i nazwiska osoby (tj. Przygotowujesz dokumenty prawne lub akty urodzenia), prawdopodobnie chcesz dać ludziom więcej miejsca na pisanie niż gdybyś tylko prosił o imię i nazwisko osoby, więc wezwać ich w nowej aplikacji internetowej.
  • Adres: co zamierzasz zrobić z adresem? Jakie adresy przechowujesz? Jeśli przechowujesz adres nieruchomości w Stanach Zjednoczonych, na której tworzysz hipotekę, prawdopodobnie bardzo zależy ci na uzyskaniu w pełni znormalizowanego adresu, w którym to przypadku model danych prawdopodobnie będzie chciał bardzo blisko pod dowolnym adresem narzędzie normalizacyjne zwraca. Jeśli chcesz tylko, aby ludzie mogli wpisać adres w celu dostarczenia produktu, prawdopodobnie wystarczy kilka wierszy tekstu swobodnego. Długość linii może zależeć od wymagań dalszych procesów, które wykonują takie czynności jak drukowanie etykiet adresowych.
  • Stan: Zakładając, że możesz zidentyfikować prawidłowe wartości stanu, prawdopodobnie sensowne jest utworzenie STATEtabeli i utworzenie relacji klucza obcego między tabelami STATEa ADDRESS. Ale możliwość zidentyfikowania prawidłowych wartości oznacza, że ​​ograniczasz zestaw prawidłowych adresów przynajmniej do określonego zestawu krajów. To jest w porządku dla wielu stron, ale musisz trochę popracować, aby wesprzeć nowy kraj.
  • Miasto: jeśli masz do czynienia z danymi, w których istnieją potencjalnie regulacje na poziomie miasta (tj. W których istnieją różne rodzaje stawek podatkowych, które są stosowane w zależności od miasta), możesz chcieć traktować je jak państwo i mieć CITYtabela z prawidłowymi miastami i relacja klucza obcego między tabelami CITYa ADDRESS. Z drugiej strony, jeśli próbujesz tylko dostarczyć produkt i nie obchodzi Cię, czy masz w tabeli różne wersje tego samego miasta, wystarczy, że użytkownik wprowadzi dowolny tekst. Oczywiście, jeśli przechowujesz klucze obce, będziesz mieć sporo pracy, aby upewnić się, że masz wszystkie prawidłowe wartości. Ale są produkty, w których chodzi o to, że firma już wykonała tę pracę (np. Bazy danych podatków od sprzedaży).
  • Telefon: co robisz z numerami telefonów i dlaczego? Niektóre aplikacje będą chciały pobierać numery telefonów w dowolnym formacie, który użytkownik zdecyduje się wprowadzić, i zachować to formatowanie dla wszystkich kolejnych zapytań. Byłoby to powszechne, jeśli projektujesz osobistą książkę adresową, w której użytkownicy mają własne preferencje dotyczące sposobu przechowywania i wyświetlania numerów telefonów. Inne aplikacje chciałyby zignorować wprowadzone formatowanie, wyodrębnić tylko znaki numeryczne, a następnie sformatować dane przy pobieraniu, aby wszystkie numery telefonów miały podobne formatowanie. Jeśli prowadzisz działalność dla firm, możesz potrzebować osobnego pola dla użytkowników, aby wprowadzić rozszerzenie. Jeśli próbujesz wesprzeć proces połączeń wychodzących, możesz chcieć przechowywać numer kierunkowy i kod kraju w osobnych kolumnach, ponieważ „
  • Płeć: w przypadku wielu aplikacji jest całkowicie rozsądne przechowywanie kodu płci („M” lub „F”) w tabeli. Z drugiej strony zdarzają się sytuacje, w których możesz chcieć dodatkowych opcji (Inne, Interseksualne, Transseksualne) lub gdy musisz przechowywać coś takiego jak płeć w chwili urodzenia i aktualna płeć.
Justin Cave
źródło
interesująca odpowiedź z mnóstwem rzeczy do przemyślenia - ale nie ma żadnego przydatnego pomysłu, aby pomóc ludziom dotrzeć dalej ... na przykład telefon to prosta sprawa, która obejmie> = 80% przypadków: liczbę, którą możesz wpisać gdzieś, aby skontaktować się z kimś przez telefon, może z dodatkiem, że powinien on obejmować również inne kraje. tak tak, istnieje różnica kilku znaków, jeśli wziąć pod uwagę szereg może być z / bez prefiksu kraju, ale z pewnością jest rzeczą jak najdłuższy numer telefonu na świecie i za pomocą tego plus kilka innych jest całkiem bezpieczny dla większości sprawy
Henning
24

Równie dobrze możesz zgadywać na podstawie przykładowych danych i oczekiwanych odbiorców. To zależy od twojej lokalizacji.

Niektóre uwagi:

Adresy:

Nazwy:

Numer telefonu: międzynarodowy kod, długość, komórka a dom, zezwól na telefon jako jedyny numer

gbn
źródło
3
Ostatnie dwa linki („Last First First” i „What is najdłuższy ...”) są zepsute.
Marc L.
1
@MarcL. Naprawiłem link „Nazwisko” (jeśli moja edycja zostanie zaakceptowana). Pytanie „Co jest najdłuższe ...” zostało zamknięte jako „niekonstruktywne” i usunięte (nadal możesz je zobaczyć, jeśli masz> 10 000 powtórzeń).
siekiera.
2
Wayback Machine ma artykuł „Last Name First”: web.archive.org/web/20160823135055/http://www.solidether.net/…
Av
10

Oprócz świetnych odpowiedzi powyżej nie zapomnij zaakceptować znaków Unicode. To, że jesteś w USA, nie oznacza, że ​​nie chcesz akceptować obcych znaków w swoich kolumnach.

To powiedziawszy, zwykle polecam 50 znaków dla nazwisk. 320 powinno wystarczyć dla adresu e-mail (możesz sprawdzić standard ANSI, aby się upewnić). Błąd adresu po stronie ostrzeżenia z 255 znakami. Chociaż prawdopodobnie nigdy nie będziesz potrzebować tak dużego adresu, możesz to zrobić, jeśli podasz linie C / O i takie tam. Miasto powinno być dość duże, istnieje kilka całkiem długich nazw miast. Do państwa należy przejść ze stolikiem dziecięcym, podobnie jak w kraju. W przypadku kodu pocztowego nie zapomnij o międzynarodowych kodach pocztowych, które są dłuższe niż amerykańskie kody pocztowe. Tylko dlatego, że nie wspierasz międzynarodowych, nadal możesz być. Istnieje wielu obywateli USA, którzy mieszkają w różnych krajach, w tym wojskowych.

Nie zapominaj, że stan powinien być opcjonalny, ponieważ wiele krajów nie ma takich stanów.

mrdenny
źródło
W moim ostatnim projekcie znalazłem dokument dotyczący międzynarodowych standardów pocztowych, w którym wskazano 39 jako maksymalną długość linii. Francja ma osobny kod dla odbiorców o dużej objętości, którzy jeżdżą po mieście. Pozwoliłbym na 3 lub 4 pola o dowolnym formacie tego rozmiaru plus kraj.
BillThor
9

Mój tyłek robi się obolały od siedzenia na płocie, więc zamierzam po prostu rzucić kilka odpowiedzi i mam nadzieję, że nie zostanę odrzucony w zapomnienie. Proszę o konstruktywną krytykę.

Adres e-mail:

min: 6 ([email protected]). Lub 3, jeśli chcesz śledzić adresy e-mail domeny lokalnej
maks .: 320 254 (RFC)

Ilość kodu do sprawdzenia poprawności wiadomości e-mail jest w rzeczywistości szalona, ​​więc załóżmy, że jest poprawna, jeśli ma znak „@”

Możesz wyodrębnić adres e-mail jako „metodę komunikacji”, aby łatwo wymienić wszystkie metody komunikacji z użytkownikiem.

Płeć

Płeć może się zmieniać z czasem, więc możesz to śledzić, jeśli jest to dla Ciebie ważne. Śledź http://en.wikipedia.org/wiki/ISO/IEC_5218

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

Adresy: NORAM

Wybieram tanie wyjście i trzymam się adresów w Ameryce Północnej.

Jest dogodny do abstrakcyjnych krajów, oddziałów, miast i powiatów głównie ze względu na podatki. Podatki mogą obowiązywać na wielu poziomach, więc jeśli możesz wskazać stawkę podatku na abstrakcyjny obszar geograficzny, jesteś złoty.

GeographicArea :

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

Adres :

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

Dodaj linię 2 i linię 3, jeśli potrzebujesz.

Zobacz http://en.wikipedia.org/wiki/Address_(geografia)

Teraz adres jest adresem. Wiele osób może mieszkać pod jednym adresem, a dana osoba może mieć wiele adresów jednocześnie i na przestrzeni czasu, więc potrzebujesz do tego wielu tabel.

Adres imprezy

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

Dodaj from_datei zeruj, to_datejeśli śledzenie w czasie.

Numery telefoniczne

Strona może mieć wiele numerów telefonów, a numer telefonu może być używany przez wiele osób. Numer telefonu może być używany do faksowania, połączeń telefonicznych, modemów itp. I może mieć rozszerzenia. Wszystko to może się z czasem zmienić.

Numer telefonu

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

Min może wynosić 3 (dla „911”), a może 7 („310-4NET”, który jest specjalnym rodzajem numeru lokalnego, który nie pozwala na wybranie numeru kierunkowego)

W razie potrzeby możesz podzielić ten kod na kod kraju itp.

Powinieneś użyć standardu 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, ...}  

Nazwy

Nazwy są trudne. Dlatego:

  1. Niektóre osoby mają legalną nazwę z tylko jednym słowem http://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Niektóre osoby mają nazwy z wieloma słowami http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Niektóre osoby mają wiele nazwisk jednocześnie (na przykład na moim uniwersytecie jest wielu studentów azjatyckich, ale lubią używać „preferowanych” bardziej zachodnich nazw)

  4. Czasami trzeba śledzić nazwiska osób, takie jak nazwiska panieńskie i nazwiska małżeńskie.

  5. Chcesz wyodrębnić osoby i organizacje z wielu ważnych powodów

    utworzyć przyjęcie przy stole (identyfikator klucza głównego o dużym numerze);

    utwórz tabelę nazwa_partycji (identyfikator klucza głównego, id_partycji, identyfikator_partycji bigint nie jest zerową referencją partia (id), wpisz smallint nie zerowe referencje typ_partycji (id) - pomoc, ex „dziewica”, „legal”);

    utwórz tabelę nazwa_składnika (identyfikator duży klucz podstawowy, nazwa_partycji_id nie jest odwołaniem zerowym nazwa_partycji (id), wpisz smallint nie zerowe odwołanie typ_komponentu (id), --elided ex "podany" tekst nazwa nie jest pusty);

Neil McGuigan
źródło
3

Z nieco innej perspektywy niż poprzednie odpowiedzi, a ponieważ wydaje się w porządku mówić o LDAP , RFC 4519 - „Lightweight Directory Access Protocol (LDAP): Schemat dla aplikacji użytkownika” może być interesujący.

Może to być przydatne, jeśli twoja aplikacja musi być zmapowana do takiego katalogu. W przeciwnym razie prawdopodobnie nie będzie dostosowany do twoich wymagań.

Te definicje dotyczą nie tylko danych, ale także niektórych operatorów, których można używać na polach. postalAddress, na przykład jest caseIgnoreListSubstringsMatch. Nie sugeruję, abyś ściśle przestrzegał tego schematu, ale przyjrzenie się zasadom może być interesujące, w szczególności sposób porównania nazwy i adresów w aplikacji może być istotny dla projektu bazy danych.

Bruno
źródło
3

Jeśli chodzi o imiona, rozważ użycie cudzysłowów, aby nie musieć uciekać od apostrofów w nazwach irlandzkich lub włoskich (np. O'Hara lub D'Amato).

Polecam również uzyskanie dobrego zestawu wyrażeń regularnych do użycia, abyś mógł wypisywać części swoich pól nazw (np. Pierwsza inicjał, pseudonim, Jr / Sr itp.).

KiloVoltaire
źródło
1
Lub holenderskie nazwiska, takie jak moje nazwisko.
Colin 't Hart