Diagram ERD ligi piłkarskiej

0

Witam. Na zaliczenie potrzebuję wykonać znormalizowany diagram ERD (diagram związków encji) w notacji Martina dla ligi piłkarskiej. Wstępnie stworzyłem już coś samemu , ale wydaje mi się , że nie wszystko jest tak jak powinno być ;). Czy ktoś mógłby mi pomóc w poprawieniu tego diagramu ? :
user image
Na wszelki wypadek link do obrazka : http://i.imgur.com/3fKgCfO.png

0

Żeby nie było - jeśli zadaję pytanie, to dlatego, że czegoś nie rozumiem, i nie znaczy to wcale, że to coś, o co pytam, jest niepoprawne.

  1. Nazywanie tabeli tabela nie jest dobrym pomysłem, bo jest to bardzo mało opisowa nazwa.
  2. stadiony - po co pole adres i klucz obcy do tabeli adres jednocześnie?
  3. Czemu raz tabele nazywasz liczbą mnogą a raz pojedynczą?
  4. trenerzy, pole wiek - jak zamierzasz je aktualizować? Nie lepiej przechowywać datę urodzenia?
  5. zawodnik - do czego służy pole klub?
  6. wyniki - jaki w ogóle jest sens istnienia tej tabeli? Nie można tego umieścić w tabeli spotkanie?
  7. najlepsistrzelcy - jaki jest sens istnienia tej tabeli? Wszystkie te informacje można by wyciągnąć z reszty bazy.
  8. spotkania - nie jestem ekspertem, ale wydaje mi się, że w spotkaniu biorą udział dwa kluby, a sędziów chyba tez jest więcej niż jeden? Ponadto, skoro trener jest powiązany z klubem, to po co jego id w tabeli dotyczącej spotkania?
  9. terminarz - te dane powinny chyba być w tabeli spotkanie, jaki jest sens tego podziału?
0

Na wstępie dodam - diagram musi być znormalizowany i wykonany w notacji martina.
1.No fakt , nazwę ją np. tabelaligowa.
2.Tutaj przepraszam - mój błąd :). Zagmatwałem się przy wpisywaniu i przez pomyłkę dodałem takie dane jak adres itp - zaraz je wymarzę.
3.ustalmy, że wszystkie są w liczbie pojedynczej
4.nie pomyślałem o tym - zamiast wieku dam tak jak mówisz datę urodzenia
5.tutaj taki sam błąd jak w pkt. 2 :)
6.ok przeniosę to do spotkań.
7.czyli lepiej byłoby dodać zdobyte bramki i asysty do encji zawodnik ? i tutaj jeszcze pytanie - jeden zawodnik może rozegrać wiele spotkań , ale i w jednym spotkaniu gra wiele zawodników. połączyć to jako wiele do wielu ?
8.tutaj właśnie mam problem - nie mam pojęcia jak uwzględnić dwa kluby w spotkaniach. z jednej strony w 1 spotkaniu gra wiele drużyn , z drugiej jedna drużyna gra wiele spotkań. zastanawiam się tutaj nad encją wiele spotkań - wiele drużyn . co do sędziów podobny problem - w jednym spotkaniu jest kilku sędziów , ale z drugiej strony jeden sędzia prowadzi wiele spotkań. wiele do wielu załatwiło by sprawę ?
9.Ok - datę , godzinę przeniosę do tabeli spotkania. co do miejsca nie wiem czy nie lepiej byłoby zamiast tego połączyć to ze stadionem na którym będzie mecz. połączenie jeden stadion - wiele spotkań ?
I ostatnia rzecz - nie wiem w jaki sposób przyporządkować punkty do tabeli - czyli za wygraną 3 , remis 1 , porażkę 0 tak by można to uwzględnić w tabeli.

Z góry dzięki za pomoc - muszę Ci postawić jakieś dobre piwo :).

0

Ad. 7. Myślę, że bramki i inne statystki nie powinny być w encji zawodnik, lecz w tabeli łączącej zawodnika ze spotkaniem. Tamże, możesz też zapisać od której do której minuty grał ten zawodnik, ile kartek otrzymał, ile razy został sfaulowany i wszystkie inne statystki dotyczące meczu.
A co do tego, ile w ogóle dany piłkarz miał asyst i bramek, to będziesz mógł to łatwo obliczyć dynamicznie, pobierając dane z tabeli zawodnik i tabeli, o której mowa teraz. Nie potrzebujesz dodatkowo zapisywać tych informacji w tabeli zawodnik.

Ad. 8. Wydaje mi się, że w jednym spotkaniu grają dokładnie dwie drużyny. Ja zrobiłbym po prostu dwie kolumny (idKlub1, idKlub2 albo idGospodarze, idGoscie) z kluczami obcymi do tabeli klub. Podobnie z sędziami, wydaje mi się, że zawsze jest trzech, z czego każdy ma inną rolę, więc trzy kolumny w tabeli spotkanie załatwią sprawę.
O ile nie bredzę, to robienie tu wiele do wielu nie ma sensu.

Ad. 9. Myślę, że miejsce spotkania i stadion to to samo, więc wystarczy jeden klucz obcy do tabeli stadion.

I ostatnia rzecz - nie wiem w jaki sposób przyporządkować punkty do tabeli - czyli za wygraną 3 , remis 1 , porażkę 0 tak by można to uwzględnić w tabeli.

Jeśli faktycznie trzeba umieszczać to w bazie, to można chyba w tabeli spotkanie umieścić dwie kolumny na punkty każdej z biorących udział drużyn.

Z góry dzięki za pomoc - muszę Ci postawić jakieś dobre piwo

Wystarczy, jeśli nie będziesz stawiał spacji przed znakami interpunkcyjnymi. ;)

0

Trochę popracowałem nad swoim diagramem i teraz wygląda on tak :
user image
http://i.imgur.com/3cozENf.png
Nie mogę jednak dalej poradzić sobie z dwiema rzeczami

  1. Połączenie jeden mecz - wiele zdarzeń meczowych wydaje mi się dobre , jednak nie mam do niego pewności.
  2. Co do tabeli skład meczu - tutaj się poddaje. Wiem, że muszę połączyć skład z zawodnikiem (jeden skład i wiele zawodników), ale jak połączyć to z tabelą mecz ? W jednym meczu składy musiały by być dwa - gości i gospodarzy, ale jak ująć to w tabeli mecz ? Połączyć skład z meczem jako 1:n czy n:1 ? Bardziej pasowałby mi klucz obcy w tabeli mecz, ale jak ująć skład gości i gospodarzy "osobno" ?
0
reamider napisał(a):
  1. Połączenie jeden mecz - wiele zdarzeń meczowych wydaje mi się dobre , jednak nie mam do niego pewności.

Tak, ta tabela jest tabelą typu n:n, więc z obu stron ma powiązanie "wiele".
Natomiast nazwałbym ją raczej zawodnikmecz, skoro łączy zawodnika z meczem.
A - i nie potrzebujesz tam dodatkowego klucza głównego, możesz go skomponować z id meczu i id zawodnika.

  1. Co do tabeli skład meczu - tutaj się poddaje. Wiem, że muszę połączyć skład z zawodnikiem (jeden skład i wiele zawodników), ale jak połączyć to z tabelą mecz ? W jednym meczu składy musiały by być dwa - gości i gospodarzy, ale jak ująć to w tabeli mecz ? Połączyć skład z meczem jako 1:n czy n:1 ? Bardziej pasowałby mi klucz obcy w tabeli mecz, ale jak ująć skład gości i gospodarzy "osobno" ?

Taka tabela nie jest w ogóle potrzebna.

Dane o zawodnikach grających w danym meczu masz w tabeli zawodnikmecz, przez tabelę zawodnik dotrzesz do tabeli klub, i będziesz wiedział, z jakiej drużyny jest dany zawodnik.
W tabeli mecz brakuje Ci tylko dwóch kluczy obcych do tabeli klub, abyś mógł określić gospodarzy i gości. A poza tym sędziowie tez powinni być kluczami obcymi, a nie polami.
No i liczby goli też jednak nie trzeba zapisywać w tabeli mecz, bo wszystko można obliczyć na podstawie zawodnikmecz.

Nie rozumiem też, jaki cel ma tabela termin?
Połączenie adres - stadion i adres - klub, to chyba jednak 1:1.
Trenera bym raczej przypisywał do klubu, a nie odwrotnie.

0

Tabele termin dodałem, żeby nie za dużo namieszać w tabeli mecz i dodatkowo potrzebuje minimum 10 encji, więc za bardzo nie chciałbym jej usuwać. Co do połączeń adres - stadion dr kazał nam rozpatrywać skrajne przypadki typu w Katowicach i w Warszawie są dwa stadiony na tej samej ulicy itp. Co do tabeli składmecz chciałem ją dodać, bo nie mam pomysłu na późniejsze dodawanie danych do bazy. Czy jeśli będę chciał dodać 1 pełny mecz do bazy (czyli 22 zawodników) muszę to zrobić poprzez aż 22 inserty ?
insert into zdarzeniamecz(id_zawodnik.....) values (1,..)
insert into zdarzeniamecz(id_zawodnik...) values (2,...) i tak do 22 ?
Co do tabeli zawodnikmecz - może istnieć tabela bez klucza głównego ?
I ostatnie - co do kluczy obcych chociażby sędziów - wybacz, ale nie wiem jak to zrobić. W tym DB Designerze jeśli połączę sędziego z meczem (1:n) dodaje mi tylko 1 klucz obcy do tabeli mecz. Nie wiem jak zrobić pozostałe klucze obce typu id_sedzia2 , id_sedzia3.

0
reamider napisał(a):

Tabele termin dodałem, żeby nie za dużo namieszać w tabeli mecz i dodatkowo potrzebuje minimum 10 encji, więc za bardzo nie chciałbym jej usuwać.

Rozumiem, ale to jeszcze nie jest powód, żeby dodawać bezsensowne tabele.

Już lepiej, jeśli dodałbyś tabelęgol z kolumnami id_zawodnika, id_meczu, połowa, minuta. Analogicznie można by zapisywać inne zdarzenia, które występują podczas meczu (asysty, kartki, rzuty karne, i co tam jeszcze jest).

Co do połączeń adres - stadion dr kazał nam rozpatrywać skrajne przypadki typu w Katowicach i w Warszawie są dwa stadiony na tej samej ulicy itp.

Nie ma tej samej ulicy w Katowicach i Warszawie, nawet jeśli się tak samo nazywa. A nawet gdyby istniała tak długa ulica, to adres różniłby się chociażby numerem lub id/nazwą miejscowości. Dwa stadiony to zawsze dwa różne adresy, więc połączenie 1:1.

Co do tabeli składmecz chciałem ją dodać, bo nie mam pomysłu na późniejsze dodawanie danych do bazy. Czy jeśli będę chciał dodać 1 pełny mecz do bazy (czyli 22 zawodników) muszę to zrobić poprzez aż 22 inserty ?
insert into zdarzeniamecz(id_zawodnik.....) values (1,..)
insert into zdarzeniamecz(id_zawodnik...) values (2,...) i tak do 22 ?

Tak.
Jeśli Ci się to nie podoba, to możesz zrobić pośrednią tabelę skladmecz z dwoma FK w tabeli mecz (skład gospodarzy i gości). No, ale żeby dopisać 22 zawodników do tych składów i tak musisz zrobić 22 inserty. W sumie, taka tabela pośrednia może mieć sens, zwłaszcza jeśli uwzględni się zawodników rezerwowych, itd.

Co do tabeli zawodnikmecz - może istnieć tabela bez klucza głównego ?

Może. Ale mi nie chodzi o tabelę bez klucza głównego, ale o to, aby go nie tworzyć dodatkowo, lecz użyć do tego już istniejących dwóch kluczy obcych.

I ostatnie - co do kluczy obcych chociażby sędziów - wybacz, ale nie wiem jak to zrobić. W tym DB Designerze jeśli połączę sędziego z meczem (1:n) dodaje mi tylko 1 klucz obcy do tabeli mecz. Nie wiem jak zrobić pozostałe klucze obce typu id_sedzia2 , id_sedzia3.

Z tym to raczej nie pomogę, bo nie znam tego narzędzia. Ale wiele kluczy obcych z jednej tabeli to sprawa dość częsta, i jeśli jakieś narzędzie na to nie pozwala, to znaczy, że trzeba zmienić narzędzie.

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