Konfiguruję bardzo małą bazę danych MySQL, która przechowuje imię, nazwisko, adres e-mail i numer telefonu i staram się znaleźć „idealny” typ danych dla każdego pola. Wiem, że nie ma czegoś takiego jak idealna odpowiedź, ale musi istnieć jakaś wspólna konwencja dla powszechnie używanych dziedzin, takich jak te. Na przykład ustaliłem, że niesformatowany numer telefonu w USA jest zbyt duży, aby można go było zapisać jako int bez znaku, musi to być co najmniej bigint.
Ponieważ jestem pewien, że inne osoby prawdopodobnie uznają to za przydatne, nie chcę ograniczać mojego pytania tylko do pól, o których wspomniałem powyżej.
Jakie typy danych są odpowiednie dla wspólnych pól baz danych? Pola takie jak numer telefonu, e-mail i adres?
Oto kilka typowych typów danych, których używam (chociaż nie jestem wielkim profesjonalistą):
źródło
Z mojego doświadczenia wynika, że pola imię / nazwisko powinny mieć co najmniej 48 znaków - są nazwy z niektórych krajów, takich jak Malezja czy Indie, które są bardzo długie w pełnej formie.
Numery telefonów i kody pocztowe należy zawsze traktować jako tekst, a nie liczby. Podawanym normalnym powodem jest to, że istnieją kody pocztowe zaczynające się od 0, aw niektórych krajach numery telefonów mogą również zaczynać się od 0. Ale prawdziwym powodem jest to, że nie są to cyfry - to identyfikatory, które zdarzają się składać cyfr (i to ignoruje kraje takie jak Kanada, które mają litery w swoich kodach pocztowych). Więc przechowuj je w polu tekstowym.
W MySQL możesz używać pól VARCHAR dla tego typu informacji. Chociaż brzmi to leniwie, oznacza to, że nie musisz się zbytnio przejmować odpowiednim minimalnym rozmiarem.
źródło
VARCHAR(255)
mają sens.Ponieważ będziesz mieć do czynienia z danymi o zmiennej długości (imiona i nazwiska, adresy e-mail), chciałbyś użyć VARCHAR. Ilość miejsca zajmowanego przez pole VARCHAR to
[field length]
+ 1 bajt, do maksymalnej długości 255, więc nie przejmowałbym się zbytnio próbą znalezienia idealnego rozmiaru. Spójrz na to, jaka może być najdłuższa długość, którą możesz sobie wyobrazić, a następnie podwoj ją i ustaw jako swój limit VARCHAR. To mówi...:Generalnie ustawiam pola e-mail na VARCHAR (100) - jeszcze nie mam z tym problemu. Nazwy, które ustawiłem na VARCHAR (50).
Jak powiedzieli inni, numery telefonów i kody pocztowe / pocztowe nie są w rzeczywistości wartościami liczbowymi, są to ciągi znaków zawierające cyfry 0-9 (a czasem więcej!), Dlatego należy je traktować jako ciąg. VARCHAR (20) powinien być wystarczający.
Zauważ, że gdybyś zapisywał numery telefonów jako liczby całkowite, wiele systemów założyłoby, że liczba zaczynająca się od 0 jest liczbą ósemkową (podstawa 8)! Dlatego doskonale poprawny numer telefonu „0731602412” zostałby umieszczony w Twojej bazie danych jako liczba dziesiętna „124192010” !!
źródło
Robię mniej więcej to samo i oto co zrobiłem.
Użyłem oddzielnych tabel dla nazwy, adresu, adresu e-mail i liczb, z których każda zawierała kolumnę NameID, która jest kluczem obcym dla wszystkiego, z wyjątkiem tabeli Name, w której jest to podstawowy klucz klastrowy. Użyłem MainName i FirstName zamiast LastName i FirstName, aby umożliwić wpisy biznesowe, a także osobiste, ale możesz nie mieć takiej potrzeby.
Kolumna NameID staje się smallint we wszystkich tabelach, ponieważ jestem prawie pewien, że nie zrobię więcej niż 32000 wpisów. Prawie wszystko inne to varchar (n), od 20 do 200, w zależności od tego, co chcesz przechowywać (urodziny, komentarze, e-maile, naprawdę długie nazwiska). To naprawdę zależy od rodzaju przechowywanych rzeczy.
Odchodzę od tego w tabeli liczb. Ustawiłem go tak, aby miał pięć kolumn z etykietami NameID, Phone #, CountryCode, Extension i PhoneType. Omówiłem już NameID. Numer telefonu to varchar (12) z ograniczeniem sprawdzającym wyglądającym mniej więcej tak: CHECK (numer telefonu, taki jak „[0-9] [0-9] [0-9] - [0-9] [0-9] [0] -9] - [0-9] [0-9] [0-9] [0-9] '). Gwarantuje to, że tylko to, czego chcę, trafia do bazy danych, a dane pozostają bardzo spójne. Kody rozszerzenia i krajów, które nazwałem nullable smallints, ale jeśli chcesz, mogą to być varchar. PhoneType to varchar (20) i nie dopuszcza wartości null.
Mam nadzieję że to pomoże!
źródło