Trzecia postać normalna mysql

0

W pewnej książce mam opisaną tak trzecią postać normalną. Jeśli mam tabele SzczegoloweDaneCzlonkow o kolumnach:

  • IdentyfikatorCzlonka
  • Imie
  • Nazwisko
  • DataUrodzenia
  • Ulica
  • Miasto
  • Wojewodztwo
  • KodPocztowy
  • Email
  • DataPrzystapienia

To należy ją rozbić na takie dwie tabele:

Tabela KodPocztowy o kolumnach:

  • KodPocztowy
  • Ulica
  • Miasto
  • Wojewodztwo

Oraz tabela SzczegoloweDaneCzlonkow o kolumnach:

  • IdentyfikatorCzlonka
  • Imie
  • Nazwisko
  • DataUrodzenia
  • KodPocztowy
  • Email
  • DataPrzystapienia

I moje pytanie jeśli mam kilka takich samych kodów pocztowych, ale o innej Miejscowości, a potem wyszukuje dane o np.Identyfikatorze członka = 1 i jeśli on ma ten kod pocztowy to skąd mam wiedzieć z jakiej on jest miejscowości jak wyświetli wszystkie rekordy o tym KodziePocztowym? (chodzi o wydobycie danych z dwóch tabel poleceniem INNER JOIN)

0

Nie ma takiej możliwości że kod pocztowych wskazuje na kilka miejscowości. Kod pocztowy jednoznacznie identyfikuje miasto oraz zwykle też dzielnicę/obszar obsługiwany przez jakiś oddział poczty.

0

Pomyliłem się chodziło o taki sam kod pocztowy, ale różne ulicę. Jednak takie polecenie poda odpowiednią miejscowość i Ulicę:

SELECT Imie, Nazwisko, Ulica, Miasto, Wojewodztwo, KodPocztowy.KodPocztowy
FROM Szczegolowedaneczlonkow INNER JOIN KodPocztowy
ON KodPocztowy.KodPocztowy = SzczegoloweDaneCzlonkow.KodPocztowy

W razie kilku takich samych imion i nazwisko można dodać klauzulę where z identyfikatoremczłonka.

0
Shalom napisał(a):

Nie ma takiej możliwości że kod pocztowych wskazuje na kilka miejscowości. Kod pocztowy jednoznacznie identyfikuje miasto oraz zwykle też dzielnicę/obszar obsługiwany przez jakiś oddział poczty.

Tak jest w dużych miastach. Na wsiach jest odwrotnie - wiele wsi ma jeden kod pocztowy.

Ten schemat bazy jest po prostu oderwany od rzeczywistości i nie należy go rozpatrywać.

0

W przypadku innych ulic/miejscowości a takich samym kodzie pocztowym trzeba podawać klauzulę where z identyfikatoremczlonka i to rozwiąże problem?

0

nie, to nie rozwiąże problemu ponieważ ten schemat bazy jest zły. Identyfikatorem w tym przypadku może być para miasto-ulica, ale na pewno nie kod pocztowy

0

To jak to powinny wyglądać te dwie tabele?

0

Załącznik

0

Tak zamodelowana baza jest OK pod warunkiem, że działa w uproszczonym PNA (Pocztowe Numery Adresowe). Jeżeli chcesz modelować dla Polski to wiązanie w ten sposób nie ma sensu. Lepiej jest oprzeć się na odwrotnej relacji tzn. na podstawie bazy TERYT stworzyć sobie tabele dla województw, powiatów, gmin, miast, ulic i rozszerzyć tą ostatnią o kod pocztowy. Wtedy jednym "wielkim" JOINem można pobrać całą strukturę adresu delikwenta na podstawie np. kodu pocztowego.

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