Tołdi2426 Temat założony przez niniejszego użytkownika |
Baza danych w MS SQL Server » 2021-01-18 19:17:17 Witam. Chce stworzyć małą bazę danych, w której będą przechowywane wyniki graczy spisywane co tydzień. Zaprojektowałem takie coś: Gracze = {Nick, Lewel, Norma_pkt_do_wyrobienia} w tabeli np. {Tołdi,23,100 000}klucz główny to nick Wynii_spisow = {Nick,Wynik,Id_spisu} klucz obcy to nick z tabeli Gracze i Id_spisu z tabeli Spisy Spisy = {Id_spisu, Data_spisu, srednia_wynikow) Ostrzezenia = {Nick, ile ostrzezen} klucz obcy to Nick z tabeli Gracze
Problem jest w tym że mam za dużą powtarzalność danych w tabeli Wyniki_spisow, powtarza się id_spisu jeśli 30 gracy uczestniczy w spisie i nicki jeśli spisów jest więcej niż 2. Jest sposób żeby to znormalizować? Myślałem jeszcze nad tym żeby dla każdego gracza tworzyć osobną tabelę.
|
|
pekfos |
» 2021-01-18 19:40:47 Tekst w roli klucza głównego to słaby pomysł. Powinieneś raczej zrobić liczbowe identyfikatory z autoincrementem. Tabela Ostrzezenia wydaje się nie mieć sensu, bo to relacja 0..1 z graczami i masz tam tylko jedną kolumnę danych, lepiej ją przenieść do tabeli z graczami. Ewentualnie zamiast liczby ostrzeżeń trzymaj coś bardziej pożytecznego, jak np opis i datę wystawienia ostrzeżenia. Przechowywanie średniej wyników ma sens tylko jeśli przemawiają za tym argumenty wydajnościowe, bo normalnie możesz obliczyć ją przez agregację wyników i w małej bazie danych to raczej preferowane rozwiązanie. Problem jest w tym że mam za dużą powtarzalność danych w tabeli Wyniki_spisow, powtarza się id_spisu jeśli 30 gracy uczestniczy w spisie i nicki jeśli spisów jest więcej niż 2. Takie powtórzenia to nie problem, lecz norma w relacyjnych bazach danych. |
|
DejaVu |
» 2021-01-18 19:41:48 Jeżeli masz mniej wpisów niż 50k to bym się nie przejmował normalizacją. Zrealizuj projekt tak, aby dało się łatwo później zmodyfikować strukturę bazy danych. |
|
Tołdi2426 Temat założony przez niniejszego użytkownika |
» 2021-01-18 20:41:59 Czyli tak jest w 100 % poprawnie ? Gracze = {Id_Gracza, Nick, Lewel, Norma, Ostrzezenia } Spis = {Id_Spisu, Data_spisu} Wyniki = {Nick, Wynik, Id_spisu} - klucz obcy to nick bo przy wpisywaniu nie znam Id_Gracza ?
Czy może lepiej napisać procedure do wstawiania która znajdzie odpowiedni Id_gracza ? |
|
pekfos |
» 2021-01-18 20:51:03 Klucz obcy powinien używać Id_Gracza. |
|
Tołdi2426 Temat założony przez niniejszego użytkownika |
» 2021-01-19 19:05:03 Jeszcze jedno pytanie, mam już dwa spisy i chciałbym teraz wypisać takie dane |GRACZE | SPIS_1 | GRACZE | SPIS_2 | Stworzyłem taką komedę select sp.Id_Gracza as Spis1, sp1.Id_Gracza as Spis2, sp.Wynik as Spis1, sp1.Wynik as Spis2 from( select * from Wyniki_spisow where Wyniki_spisow.Id_Spisu = 1 ) as sp full join( select * from Wyniki_spisow where Wyniki_spisow.Id_Spisu = 2 ) as sp1 on sp.Id_Gracza = sp1.Id_Gracza Wypisuje ona tylko id a muszę to zamienić na nicki, które są w tabeli Gracze. Pytanie jak można się dobrać do nich? W sumie to już się udało select sp1.Nick as Nick, sp.Wynik as Spis1, sp2.Wynik as Spis2 from( select * from Gracze ) as sp1 full join( select * from Wyniki_spisow where Wyniki_spisow.Id_Spisu = 1 ) as sp on sp.Id_Gracza = sp1.Id_Gracza full join( select * from Wyniki_spisow where Wyniki_spisow.Id_Spisu = 2 ) as sp2 on sp2.Id_Gracza = sp1.Id_Gracza; |
|
« 1 » |