Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Kontrukcja tabel - relacja live
Forum PHP.pl > Forum > Bazy danych > MySQL
henio
Planuję zrobić system do obsług relacji tekstowych (typowe relacje live na wielu stronach sportowych). W tym celu zaplanowałem listę poniższych tabel, chciałbym zapytać się, czy takie rozwiązanie jest właściwe jeśli chodzi o wydajność, zajmowaną pamięć. Może ktoś zna lepsze rozwiązanie.

Kod
terminarz-mecze
     id int(10) unsigned NOT NULL auto_increment PRIMARY KEY,
     id_sezon int(10) unsigned NOT NULL INDEX
     id_rozgrywki int(10) unsigned NOT NULL INDEX
     id_gospodarz int(10) unsigned NOT NULL INDEX
     id_gosc int(10) unsigned NOT NULL INDEX
     data DATE NOT NULL
     wynik varchar('7') NOT NULL
     kolejka varchar('50') NOT NULL

live
     id int(10) unsigned NOT NULL auto_increment PRIMARY KEY
     id_mecz int(10) unsigned NOT NULL  INDEX
     wynik varchar('7') NOT NULL

live-pilkarze
     id int(10) unsigned NOT NULL auto_increment PRIMARY KEY
     id_live int(10) unsigned NOT NULL  INDEX
     id_klub int(10) unsigned NOT NULL  INDEX
     imie_nazwisko varchar('50') NOT NULL
     numer int('2') unsigned NOT NULL
     rodzaj ENUM('pierwszy_sklad', 'rezerwowy')

live-wydarzenia
     id int(10) unsigned NOT NULL auto_increment PRIMARY KEY
     id_live int(10) unsigned NOT NULL INDEX
     id_pilkarz int(10) unsigned NOT NULL INDEX
     id_klub int(10) unsigned NOT NULL INDEX
     wydarzenie ENUM ('gol', 'kartka')
     rodzaj ENUM ('zwykly', 'karny', 'gol samobójczy'; 'zolta', 'czerwona')
     minuta int('3') unsigned NOT NULL

live-zmiany
     id int(10) unsigned NOT NULL auto_increment PRIMARY KEY
     id_live int(10) unsigned NOT NULL INDEX
     id_klub int(10) unsigned NOT NULL INDEX
     id_pilkarz_a int(10) unsigned NOT NULL INDEX
     id_pilkarz_b int(10) unsigned NOT NULL INDEX
     minuta int('3') unsigned NOT NULL

live-doniesienia
     id int(10) unsigned NOT NULL auto_increment PRIMARY KEY
     id_live int(10) unsigned NOT NULL INDEX
     rodzaj ENUM('zwykly', 'gol', 'zolta_kartka', 'czerwona_kartka', 'poczatek', 'przerwa', koniec')
     minuta int('3') unsigned NOT NULL
     doniesienie varchar('255') NOT NULL
erix
Wydajność zależy od zaplanowanych relacji/zapytań, pokaż powiązania, a nie tylko listing. Choć z tego, co widzę, to powinno być ok.
henio
W zamyśle mam takie powiązania:
W tabeli terminarz-mecze przechowuje mecze, i jeśli do któregoś chce dodać relację live, wówczas wchodzę w panelu adm. w opcję 'stwórz relację' i dane zapisuje do tabeli live.
Następnie w tabeli live-pilkarze dodaje składy obydwu drużyn, gdzie id_klub pozwala systemowi rozpoznać, czy to drużyna gospodarzy czy gości. Kolumna rodzaj - chyba jasne.
Gdy padnie jakiś gol, ktoś dostanie żółtą kartkę itp to dane dodaje do tabeli live-wydarzenia gdzie id_pilkarz to 'sprawca całego zamieszania' a id_klub to zespół (tak żeby potem po odpowiedniej stronie tabeli wyświetlało dane)
Natomiast tabela live-doniesienia ma przechowywać opis minuta po minucie.
dr_bonzo
W skrocie:
dane o pilkarzach, minutach goli, kartek, zmian trzymaj prawie dowolnie w tabelach - na koniec cache'ujesz fragment HMTL'a po kazdej zmianie i userom wyswietlasz tego HTMLa.

Podobnie z transmisja - mozesz generowac i keszowac calego HTMLa/XML/RSS dla przegladarki po dodaniu kazdego wpisu - ile ich bedzie? 200/mecz (a w niej czy to pobierasz cala transmisje od nowa, czy tez tylko nowe elementy).

Czyli: zdarzen (zmian w bazie) bedzie niewiele w porownaniu do ilosci odswiezen (userow) wiec keszowanie to podstawa a sposob przechowywania danych prawi nie ma tu znaczenia i kazdy sensowny bedzie dobry.
henio
Cytat(dr_bonzo @ 10.08.2009, 18:35:17 ) *
W skrocie:
dane o pilkarzach, minutach goli, kartek, zmian trzymaj prawie dowolnie w tabelach - na koniec cache'ujesz fragment HMTL'a po kazdej zmianie i userom wyswietlasz tego HTMLa.

Podobnie z transmisja - mozesz generowac i keszowac calego HTMLa/XML/RSS dla przegladarki po dodaniu kazdego wpisu - ile ich bedzie? 200/mecz (a w niej czy to pobierasz cala transmisje od nowa, czy tez tylko nowe elementy).

Czyli: zdarzen (zmian w bazie) bedzie niewiele w porownaniu do ilosci odswiezen (userow) wiec keszowanie to podstawa a sposob przechowywania danych prawi nie ma tu znaczenia i kazdy sensowny bedzie dobry.

Czyli najistotniejsze jest cachowanie, a moje tabele są sensowne?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.