Witam,
Jestem w trakcie nauki MySQL i próbuję stworzyć pewien mały system bazodanowy, ucząc się przy okazji zastosowania relacji. Stworzyłem w MySQL Workbench taki oto schemat relacji w mojej bazie:
- Czy to, co do tej pory jest gotowe, zrobiłem poprawnie? Moje założenia były takie:
a) W tabeli nazwy klubów będą jedynie nazwy klubów. Pomiędzy tabelą kluby a tabelami kluby_puchary i kluby_liga są relacje "jeden do wielu", gdyż nazwa klubu może się pojawić kilka razy w tych tabelach, a przy ewentualnej zmianie nazwy klubu itd. łatwiej będzie o jej zmianę tylko w tabeli kluby, niż osobno w tabelach kluby_liga, kluby_puchary, liga_mecze, liga_puchary.
b) W tabeli sezony będą jeszcze przechowywane informacje na temat ogólnych osiągów klubów w europejskich pucharach (łączna liczba zwycięstw, remisów wszystkich klubów, osobno klubów grających w Lidze Mistrzów i takie tam tego typu). Jeśli tabela sezony będzie miała dużo kolumn z danymi podsumowującymi, planuję utworzyć tabelę sezony_statystyki, gdzie przeniosę część danych, z relacją "jeden do jeden" do tabeli sezony. Pomiędzy tabelą sezony a tabelami kluby_liga i kluby_puchary są relacje "jeden do wielu", gdyż dla jednego sezonu i kraju w tabeli ligowej będzie kilkanaście klubów, a w pucharach gra kilka klubów w jednym roku, z jednego kraju.
c) W tabelach kluby_liga i kluby_puchary będą jeszcze podsumowania zbiorcze na podstawie danych w tabelach kolejno liga_mecze i puchary_mecze, podobne jak całosezonowe. W tym miejscu pojawia się problem z zastosowaniem relacji opisany w punkcie trzecim. Dane ligowe będą uboższe, niż pucharowe, stąd podział na ligę i puchary.
-
Czy zastosowane w moim projekcie klucze podstawowe wielopolowe są poprawne? Mam wątpliwość szczególnie pod względem wykorzystania takich samych nazw kolumn dla różnych tabel przy kluczach podstawowych.
-
W założeniu tworzenia tabel liga_mecze i puchary_mecze miałem utworzenie w nich dwóch kolumn z nazwami klubów (kolumna gospodarz i kolumna gosc), ale w momencie, kiedy trzeba było dla tej kolumny utworzyć relację z tabelą pojawił się następujący problem - jak utworzyć powiązanie pomiędzy dwoma elementami (z dwóch różnych wierszów) z kolumny nazwa_klubu z tabeli kluby z dwoma elementami (oba w jednym wierszu) w tabeli liga_mecze? Np. mam dwa kluby w tabeli kluby i chcę oba wstawić w tabeli liga_mecze, pierwszy klub do kolumny gospodarz, drugi klub do kolumny gosc, zachowując przy tym integralność danych.
Czy jest w ogóle możliwe utworzenie takiej relacji? Czy należy zrobić to w ten sposób, że robię w tabeli liga_mecze zamiast kolumn gospodarz i gość kolumny np. druzyna_a i druzyna_b, dokładam kolumne z checkiem, w której umieszczona zostanie informacja, czy druzyna_a jest gosciem czy gospodarzem i wprowadzam jeden mecz dwukrotnie - najpierw dla pierwszej druzyny, a potem w nastepnym wierszu dla drugiej druzyny? Wtedy łatwo (przynajmniej wedle mojego rozumowania) można zrobić relację pomiędzy nazwa_klubu z tabeli kluby i druzyna_a z tabeli liga_mecze, a rywal druzyny_a nie będzie związany z żadnym innym elementem w bazie.
Niemniej jednak mam wątpliwości, że konieczne jest wprowadzanie praktycznie tych samych danych dwukrotnie. Proszę też o wyrozumiałość, jeśli robię gdzieś rażące błędy - w takim przypadku nie obrażę się na odwołanie do książek, google, manuala, żeby spróbować zrozumieć cały temat jeszcze raz. Pozdrawiam i z góry dziękuję za wszelką pomoc.