Projektuję bazę danych. Mam gromadzić takie dane jak np. dane klienta, dane sklepu, dane producenta itd. Jednymi z kryteriów wyszukiwania będzie właśnie kod pocztowy i miasto. Czy powinienem zrobić oddzielną tabelę "Miasta" z relacją jeden do wielu z tabelą "KodyPocztowe", czy raczej zrobić takie kolumny w tabelach, które mają mieć jakiś związek z adresami? Województwa zgromadzę w oddzielnej tabeli.
Można by zrobić tabelę Adresy, która zawierała by kod pocztowy,miasto oraz inne dane adresowe. Klient przecież niekoniecznie musi mieć tylko jeden adres
Chodzi mi raczej o to czy opłaca się robić tabelę z nazwami miast i kodów pocztowych, które będą wykorzystywane przez np. tabelę klienci, producenci, magazyny itd. Czy też raczej do każdej z tych tabel dodawać kolumny do przechowywania adresu. Jak to powinno się robić?
Jeśli jednym z kryteriów ma być adres to wystarczy zrobić na nim indeks, nie trzeba robić nowej tabeli.
Ale zrobienie tabeli słownikowej dla miast i nawet dla ulic w miastach może mieć sens, jesli taka baza miałaby działać bardzo długo. Bo nazwa miasta może się zmienić, tak samo jak nazwa ulicy.
Zrobię indeks. Chociaż jeszcze pomyślę nad oddzielną tabelą z nazwami miast kodami i ewentualnie ulicami. Może to też wyeliminować pomyłki podczas dodawania nowego rekordu - literówki itd. kiedy nazwa będzie wybierana z listy.
I co miesiąc będziesz TERYT sprawdzał, by aktualizować słowniki? Bez sensu...
Czyli co proponujesz?
Bez słowników. Tylko indeksy.
Ok. Dzięki za podpowiedzi. Pozdrawiam.
wszystko zalezy od tego jaka masz strukture danych. Jesli mozesz utrzymac relacyjnosc to nalezy dorobic osobna tabele. Zwiazac to relacja tabela danych - slownik.
Wyszukiwanie po polu tekstowym nawet przy indexach jest bardzo nieciekawe.
Z drugiej strony jesli bedziesz wyszukiwal dane znajac wczesniej identyfikator mista (woj, kodu pocztowego, itp, itp) bedzie to duzo latwiejsze.
W duzej mierze decydowac tutaj powinna logika biznesowa.