Autor Zpráva
ZdenekPNJ
Profil
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
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 ....
Jenže co když bude v jednésezńě součástí dvou týmů? (A čka iBéčka zároveň)????
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
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
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
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
Kcko:
To vypadá hodně zajímavě, můžeš to prosím trochu více upřesnit.
Kcko
Profil
ZdenekPNJ:
Co potřebuješ ještě vědět za info?
ZdenekPNJ
Profil
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).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: