Witam. Do końca semestru mam wykonać projekt bazy danych. Moim tematem są piłkarze reprezentacji Polski. Celem jest stworzenie minimum 4 tabel i relacji wiele do wielu stworzonej za pomocą tabeli pomocniczej i dwóch relacji jeden do wielu. Stworzyłem właśnie diagram ale nie wiem jak sobie poradziłem z tymi relacjami, według mnie są trochę na siłę, ale nie potrafiłem wymyślić nic lepszego. Bardzo proszę o opinie i wskazówki, z góry dziękuję.
Witam, ja bym zrobił takie tabele
zawodnik,karta zawodnika,klub,liga,reprezentacja,
relacje:
zawodnik:1-1:karta zawodnika
zawodnik:-1:reprezentacja
zawodnik:-:klub
klub:-1:liga
relacje:
zawodnik:1-1:karta zawodnika (zazwyczaj unika się powiązań 1-1)
zawodnik:-1:reprezentacja
zawodnik:-1:klub (1 zawodnik może być w jednym momencie w jednym klubie, wielu zawodników może być w tym samym klubie)
klub:*-1:liga (1 klub może być w jednym momencie w jednej lidze, wiele klubów jest w jednej lidze)
mozna dodatkowo dać historię:
zawodnik 1 - * historia_zawodnika
historia_zawodnika * -1 hzawodnik_klub 1 - * klub (nie używając * - *)
historia zawodnika * - 1 hzawodnik_rep 1 - * reprezentacja
historia_klubu * - 1 hklub_liga 1 - * liga
Złoty Lew napisał(a):
zawodnik:1-1:karta zawodnika (zazwyczaj unika się powiązań 1-1)
Bzdura, to powiązanie jak każde inne.
Bardzo ładnie opisałeś krotności powiązań, tylko czemu nazywasz je relacjami?
I ta historia_zawodnika
moim zdaniem jest sztuczna. Wszystko można trzymać w zawodnik -1 zawodnik_klub (id_zawodnika, id_klubu, data_rozpoczecia, data_zakonczenia) 1- klub.
Bardzo ładnie opisałeś krotności powiązań, tylko czemu nazywasz je relacjami?
Bo to są relacje?!
Złoty Lew napisał(a) 28 minut temu:
zawodnik:1-1:karta zawodnika (zazwyczaj unika się powiązań 1-1)Bzdura, to powiązanie jak każde inne.
Po co tworzyć powiązania 1-1? przecież można to umieścić wszystko w jednej tabeli
I ta historia_zawodnika moim zdaniem jest sztuczna. Wszystko można trzymać w zawodnik -1 zawodnik_klub (id_zawodnika, id_klubu, data_rozpoczecia, data_zakonczenia) 1- klub.
Z tym się zgodzę, poniosło mnie, powinno być:
zawodnik * -1 hzawodnik_klub 1 - * klub (nie używając * - *)
zawodnik * - 1 hzawodnik_rep 1 - * reprezentacja
klub * - 1 hklub_liga 1 - * liga
Złoty Lew napisał(a):
Bardzo ładnie opisałeś krotności powiązań, tylko czemu nazywasz je relacjami?
Bo to są relacje?!
SAM ZEŚ JEST RELACJA!!!! Nie wiem ale będę się mądrzył...
Złoty Lew napisał(a) 28 minut temu:
zawodnik:1-1:karta zawodnika (zazwyczaj unika się powiązań 1-1)Bzdura, to powiązanie jak każde inne.
Po co tworzyć powiązania 1-1? przecież można to umieścić wszystko w jednej tabeli
idźmy krok dalej - po co w ogóle tworzyć kilka tabel - przecież wszystko można trzymać w jednej
No wydaję mi się że jeśli napiszę 1 - * to każdy zrozumie że chodzi o relacje jeden do wielu...
Mnie uczono że jeden-do-jeden można składać do jednej tabeli jeżeli to w niczym nie przeszkadza...
Złoty Lew napisał(a):
Bo to są relacje?!
Nie, nie są. To są związki lub powiązania. Relacje to tabele:
http://osilek.mimuw.edu.pl/index.php?title=Logika_i_teoria_mnogo%C5%9Bci/Wyk%C5%82ad_5:_Para_uporz%C4%85dkowana%2C_iloczyn_kartezja%C5%84ski%2C_relacje%2C_domykanie_relacji%2C_relacja_r%C3%B3wnowa%C5%BCno%C5%9Bci%2C_rozk%C5%82ady_zbior%C3%B3w
http://osilek.mimuw.edu.pl/index.php?title=BD-2st-1.2-w02.tresc-1.1-Slajd5
http://pl.wikipedia.org/wiki/Model_relacyjny
http://pl.wikipedia.org/wiki/Diagram_zwi%C4%85zk%C3%B3w_encji
Po co tworzyć powiązania 1-1? przecież można to umieścić wszystko w jednej tabeli
Jeśli koncepcyjnie to coś innego (np. adres klienta) albo jakieś dane mają sens tylko dla części encji (np. Klient ma login in hasło jak Użytkownik, ale też NIP i nazwę), to jak najbardziej 1:1 ma sens.
1:1 ma też sens jeśli jeden zestaw danych jest pobierany często a drugi rzadko. Na przykład często wyświetlamy gdzieś listę nazwisk zawodników, ale kartę zawodnika i jego zdjęcie wyświetlamy tylko raz na jakiś czas. Upraszcza to pracę SZBD bo może sobie robić ładne read-ahead albo w ogóle czytać całą tabelę, a nie czytać po kawałku / czytać wszystko i odrzucać 90% danych.
Widzę, że rozpoczęła się tu dość ciekawa dyskusja, dzięki za wszelkie porady. Dziś po konsultacji z wykładowcą zmieniłem lekko mój diagram, usunąłem tabelę klub, cała baza jest o reprezentacji więc wystarczy informacja w jakim kto gra klubie, którą umieściłem w karcie zawodnika. Relację wiele do wielu zrobiłem między Reprezentacją a Spotkaniem, używając do tego tabeli pomocniczej Skład i dwóch relacji jeden do wielu. Co o tym myślicie? :) Chyba lepiej co?
Nie mogę zedytować posta jako gośc, a nie dodałem zdjęcia :/