![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (10%) ![]() ![]() |
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 19 Dołączył: 7.09.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (10%) ![]() ![]() |
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ć? Ten post edytował malesja 10.09.2009, 21:01:23 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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 ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 224 Pomógł: 18 Dołączył: 4.02.2003 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 07:35 |