Normalizacja tabeli z użytkownikami

0

Mam problem z normalizacja tabeli użytkowników w której znajdują się takie pola :

id_user 
login
password
email
imie
nazwisko
data_urodzenia
miejsce_urodzenia
kraj_stale
miasto_stale
ulica_stale
nr_domu_stale
kraj_tymczasowy
miasto_tymczasowy
ulica_tymczasowy
nr_domu_tymczasowy
telefon_1
telefon_2

Pytania :

  1. Czy nie powinienem czasem stworzyć tabele z polami kraj,miasto,ulica,nr_domu i a do tej tabeli users klucze obce dla adres stały i tymczasowy zamiast powielania tych samych pól? Relacja będzie tutaj jeden do jednego, więc czy to ma jakiś sens? Analogicznie z telefonami.

  2. Czy dla pól miast, krajów, ulic tworzyć osobne tabele gdzie będą przechowywane wszystkie nazwy krajów, miast, ulic czy może wprowadzi to więcej zamieszania w kodzie strony.

  3. Czy Login, hasło, email i poziom_uprawnień użytkownika oddzielić od tabeli users (danych personalnych) czy może lepiej zostawić w tej samej tabeli?

0

Nie musisz zmieniać nic, bo ta tabela jest juz w 3NF. Znaczy, ktos moze sie dowalic, ze kraj jest funkcyjnie zalezny od miasta, ale norlalizowanie tego z tego powodu jest tzw. przenormalizowaniem - czyl daje wiecej szkody niz pozytku.

Jak chcesz miec ja w 4NF to zrób osobna tabele na numery telefonow.

A z dodatkowych sugestii to:

  • Oprocz numeru domu potrzebujesz jeszcze numer mieszkania, bo nie wszyscy mieszkaja w domkach jednorodzinnych.
  • Numer domu powinien byc stringiem, bo niektorzy maja literki przy numerze

Opolski Portal Programistyczny
http://programowanie.opole.pl
http://protechnologia.pl

0

Nie dawało mi to spokoju, wielkie dzięki za rozwianie wątpliwości

0

Weź pod uwagę to, że niektóre stałe są stałe, a niektóre stałe są zmienne :)
Data i miejsce urodzenia są stałe, ale już np. adres zamieszkania niekoniecznie. Jest stały w pewnym okresie. Możesz więc zrobić to na dwa sposoby: albo tabelę ze zmianami danych, albo dajesz sobie osobną tabelę z adresami, w której zapisujesz dodatkowo okres obowiązywania (nie tylko adresy tak możesz potraktować).

0

Taa, trzecia postać normalna, miliardowa do razu.

protechnologia.pl napisał(a)

Nie musisz zmieniać nic, bo ta tabela jest juz w 3NF. Znaczy, ktos moze sie dowalic, ze kraj jest funkcyjnie zalezny od miasta, ale norlalizowanie tego z tego powodu jest tzw. przenormalizowaniem - czyl daje wiecej szkody niz pozytku.

No tak, trzeba w to włożyć pół godziny pracy, a w studenckich projekcikach lepiej tego nie robić.

W rozwiązaniach biznesowych tworzy się oddzielne tabele na adresy użytkowników, natomiast państwa, miasta i często też ulice przechowuje się w oddzielnych tabelach.

0

Z takim podejsciem to nie zdziwiłbym sie jakbys powiedzial, ze zeby miec 3NF to trzeba stworzyc osobna tabele na samo Imie, bo kilka osob moze miec to samo imie...


Opolski Portal Programistyczny
http://programowanie.opole.pl
http://protechnologia.pl

0

Ok, ale Ty w takim razie uzupełnisz słownik wszystkich możliwych imion na świecie.

Nazwy państw i miejscowości, a nawet ulic i kodów pocztowych są zbiorami skończonymi, którymi można uzupełnić tabele słownikowe. I tak się robi, z tej prostej przyczyny, że pozwolenie użytkownikowi na wprowadzanie dowolnych nazw zazwyczaj kończy się tym, że jeden poda jako miejsce zamieszkania "Kraków, Polska", drugi "krakow, polska", a trzeci "karkuw, polkas". Owszem, zawsze można rżnąć głupa i udawać, że był to zamierzony efekt tylko ciekawe kto w to uwierzy.

Natomiast trzymanie w tabeli z danymi o użytkownikach dwóch zestawów danych adresowych zamiast kluczy na nie, jest z praktycznego punktu widzenia niepotrzebnym mnożeniem kolumn i utrudnianiem możliwości wprowadzania zmian, zaś z teoretycznego nie ma nic wspólnego z normalizacją.

0
protechnologia.pl napisał(a)

Z takim podejsciem to nie zdziwiłbym sie jakbys powiedzial, ze zeby miec 3NF to trzeba stworzyc osobna tabele na samo Imie, bo kilka osob moze miec to samo imie...

Danych takich jak imię nie wyciąga się do osobnej tabeli ponieważ nie ma takiej potrzeby. Imię i nazwisko ściśle dotyczą i w jakimś stopniu identyfikują cały rekord, z tego też powodu mogą być częścią klucza biznesowego. Dane takie jak adres i jego składowe trzyma się w osobnej tabeli, m.in. z takich powodów jakie podał somekind. Poza tym adres może się zmieniać i często trzeba przechowywać informację o jego zmianach w czasie. W przypadku trzymania danych o osobie razem z adresem nie ma możliwości dodania nowego adresu, bez zacierania starego albo bez sztucznego powielania całej encji.

0

Dobra... Przekonaliscie mnie... Przyznaje Wam racje...


Opolski Portal Programistyczny
http://programowanie.opole.pl
http://protechnologia.pl

1 użytkowników online, w tym zalogowanych: 0, gości: 1