Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucze glówne i klucze obce - graficzna reprezentacja relacji w MySQL Workbench
Forum PHP.pl > Forum > Bazy danych > MySQL
malesja
Mam pytanie. Bawił się ktoś z Was Mysql Workbench ewentualnie innym programem do tworzenia graficznej struktury baz danych?

Zrobiłem sobie bazę w phpMyAdmin wszystkie tabele są powiązane ze sobą poprzez klucze główne i klucze obce, mechanizm, składowania InnoDB. Tylko 4 tabele powiązałem w taki sposób, że usuwając konto użytkownika automatycznie zostaną usunięte z nim dane z innej tabeli, aby nie pozostawiać niepotrzebnych danych bez powiązań I tak samo z dwoma innymi. Reszta tabel gromadzi jakieś dane podawane przez użytkowników, ale głównie są w nich przechowywane stałe rzeczy, które zostały już wpisane na stałe do wyświetlania na stronie w formularzu.

Nie potrzebuję tu żadnych innych relacji, itd. ale potrzebuję przedstawić graficzną reprezentację bazy. Wczytałem sobie strukturę do MySQL Workbench celem zobrazowania tabel. I tak jak wspominałem 4 z nich automatycznie zostały pokazane powiązaniami, tak jak to ma odzwierciedlenie w rzeczywistości. Jednak jak mam powiązać resztę tabel, one wszystkie kluczami głównymi odnoszą się do jednej, w której spływają zebrane informacje i na ich podstawie są gromadzone informacje o użytkowniku. Tylko chciałbym jednak przedstawić powiązania tych tabel w sposób graficzny. Jak je próbuję powiązać relacjami to jednak potem serwis nie działa mi tak jak trzeba coś robię źle.

Wytłumaczcie mi, co oznaczają relacje 1 do wielu przerywaną linią, a relacje 1 do wielu rozrysowane ciągłą linią.

Rozumiem, ze relacja 1 do wielu przerywaną linia oznacza, ze usuwając rekord w głównej tabeli automatycznie wykasuje informacje powiązane z danym rekordem w drugiej tabeli, aby nie pozostawiać śmieci.
W ogóle, kiedy mam zastosowane klucze w bazie to powinienem jednak jakoś jeszcze zastosować odpowiednie relacje w bazie czy jeśli chce tylko pokazać graficzny model bazy to wystarczy, że rozrysuje to tylko celem zademonstrowania bez potrzeby implementowania tego w bazę?

A i jeszcze jedno, kiedy w Workbench rysuję relacje (jest tam taki ołówek na samym dole po lewej stronie) w ten sposób:, że zaznaczam najpierw w tabeli głównej klucz główny ID a potem w tabeli gdzie jest klucz obcy odwołujący się do klucza głównego zaznaczam klucz obcy to program rysuje mi relację ciągła linią w przy kluczu głównym mam wiele a przy kluczu obcym 1.

Kiedy robię to na odwrót najpierw zaznaczam klucz obcy a potem klikam na klucz główny to mam linię przerywaną, ale przy kluczu obcym wiele a przy kluczu głównym 1.
Czegoś tu trochę nie rozumiem. Możecie mi wyjaśnić jak to jest?
pablo89pl
no jka masz np tabele users i tabele users_messages przykładowo to robisz tak
wybierasz to narzedzie ostatnie o ktorym wspomniales, klikasz na pole user_id w users_messages potem w tym okienku takim czarnym w prawym gornym rogu,
a potem klikasz w users na id
Zreszta masz podpisane po angielsku referenced key itp jak dobrze pamietam.
Co do przerywanej i ciaglej linii to CI nie powiem, bo sam nei wiem;]
w sumei masz opisane po lewej ze to jest identifying i non-identifying relationship ale z czym to sie je to NEMO.


Co to usuwania rekordow to poklikaj sobei na tabelki z kluczami obcymi, przelacz sie na zakladke foreign keys i na dole masz akcje on update i on delete;] tu sobie mozesz zdefiniowac;]

Ja z wspomnianego workbencha korzystam przy tworzeniu nowej bazy, nie importowalem jeszcze nic wiec nei wiem jak to od tej strony wyglada ;]
jednak jesli wszystko miales dobrze w swojej bazie okreslone, tj klucze obce,indeksy,constrainty to powinno byc ok

Poczytaj jak cos w dokumentacji smile.gif
malesja
Mam coś takiego zrobione:
Tabela BAZA_UZYTKOWNICY jest połączona z tabelą BAZA_PROFIL kiedy zajdzie potrzeba usunięcia użytkownika z tabeli BAZA_UZYTKOWNICY to automatycznie usuwane są informacje związane z danym użytkownikiem z tabeli BAZA_PROFIL tak, że nie pozostaną tam niepotrzebne rzeczy z niczym i z nikim niepowiązane. Czyli działa O.K.


Tabela SZKOLY to tabela, w której użytkownicy dodają z formularza swoje szkoły. Raz dodana jest już w bazie więc inna osoba chcąca wybrać daną uczelnię ma ją już w bazie więc się pokazuje na liście wyboru, nie trzeba jej już dodawać. To samo z wydziałem, który jest powiązany ze szkołami. Jeśli ktoś doda nie istniejącą szkołę/dziwną etc. to usunięcie jej wykasuje też jej wydziały, aby się nie pojawiały na liście i nie pozostawały w bazie. Tabela kierunki to tabela z analogicznym podejściem, raz dodany kierunek będzie potem już w formularzy, wiec użytkownik go tylko wybiera. Wypełniając formularz wszystkie dane o danej osobie są składowane w BAZA_PROFIL poprzez powiązania kluczy głównych i kluczy obcych.
Wszystko niby działa jak trzeba, ale pytanie jak mam powiązać te relacje i aby fizycznie je odzwierciedlić ewentualnie, aby tylko graficznie przedstawić powiązania? Czy to ma byc tak?


Czy może to powinno być tak, ale ten ostatni przykład chyba jest źle.



W ogóle już nie wiem jak z tymi relacjami. Rozumiem BAZA_UZYTKOWNICY to relacja 1 do wielu bo jeden użytkownik może mieć wiele profilów/ wiele ukończonych szkół.
Relacja szkoły – wydziały to też 1 do n bo jedna szkoła może mieć wiele wydziałów, ale jak z tymi dalszymi relacjami?
Szkoły-baza_profil?
Wydzialy-baza_profil?
Kierunki-baza_profil?
Czy kierunek może mieć wiele profilów wystąpień, jak to sobie tłumaczyć?
A może gdzieś powinna być relacja 1 do 1 albo jeszcze jakoś inaczej?

Podpowiedzcie mi, który schemat jest prawidłowo zrobiony (2-3) wydaje mi się, że drugi chyba, zę to jeszcze inaczej powinno być?
phpion
Domyślam się, że chodzi Ci o to czy stosować kreseczki przerywane czy nieprzerywane.

Generalnie jest tak, że kreseczki przerywane mówią o tym, że klucze obce jednoznacznie definiują rekord zależny, czyli po prostu wchodzą w skład klucza obcego. Doskonały przykład: tabele "post", "tag" oraz "post_tag". W "post_tag" masz kolumny "post_id" oraz "tag_id" będące kluczami obcymi. Równocześnie klucze te jednoznacznie definiują rekord w tabeli "post_tag" więc wchodzą w skład klucza głównego.

W przypadku kreseczek nieprzerywanych (linia ciągła po prostu tongue.gif) są to, hmmm, zwykłe klucze obce czyli może to być np. miasto w tabeli użytkowników, marka pojazdu w tabeli modeli itd.
rafalp
Cytat(phpion @ 11.09.2009, 09:51:53 ) *
Generalnie jest tak, że kreseczki przerywane mówią o tym, że klucze obce jednoznacznie definiują rekord zależny


Chyba odwrotnie miałeś na myśli.
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.