[MySQL] Pomoc przy tworzeniu bazy i relacji

0

Witam. Na początku chciałbym prosić o opinię, czy dobrze utworzyłem bazę danych która ma zawierać dane dotyczące "rozgrywek piłkarskich np. 2 ligi w sezonie 2016/2017".

  1. Czy atrybuty oraz klucze zostały przeze mnie utworzone poprawnie?? Czy są potrzebne jakieś poprawki?
  2. Czy mógłbym prosić o pomoc w utworzeniu relacji??

Kluby-Stadiony(Jeden-do-Jednego), Zawodnicy-Kluby(Jeden-do-wielu), Trenerzy-Kluby(Jeden-do-jednego?), Mecze-Gole(Jeden-do-wielu), Mecze-Kartki(Jeden-do-wielu) i dalej.. nie wiem.. czy dobrze myśle?

Z góry dziękuje, pozdrawiam.

title

2

W Gole nie potrzebujesz klucza klub_id, to samo w Kartki. W Mecze nie potrzebujesz kolumn gol_. Typ_gola w relacji Kartki to zgaduje, że literówka. Kluby, Trenerzy jeden do wielu lub wiele do wielu. W Kluby niepotrzebne kolumny stadion, trener. Twoja baza danych nie jest też przystosowana do tego by radzić sobie w sytuacji gdybyś chciał uwzględnić kilka sezonów (zawodnicy i trenerzy zmieniają kluby, czasem kluby mają nowe stadiony).

1

Cześć,

No to zacznijmy. Moim zdaniem powinieneś wszystko oprzeć na tabeli "mecze" to będzie Twoja główna tabela.

  • połączenie mecze - kartki
    rozważ utworzenie tabeli pośredniej np. powiązanie_mk (czyli powiązanie mecze kartki) o strukturze: id, id_meczu, id_kartki. Wtedy w tabeli kartki zostawiasz id_kartki ale niepotrzebne jest mecz_id i klub_id
  • połączenie mecze - gole
    robisz analogicznie jest w przypadku kartek
  • tabela mecze
    ja bym dodał tutaj jeszcze pola id_trener_gospodarze, id_trener_goście
    zauważ że w każdym meczu teoretycznie może być inny trener (trenerzy w trakcie sezonu też się zmieniają)
  • tabela składy
    też rozważyłbym (tak na oko to chyba się sprawdzi) utworzenie nowej tabeli pośredniej np. powiazanie_mz (powiązenie meczu z zawodnikami czyli składy) też o strukturze: id, id meczu, id zawodnika

jakbyś chciał iść moją koncepcją i miał jakieś pytanie pisz :)

0
Crude Monte Carlo napisał(a):

W Gole nie potrzebujesz klucza klub_id, to samo w Kartki. W Mecze nie potrzebujesz kolumn gol_. Typ_gola w relacji Kartki to zgaduje, że literówka. Kluby, Trenerzy jeden do wielu lub wiele do wielu. W Kluby niepotrzebne kolumny stadion, trener. Twoja baza danych nie jest też przystosowana do tego by radzić sobie w sytuacji gdybyś chciał uwzględnić kilka sezonów (zawodnicy i trenerzy zmieniają kluby, czasem kluby mają nowe stadiony).

W 'Mecze' nie potrzebuje kolumn "gol_gospodarz / gosc"? A gdzie mam przechowywać wynik spotkania? Atrybut "gol_gospodarz_half" przechowywałby wynik w pierwszej polowie.

0
darexx napisał(a):

W 'Mecze' nie potrzebuje kolumn "gol_gospodarz / gosc"? A gdzie mam przechowywać wynik spotkania? Atrybut "gol_gospodarz_half" przechowywałby wynik w pierwszej polowie.

Jeżeli chcesz mieć informację o tym w, której połowie padł gol to raczej dodał bym taką kolumnę do relacji gole.

Informację o wyniku w meczu uzyskujesz w taki sposób:


select sum(CASE WHEN klub_id = 100 then 1 else 0 end ) as wynik_gospodaz
, sum(CASE WHEN klub_id = 101 then 1 else 0 end ) as wynik_gosc
from Mecze m inner join Gole g on g.id_mecze = m.idMecze
where idMecze = 5
;

EDIT
Możesz to też zrobić w następujący sposób.

select count(*)
from Mecze m inner join Gole g on g.id_mecze =m.idMecze
where idMecze = 5
group by klub_id 
;

EDIT II
Możesz rozważyć nazwanie kluczy głównych po prostu id a nie np. idMecze.

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