Witam,
za zadanie mam zaprojektowanie modelu związków encji bazy danych Skoków narciarskich.
Przeanalizowałem już wszystkie możliwe opcje ale niestety nie mogę znaleźć błędu w mojej koncepcji. Błąd polega na tym że nie można sprawdzić ile skoczył dany zawodnik na danych zawodach.
Proszę o pomoc z tym problemem. W załączniku zamieściłem pliki mojego projektu z programu MySQL Workbench 6.1
Z góry dziękuję za pomoc.
generalnie schemat jest zły.
- Masz zawodników i ci zawodnicy powiązani są WYŁĄCZNIE ze skocznią! Nie da się zapisać ile na danej skoczni skoczył konkretny zawodnik.
- Złe jest rozbicie na poszczególne typy zawodów (jak kiedyś dojdą nowe zawody albo zmienią się zasady to będziesz musiał całą bazę zmieniać).
- Nie można przypisać kilku trenerów do jednej reprezentacji natomiast można przypisać jednego trenera do kilku drużyn (co się nie zdarza).
- Nie można przypisać kilku zawodników do jednej reprezentacji natomiast można przypisać jednego zawodnika do kilku drużyn.
Wg mnie powinno to wyglądać mniej więcej tak:
Zawodnik
PK | FK | Nazwa |
---|---|---|
* | zawodnik_id | |
# | reprezentacja_id | |
pozostałe_pola |
Trener
PK | FK | Nazwa |
---|---|---|
* | trener_id | |
# | reprezentacja_id | |
pozostałe_pola |
Reprezentacja
PK | FK | Nazwa |
---|---|---|
* | reprezentacja_id | |
pozostałe_pola |
Skocznia
PK | FK | Nazwa |
---|---|---|
* | skocznia_id | |
pozostałe_pola |
Typy_zawodów
PK | FK | Nazwa |
---|---|---|
* | typ_zawodow_id | |
nazwa | ||
druzynowe |
Zawody
PK | FK | Nazwa |
---|---|---|
* | zawody_id | |
# | skocznia_id | |
# | typ_zawodow_id | |
data | ||
pozostałe_pola |
Skoki
PK | FK | Nazwa |
---|---|---|
* | skok_id | |
# | zawody_id | |
# | reprezentacja_id | |
# | zawodnik_id | |
numer_skoku | ||
odleglosc | ||
punkty | ||
//w razie jakby zawodnik zmienił reprezentację to żeby było wiadomo z jaką reprezentacją skakał podczas konkretnych zawodów |
Tak właśnie myślałem że cała koncepcja jest zła.
Bazę danych mam zaprojektować jako model związków encji w notacji Oracle (z uwzględnieniem ról).
Już od kilku dni siedzę nad tym i nic nie mogę wymyślić. :/
Czy w tym przypadku też mogę liczyć na waszą pomoc?
- podałem Ci moją koncepcję schematu bazy - przeanalizuj, zobacz czego Ci brakuje i działaj
- notacja w jakiej będziesz rysował to rzecz względna.
- Pomoc w czym? Pewnie jak zwrócisz się z konkretnym pytaniem lub poprawionym schematem to ktoś Ci coś podpowie
Zgodnie z Twoją radą wykonałem projekt bazy. Nie jestem w 100% pewnie czy dobrze zaznaczyłem relacje.
W załączniku projekt.
- cała tabelka
Reprezentacja_has_skoki
jest błędna ponieważ
- to nie reprezentacja skacze ale zawodnik
- skok może mieć tylko jednego zawodnika (w Twojej wersji reprezentację), w sensie, że tego samego skoku nie może oddać kilku zawodników więc powiązanie m..n jest błędne
- w tabeli skoki zbędne są pola
- idskocznia
- idtyp_zawodow
ponieważ te dane określone są w tabeli zawody, do której każdy skok ma referencje
- w tabeli skoki brakuje pól
- idZawodnik
- idReprezentacja
bo tak jak masz teraz nie jesteś w stanie stwierdzić kto oddał dany skok
Jeśli potrzebował byś jeszcze dodatkowe tabele (bo np. projekt musi ich mieć np. co najmniej 8) to możesz jeszcze dodać dwie o podobnej strukturze, jedną (był_zawodnikiem) pomiędzy tabele zawodnik i reprezentacja a drugą (był_trenerem) pomiędzy tabelę trener i reprezentacja.
był_zawodnikiem
PK | FK | Nazwa |
---|---|---|
* | # | idZawodnik |
* | # | idReprezentacja |
* | data_od | |
data_do |
był_trenerem
PK | FK | Nazwa |
---|---|---|
* | # | idTrener |
* | # | idReprezentacja |
* | data_od | |
data_do |
Dziękuję za sugestie. Naniosłem proponowane zmiany do projektu. Mam nadzieję że teraz będzie dobrze. Jeśli chodzi o ilość tabel to nie mam wymaganej ilości. Baza musi być zaprojektowana poprawnie pod względem merytorycznym nie ilościowym.
W załączniku projekt.
wydaje mi się, że podstawowa wersja jest OK. Co do ew. rozbudowy to już zależy od tego jakie jeszcze dane chciałbyś tam trzymać. Na dzień dzisiejszy możesz zapisać skoki w poszczególnych turniejach, wyciągnąć kto ile miał punktów po każdym skoku w danym turnieju i na którym był miejscu. Kto ile miał punktów ogólnie w sezonie itp.
Raz jeszcze dziękuję za zainteresowanie moim problemem i pomoc w jego rozwiązaniu. Myślę że w zupełności mi to wystarczy.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.