Autor | Zpráva | ||
---|---|---|---|
ZdenekPNJ Profil |
#1 · Zasláno: 7. 10. 2014, 12:39:21
Zdravím všechny,
potřeboval bych poradit, jak vyřešit databázově vztah 1. Existuje sportovní KLUB (např. FC Brno) 2. Tento klub má několik Týmů (A tým, B tým, dorost, žáci apod.) 3. A součástí těchto týmů jsou Hráči (Jan Novák, Petr Horák apod. Jenže zde nastává problém, protože: a) každou sezónu může být se hodnoty u 2. a 3. mění. Například v sezóně 2013/2014 má KLUB týmy (Atým, B tým a žáky), zatímco v následující sezóně 2014/2015 jsou to již týmy (A tým, B tým a dorost). b) a zcela nezávisle na tom jsou hráči. Např. Jan Novák může být v sezóně 2013/2014 členem týmu žáci a v dalším roce pak členem týmu dorost. A Petr Horákv sezóně 2013/2014 nastupoval za B tým a v další sezóně se stal členem a týmu. c) a to ještě navíc může nastat situace, kdy nebude jen členem jednoho týmu, ale může hrát za A tým i za B tým. Lámu si hlavu s tím, jak například pomocí M:N relací v databázi mysql vyřešit jednotlivé tabulky a jak tyto následně provázat a vybírat z nich data dle potřeby |
||
mimochodec Profil |
#2 · Zasláno: 7. 10. 2014, 12:45:59
Napadá mě toto:
- tabulka klubů - tabulka týmů - tabulka hráčů - tabulka vazby hráč-klub - tabulka vazby hráč-tým V těch posledních dvou tabulkách bys mohl uchovávat i od-do, takže bys viděl nejen aktuální stav, ale i historii. Co nemá zadáno "do", to je současný stav. |
||
ZdenekPNJ Profil |
mimochodec:
To by samozřejmě šlo, ale problém nastane v momentě, kdy hráč 1 bude v jedné sezóně součástí týmu A, pak přejde do B týmu, pak třeba skončí vklubu a následně se zase další sezónu vrátí a bude např. v Atýmu nebo dokonce bude nastupovat za tým A i B. Mě předtím napadl model: Vyvořit tabulku rocniky ID nazev 1 2013/2014 2 2014/2015 ... provázat tabulku rocniky s již dříve vytvořenou tabulkou tymyklubunapř. v nové tabulce TymyARocniky: ID IDrocnik IDtymuklubu 1 1 1 2 1 2 3 2 1.... a následně pak hráče s konkrétním ID propojit s tabulkou TymyARocniky prostřednictvím další tabulky TymyARocnikyAHraci ID IDTymyARocniky IDHrace 1 1 1 2 1 2 3 2 1 .... |
||
mimochodec Profil |
ZdenekPNJ:
„To by samozřejmě šlo, ale problém nastane v momentě, kdy hráč 1 bude v jedné sezóně součástí týmu A, pak přejde do B týmu“ Proto píšu o té historii a aktuálním stavu. Když tam budeš mít i časy, neměl bys mít problém najít pro libovolné datum příslušnost hráče ke klubu nebo týmu (týmům). Jestli navíc pracuješ se sezónou, můžeš mít i tu tabulku rocniky, kterou k té dané vazbě hráč-tým přijoinuješ. Nevidím problém v tomto: ID IDTymu IDHrace datum_od datum_do 1 1 1 2014-01-30 2014-03-30 3 2 1 2014-02-30 2014-04-30 |
||
ZdenekPNJ Profil |
#5 · Zasláno: 7. 10. 2014, 13:46:41
mimochodec:
„Jestli navíc pracuješ se sezónou, můžeš mít i tu tabulku rocniky, kterou k té dané vazbě hráč-tým přijoinuješ.“ Možná přesně nechápu jak to s tím JOIN v tomto případě myslíš |
||
mimochodec Profil |
ZdenekPNJ:
„Možná přesně nechápu jak to s tím JOIN v tomto případě myslíš“ No takhle: to, co jsem psal ve #2, tam o sezónách nebyla řeč. Myslel jsem to tak, že hráč někde hraje prostě naprosto nahodile od jednoho datumu do druhého, proto tam píšu o datumech, nikoli o sezóně. Netuším, kdy se sezóny lámou, prostě by sis na úrovni php z informace o sezóně udělal dva datumy a dal ho do SELECTu. Druhá možnost je jak píšeš, udělat si extra tabulku sezón a v té tabulce, jak jsem ji popsal ve #4, přidat sloupec IDsezony. Logiku, o jakou sezónu pro ten který řádek jde, by sis musel ošetřit už v php a vzniká tím určitá redundance, což nemám rád - dva datumy a IDsezony mají obsahovat tutéž informaci (byť v jiné podobě) a v principu (třeba po změně nějakých tvých algoritmů) se nemusí shodovat. Proto bych nějaké sezónování dělal přes ty datumy a ne přes další tabulku. Ale je možné, že mi něco zásadního uniká. |
||
ZdenekPNJ Profil |
#7 · Zasláno: 7. 10. 2014, 14:40:03
mimochodec:
„dva datumy a IDsezony mají obsahovat tutéž informaci (byť v jiné podobě)“ No jde o to, že tabulka sezóny(ročníky) je již vytvořena pro organizaci dat (například že konkrétní zápasy spadají pod tu a tu sezónu). Když přemýšlím nad tím co jsi napsal, možná by ta redaudance šla vyřešit u hráčů tak, jak jsi psal ty, tzn. konkrétní datum od-do a přidat do tabulky ročníky datumové vymezení ročníků (např. OD 2013-07-01 DO 2014-06-30) a pak by se ročníky nemuseli přiřazovat k hráčům, ale podle datumů u hráčů by se daly přiřadit ročníky k hráčům. |
||
mimochodec Profil |
#8 · Zasláno: 7. 10. 2014, 14:45:49
ZdenekPNJ:
Takže tabulka ročníků (mj. datumod, datumdo) a tabulka účasti hráčů v klubech (mj. datumod, datumdo). Je to lehce kostrbaté, ale asi správné. Určitě by se na základě toho dalo filtrovat, což tě asi zajímá nejvíc. |
||
Kcko Profil |
ZdenekPNJ:
Předně sorry, nepročetl jsem to celé, takže mi možná něco uniklo, ale zdá se mi, že řešíš to co jsem řešil já. (1 hráč zařazený v X týmech v různých soutěžích a sezónách viz http://fifa.gameway.cz/hraci/cristiano-ronaldo/souteze) Stačí mít následující tabulky rejstrik_hracu rejstrik_soutezi rejstrik_sezon rejstrik_tymu propojení souteze, sezony a tymu a pomocí tohoto PK do další tabulky ukládat hráče (na soupisku). Pak může hráč Pepík hrát za A tým v soutěži 1 liga v sezóně 2014 a zároveň může hrát i za dorost v té samé sezóně nebo příští sezónu hrát za někoho jiného. |
||
ZdenekPNJ Profil |
#10 · Zasláno: 7. 10. 2014, 19:55:45
Kcko:
To vypadá hodně zajímavě, můžeš to prosím trochu více upřesnit. |
||
Kcko Profil |
#11 · Zasláno: 8. 10. 2014, 10:56:13
ZdenekPNJ:
Co potřebuješ ještě vědět za info? |
||
ZdenekPNJ Profil |
#12 · Zasláno: 8. 10. 2014, 11:16:56
Kcko:
„propojení souteze, sezony a tymu a pomocí tohoto PK do další tabulky ukládat hráče (na soupisku)“ Nepochopil jsem přesně, zda se jedná o další tabulku, či soupisku, či to ukládat do tabulky rejstrik_hracu |
||
Kcko Profil |
rejstrik_tymu ============== id | nazev 1 | Sparta 2 | Slavia rejstrik_hraci ============== id | jmeno 1 | Franta 2 | Pepa rejstrik_souteze ============== id | nazev 1 | 1 liga 2 | Pralesni liga 3 | Juniorka rejstrik_sezony ============== id | nazev 1 | 2013 2 | 2014 3 | Zimní příprava 2014/2015 soutez_sezona (propojení soutěže se sezónou) ============== id | soutez_id | sezona_id 1 | 1 | 1 2 | 1 | 2 3 | 1 | 3 tymy_soutez (zařazení týmu do konkretní soutěže v konkretní sezóne, viz tabulka nad). ============== id | tym_id | soutez_sezona_id hraci_v_tymu (zařazení hráče do týmu který hraje konkretní soutěž v konkrétní sezóně). id | hrac_id | tymy_soutez_id Tabulky / sloupečky si pojmenuj dle své konvence. Základ je myslím jasný, důležité jsou poslední 3 tabulky, které by měly vyhovět tvým potřebám (samozřejmě nevím do jaké hloubky / abstrakce potřebuješ až zajít, ale mělo by Ti to stačit). |
||
Časová prodleva: 9 let
|
0