Stránka 1 z 2

Pomoc se strukturou MySQL

Napsal: 19 led 2013 12:08
od Minnie
Dobrý den,

chtěl bych Vás poprosit o pomoc s návrhem struktury databáze v MySQL.

Mám jednu tabulku ve které jsou závodníci(jejich vlastnosti, jmena, atd.)
Druhou tabulku ve které jsou závody

Každý závodní den budou cca 4 závody, potřebuji nějak udělat aby se závodník přihlásil na zvolený závod. Ted právě nevím jestli dělat další tabulku, ke každému závodu, do které se budou závodníci "zapisovat". Potřebuji, aby když se rozklikne stránka se závodem, tam byl výpis přihlášených závodníků.
Nevím právě jestli an to dělat v MySQL další tabulku, nebo to nějak ošetřit přes informaci u závodníka do kterého závodu je přihlášen (id závodu).

Proběhne script který na základě určitého matematického vzorce vezme v úvahu atributy závodníka a závodu a potřebuji aby se uložili výsledky do nějaké tabulky a aby se opět zobrazili na stránce závodů, stejně jako před proběhnutím scriptu je seznam přihlášených. Tak nevím jestli dělat novou tabulku, nebo jestli se to dá nějak očetřit opět přes závodníka.

Navíc však potřebuji aby se zobrazovala historie závodu závodníka (posledních cca 15 závodů) takže ty data musejí někdě zůstávat a nesmějí se novým závodem přepsat.

Chtěl bych Vás poprosit o radu ohledně struktury. Na co udělat samostatnou tabulku, které spolu propojit.

Nejde mi o napsání příkazů, ale spíše o pomoc se samotnou strukturou. Jestli nemá někdo s něčím podobným zkušenosti.

Věci jako následný výpis přihlášených, zaregistrování do závodu atd... pomocí php problém není, ale pouze nevím jak to ideálně sestavit.

Předem děkuji

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 13:01
od d1amond
Pokud se bavíme o relacích, tak se bez pomocné tabulky neobejdeš. Potřebuješ někde sbírat data z vazby Závodník > Závod.

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 13:56
od Minnie
Takže jestli to dobře chápu, budu mít:

Tabulku závodník
Tabulku závod

Tabulku Závod přihlášené -> kde bude na řádku závod a k němu přihlášení závodníci
Tabulku výsledky -> zde se zapíšou ke každému závodu výsledky přihlášených závodníků z tabulky Závod přihlášené.

Z tabulky závod přihlášené budu vypisovat přihlášené závodníky, z tabulky Výsledky potom vypíšu výsledky.

A když si pak rozkliknu profil závodníka, tak z které tabulky to načte jeho historii (cca 15 závodů) Mám také na to udělat nějakou speciální tabulku?

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 14:10
od d1amond
Tabulka Historie nebude nutná, protože to vytáhneš z té propojovací (relace M:N, protože každý závod může mít více závodníků a opačně). Budeš tam míst ID závodu i ID závodníka, tabulku výsledků propojíš s tabulkou závodů i s tabulkou závodníků (potřebuješ vytáhnout závod, i kdo vyhrál).
Tabulka výsledků by možná ani nemusela být, v té propojovací by mohl být údaj o pařadí, IDzavodnik + IDzavod + poradi. Ale větší přehled bude v samostatné tabulce.

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 15:07
od Minnie
Jestli to tedy chápu mělo by to fungovat nějak takhle:

Závodník z tabulky A se zaregistruje do závodu z tabulky B. Tím že odešle registraci do závodu, se v abulce propojovací vytvoří řádek s id závodu a id závodníka.

Potom proběhne časový script, vezme z tabuly propojovaci všechny řádky kde id závodu splnuje podmínku datumu závodu a pro každý řádek to provede výpočet podle předem nastaveného vzorce a tento výsledek to zapíše do nové tabulky kam zapíše id závdu, id závodníka, tu naší hodnotu a to co z ní plyne.

Nebo mi tam nějaká tabulka vypadla?

Když pak budu chtít udělat ke každému závodu výpis přihlášených závodníků, tak vezmu tabulku propojovací a zobrazím ten řádek, kde id zavodu bude stejný z určitým závodem a id závodníka nahradím při výpisu jménem z tabulky A.

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 15:59
od CZechBoY
máš tam duplicitní data!
podívej se na "propojovaci" a "výsledky" vidíš tam tu duplicitu? ta je zbytečná

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 16:12
od Minnie
JJ vidim, takže sloupce "hodnota, tr.b., umístění" můžu vlastně hodit do tabulky propojovaci a tim jednu tabulku uplne vynechat.

A když pak budu u závodníka chtít vypsat historii jeho závodů, tak prohlédám sloupec id zavodnik a vypíšu zavod a umístění.

Takže když z posledních dvou tabulek udělám jednu, tak by mohla ta struktura fungovat?

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 16:16
od d1amond
Ne, duplicita je tam idZavod. To je tam zbytečné. Každopádně doporučuji z vlastní zkušenosti - začínej každou tabulku primárním klíčem. Když mám tabulku Zavovdnik, tak PK volim idZavodnik, u tabulky Vysledky zase idVysledky, atd... Pak nemusíš přemýšlet, která tabulka má jaké PK.

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 16:19
od CZechBoY
jj udělej si id_závod abys to mohl pak jednoduše editovat nebo odkazovat, případně dál rozšiřovat článkama atd.
je tu jednoduché pravidlo: každá tabulka musí mít primární klíč

teď je otázka jestli je lepší mít spojovací tabulku nebo v těch výsledcích mít obsaženou tu spojovací tabulku
já bych spíš tu spojovací tabulku vložil do té tabulky závody

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 16:40
od Minnie
Děkuji az radu s PK, hned to jdu napravit u již existujícich tabulek.

Ted moc nechápu jak vložit tu spojovací do té se závody. Když se přihlásí závodník na stránku, vybere si dostupný závod a přihlásí se do něho, tak aby se v nějaké tabulce objevilo Závodník X přihlášenej do Závodu Y. Do Závodu Y se ale může přihlásit více závodníků, ted nechápu ale jak by to fungovalo, kdyby se to zapisovalo do tabulky Závody

Děkuji za pomoc a omlouvám se, jestli mi nedochází úplně jasný věc

Určitě to není tak, že byhc byl líný hledat třeba na googlu, jenom nevím jak to nazvat, tak jeslti víte o nějakém tutoriálu, který by obsahoval hodně podobnou strukturu, budu rád, ať Vás nemusím otravovat.

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 16:42
od CZechBoY
á je to zase v pr.. píšu dřív než vim co napsat :D
samozřejmě tabulka výsledky :oops:

Re: Pomoc se strukturou MySQL

Napsal: 19 led 2013 22:38
od Minnie
Nechci zbytečně otvírat nové téma, potřebuji ještě jednu malou radu.

Je nějaký příkaz pro SQL na vložení náhodného čísla? Něco jako je v php Rand(x,y)