![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Zastanawiałem się czy umieścić ten wątek w dziale PHP czy też MySQL ale chyba ten pierwszy będzie odpowiedniejszy. Chodzi mi o wskazówki jaki rodzaj tabeli będzie odpowiedniejszy do moich zastosowań. Mam tabelę z wynikami zawodów. Powiedzmy, że nazywa się 'wyniki'. Składa się z kolumn id(autoincrement),osoba(z tabeli osoby),nrzawodow(z tabeli zawody). Potem mam pola z wynikami dla poszczególnych konkurencji np. strzelanie(ilość pkt), bieg(ilość pkt). Teraz moje wątpliwości sprowadzają się do tego, że każde dodanie nowej konkurencji wiąże się z modyfikacją struktury tabeli z wynikami i dodaniem odpowiedniej kolumny. Czy nie lepiej byłoby zrobić oddzielną tabelę 'kokurencje' (idkonkurencji,nazwa), gdzie trzymać ich nazwy a w tabelę z wynikami przerobić na strukturę (id,osoba,nrzawodow,idkonkurencji,wynik)? Wiem, że w przypadku gdy osoba na jednych zawodach startowałaby w wielu konkurencjach to miałbym kilka rekordów w bazie danych zamiast jednego ale z drugiej stron przy 20 konkurencjach nie miałbym przy każdej osobie, która startowała np. tylko w jednej konkurencji na danych zawodów praktycznie całego wiersza pustych wpisów. No i dodawanie kolejnych konkurencji byłoby łatwiejsze. Co o tym sądzicie? -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Tak wlasnie powinienes zrobic.
Skoro konkurencje do dane, a nie atrybut osoby, i sie zmieniaja to niech beda rekordami a nie kolumna. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
OK, napiszę to trochę inaczej. Mam bazę harcerzy. Są dane harcerzy w jednej tabeli. W drugiej mamy obozy harcerskie.
Teraz tabela wygląda tak: ranking harcerzy: id,harcerz,oboz,pozycja(pod względem ilości zdobytych sprawności na obozie),ocena z obozu,zdobytasprawnosc1,zdobytasprawnosc2,zdobytasprawnosc3,itd. pola harcerz i oboz to odpowiednio id z innej tabeli, gdzie są harcerze i obozy. Pozycja jest wyliczona na podstawie roznych danych (w ramach jednego obozu),ocena to ocena za obóz (od 1 do 6), zdobytasprawnosc1(...)x to odpowiednio zdobyte sprawnosci (albo tak albo nie - wartosci 0 lub 1). Czy rozbijać taką tabelę na trzy tabele: 1. rankingharcerzy (id,harcerz,oboz,pozycja,ocena) 2. rankingsprawnosci (id,harcerz,oboz,idsprawnosci,iloscpunktowzanią) 3. listasprawnosci (id,nazwa,punkty). Czy też nie ma to sensu i jest to za duzo roboty? W chwili obecnej jeśli chcę dodać sprawność to muszę modyfikować tabelę ranking harcerzy i dodawać nową kolumnę. Ten post edytował MalyKazio 3.09.2008, 18:36:10 -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
To jednak nie ma nic wspólnego z PHP. Przenoszę na Bazy Danych.
-------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Wiec tak:
W bazie trzymasz # Harcerze Harcerz: id, imie, nazwisko, ... # Obozy Oboz: id, data_rozpoczecia,... # Sprawnosci Sprawnosci: id, nazwa # Zdobyte sprawnosci [na danym obozie] kazdy harcerz moze miec wiele sprawnosci, kazda sprawnosc moze byc posiadana przez wielu harcerzy - czyli masz relacje wiele do wielu; do tego dochodzi oznaczenie na ktorym obozie zostala zdobyta ZdobytaSprawnosci: [opcjonalne id], harcerz_id, sprawnosc_id, oboz_id na podstawie tych danych wiesz jakie sprawnosci zdobyl harcerz w danym obozie; a takze wszystkie sprawnosci jakie posiada (po rekordzie na posiadana sprawnosc - zakladam ze nie ma czegos takiego ze "mogl zdobyc sprawnosc X na obozie Y a jej nie zdobyl", na co moglo by wskazywac: Cytat ...to odpowiednio zdobyte sprawnosci (albo tak albo nie - wartosci 0 lub 1). ) # Oceny za oboz OcenyZaOboz: id, harcerz_id, oboz_id, ocena, ... Z tych danych mozesz wyciagnac liste zdobytych sprawnosci, przez harcerza (patrz wyzej), ranking na danym obozie (liczony dynamicznie za kazdym razem, jesli bedzie to wolne to mozesz ranking trzymac w innej tabeli - tzn same wyniki przeliczen, nic wiece, zeby odczyt rankingu byl tylko odczytaniem danych z bazy, bez zadnych dodatkokwych obliczen, ale tym zajmij sie pozniej) Cytat Czy też nie ma to sensu i jest to za duzo roboty? W chwili obecnej jeśli chcę dodać sprawność to muszę modyfikować tabelę ranking harcerzy i dodawać nową kolumnę. Lepiej przy dodawaniu sprawnosci skakac do PMAdmina czy wyklikac sobie nowa sprawnosc w twojej aplikacji? I jakie umiejetnosci trzeba miec zeby to obsluzyc w obu przypadkach. Ty sobie poradzisz z PMA, a ktos inny? Struktura bazy NIE powinna byc zmieniana tylko dlatego ze doszly ci nowe dane (rekordy), zmieniasz ja jak musisz trzymac w niej nowe obiekty (np. inf. o zastepowych, kierownikach obozow itp) To teraz masz prosty wybor, nie? ![]() -------------------- Nie lubię jednorożców.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 7.07.2025 - 00:24 |