- IMIĘ, NAZWISKO - typ TEXT daje Ci bezpieczeństwo co do znaków (trzeba tylko zadbać o odpowiednie kodowanie tabeli aby zapewnić dobrą obsługę pełnego zakresu Unicode BMP). NOT NULL chroni Cię przed próbą zapisania pustej wartości. I w praktyce za wiele więcej nie zrobisz. Pytanie jak sprawdzić poprawność imienia i nazwiska? Łatwo - sprawdź czy ciąg zawiera po prostu litery. I tutaj trafiamy na kamień... :) A co z nazwiskami wieloczłonowymi, z myślnikiem, myślnikiem otoczonym spacjami itp. itd. A imiona również mogą być wieloczłonowe... a co ze znakami z innych alfabetów, znakami diaktrycznymi itp. itd. także, imienia i nazwiska bym nie weryfikował, za chwilę napiszę dlaczego...
- telefon - czy na pewno INT to dobry wybór typu? Generalnie numer składa się z cyfr i opcjonalnego znaku plusa. Może lepiej byłoby np. dać tu VARCHAR i weryfikację przeprowadzić przed zapisem, np. regexp najpierw usunąć znaki typu myślnik, spacje, plus itp., a następnie sprawdzić, czy ostateczny ciąg zawiera wyłącznie same cyfry. brak NOT NULL oznacza, że brak numeru telefonu uznajesz za wartość poprawną?
- pesel - to omówię za chwilę,
- miejscowość - patrz pkt. 1
Co do peselu to musi on spełniać dwa kryteria: mieć dokładnie 10 cyfr i przejść walidację tzw. cyfry kontrolnej. Sprawdzenie cyfry kontrolnej polega na pomnożenie każdej cyfry PESEL przez odpowiednią dla niej wagę i zsumowaniu wyników tych działań. Następnie sprawdzeniu, czy reszta z dzielenia otrzymanej sumy przez 10 da w wyniku zero. Wpisz sobie w necie "walidacja pesel" to znajdziesz wiele gotowych algorytmów.
I tutaj powrócę do walidacji imienia i nazwiska. Warto by się zastanowić, jakie jest ryzyko, że ktoś poda błędne imię i błędne nazwisko (np. jakieś zupełnie losowe ciągi znaków itp.) ale jednocześnie poda swój prawdziwy pesel? Wydaje mi się, że znikome, więc walidacja peselu powinna rozwiązać większość problemów. Owszem, zawsze można podać np. zmyślone imię i nazwisko + pesel jakiś znaleziony w necie i wszystko będzie oki. W praktyce jednak nie jesteś w stanie wykryć takich przypadków, a tak na prawdę nie jest to potrzebne. W tabeli proponowałbym więc zmianę pesel na NOT NULL i wymuszenie podania go podczas określania danych personalnych.
Trzeba tylko pamiętać, że w przeszłości zdarzały się pesele wydawane błędnie, które nie przejdą walidacji, ale są uznawane prawnie za poprawne :)
Pytanie tylko na koniec czy tą weryfikację chcesz robić już na danych zapisanych, np. poprzez procedurę składowaną (np. w MySQL) czy przed zapisem, w aplikacji?
Myślę, że najlepiej też gdybyś podała jakieś przykładowe wg Ciebie dane poprawne i błędne, głównie chodzi o te błędne, żeby precyzyjnie dobrać sposób walidacji.