Poprawność schematu relacji w bazie danych

0

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:

nowyrm.png

  1. 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.

  1. 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.

  2. 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.

0

Trzecie pytanie nieaktualne, wystarczyło po prostu zrobić relację wiele do wielu, z tabelą pomocniczą. Nie oczekuje już żebyście się wgryzali w tą moją poprzednią litanię, byłbym jednak wdzięczny za informację, czy poniższy schemat sprawia wrażenie dobrze rozplanowanego.

Jeśli nie, to wystarczyłaby mi podpowiedź w którym miejscu jest źle zrobiony, a ja już bym sobie sam odszukał odpowiedź jak to przerobić. Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1