Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacje między wieloma tabelami
Forum PHP.pl > Forum > Bazy danych > MySQL
symonides
Cześć, zastanawiam się jak rozwiązać problem relacji między tabelami, miasto, województwo, kraj oraz tabelą ogłoszeń. Chciałbym to zrobić w taki sposób aby wyciągnięcie ogłoszeń z jakiegoś wybranego miasta nie było problematyczne i przekombinowane. Początkowo myślałem o osobne tabeli przechowującej id miasta, województwa, i państwa w osobnej tabeli oraz id tego rekordu w tabeli ogłoszeń, później żeby id ogłoszenia trzymać w tej samej tabeli co id lokalizacji. Wdaje mi się to średnio trafione rozwiązanie. Jak wy byście to rozwiązali? Proszę o propozycje.

Pozdrawiam
ayeo
Kod
# Country (kraj)
## name
## symbol (pl)
# Province (województwo)
## name (kujawsko-pomorskie)
## country_id
# District (powiat)
## name (Toruń)
## province_id
# Community (gmina)
## name
## district_id
# Town (miejscowość)
## name (Trouń)
## community_id
## has_city_status (czy ma prawa miejskie)


Moim zdaniem tak powinna wyglądać struktura. Jeszcze tabele z kodami pocztowymi biggrin.gif. Dane można cachować (delikatna nadmiarowość) na poziomie gminy. Można zrobić jedną tabelę na te dane *geo_objects*:

# id
# field_type (country,province,district,.....)
# field_value (konkretna warość)
# refference_type (do czego się odnosi, na przykład gmina do powiatu)
# refference_id
# metadata (jakieś dodatkowe dane, kody iso)

Nie wiem na ile ma to sens...

Pozdrawiam!
symonides
Obawiam, że źle mnie zrozumiałeś, albo ja nieumiejętnie wyjaśniłem smile.gif przelałem z kartki na kompa i powinno lepiej widać.

Chodzi o to, że nie wiem jak najlepiej połączyć lokalizację ogłoszenia z samym ogłoszeniem. Dodatkowa tabela pewnie, tylko tyle, że ja mam kilka koncepcji, ale jakoś żadna mi się nie podoba. Chciałbym to zrobić tak, żeby wyjmowanie ogłoszeń danego miasta, województwa, czy państwa i tego typu rzeczy nie stanowiło problemu.
ayeo
Nie stanowi. W ogłoszeniu oprócz samego id miasta możesz zapisać id powiaty i województwa. Jak nie chcesz modyfikować tabeli ogłoszeń to osobną z refferencją. Chyba, że dalej nie rozumiem...

edit: ogłoszenie może należeć do wielu miast? lub może nie należeć do miasta w ogóle (należy do całego powiatu)?

edit2: 2x masz modele nazwane w liczbie mnogiej, a 2x w liczbie pojedynczej tongue.gif Jakaś konwencja? biggrin.gif
symonides
Robione na szybko, żeby zobrazować : ) Nazwy tabel w mnogiej powinny być.

O tym czy ogłoszenie może należeć do wielu miast, województw, czy do żadnego to nie pomyślałem, ale załóżmy że może. Trzymania aż trzech kluczy obcych w tabeli z ogłoszeniami nie widzi mi się i co wtedy gdy nie będzie należeć do miasta, a tylko do województwa, poza tym jest to zależne też od szczegółowości podziału terytorialnego państwa(będzie trzeba edytować tabelę z ogłoszeniami w razie dodania miast i wsi, zamiast np. tylko miast).

Chyba jednak najlepsza będzie osobna tabela z id ogłoszenia, no i właśnie jest problem, bo jak mam id miasta to wszystko co nad nim to znam, więc w tej tabeli wystarczą tylko trzy kolumny id, ad_id oraz place_id(czyli np. województwo, miasto) i w razie wielu miejsc dla ogłoszenia dodajemy nowy rekord. Co o tym myślisz? I jeszcze kilka pytań, czy kolumna z id jest potrzebna w takiej tabeli oraz czy brak relacji między tabelą places a countries, provinces, itd. może stanowić jakieś problemy?

ayeo
Kod
Place
# id
# country_id
# province_id
# town_id
# street_name (na przykład)


Place reprezentuje konkretne miejsce (z ulicą i numerem mieszkania). Do *Oferty* dowiązujesz *Place*. Jeśli nie jest ustawione town_id to należy do województwa całego. Jak nie ma województwa do należy do kraju. Kraju nie może nie być. Dodanie wsi nie jest problemem. Wieś by nie była przypisana więc należałoby do regionu.

Jak to ma być wiele-do-wielu to jeszcze tabela referencji jakaś

Kod
id
place_id
ad_id


Co do wsi to wieś jest miejscowością. Zaproponowany podział wyżej jest pełny (dla Polski).
symonides
O dzięki, tak jak mówisz będzie najlepiej. Jeszcze jedno mam pytanie, bo wcześniej wspomniałeś o kodach pocztowych, problemem nie byłaby ich przytłaczająca ilość a to, że na terenie miasta, np. Warszawy, dzielnica ma osobny kod. Czy w bazie miałbym trzymać zamiast miasta Warszawa to Warszawa - Bemowo, Warszawa - Ochota, oraz czy nazwy miast trzymać od razu z kodem w jednej tabeli?
ayeo
To, że do miasta należy wiele kodów to nie jest problem. Do każdego kodu można łatwo pobrać nawet współrzędne geogfraficzne. Problemem jest sytuacja odwrotna. Ten sam kod może dotyczyć kilku gmin/miejscowości jednocześnie. W sensie w niektórych przypadkach nie jest jednoznaczny. Też niestety wiele do wielu. Tabela z kodami (id, postcode,country_id) i tabela z referencjami (id,town_id,postcode_id).

Pozdrawiam!
symonides
To teraz pozostaje nic innego jak znaleźć w przyzwoitej formie miasta i kody, i będzie elegancko.

Dzięki wielkie i pozdrawiam.

PS: fajnie jest być nocnym markiem tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.