Jump to content
php.lv forumi

Ka veidot datubāzi ?


shurix

Recommended Posts

Nevaru īsti izdomat ka labāk butu veidot datubāzi. Vajadzīga priekš turniru veidošanas.

It kā viena tabula butu turnīra id, nosaukumam, tipam.

Nakoša tabula atkal speletajiem id, turnira_id, speletajs. Bet ka man glabat izspeletas spēles? Jauna tabula kurā būtu turnīra id un spelētāja id?

Un ja piedalas 4 speletaji 2 izspelē savā starpā un otri divi atkal savā tad no katras spēles viens tiek tālāk. Kā to varētu veidot?

Link to comment
Share on other sites

Tu domā `single elimination` principu?

 

Tad taisi:

 

tournament_id, game_id, parent_game_id, winner_palyer_id, level // level nozīmēs kurā leg-ā (plecā) spēlē (ātrākai atlasei un vispār lai redz)

tournament_id, player_id, game_id, is_winner

 

Būtībā biegās jāsanāk smukai piramīdai :)

 

Pēc šitās tabulas var veidot jebkura veida piramīdas - single/double elimination

 

Kopumā pakārtošana:

Turnīrs
  - pieaicināties spēlētāji (players)
  - izspēles (games)
   - izspēlēs spēlētāji (game_players) - te var būt gan komandās, gan N-pleyeri - tipa tenisā pa pāriem spēlē un t.t. - pieliec klāt komandas id

Edited by Delfins
Link to comment
Share on other sites

Nevajag domāt uzreiz tabulās un kaut kādos idos.

Vajag uzzīmēt uz papīra kastītes, kas simbolizē lietas, par kurām Tu glabāsi datus. Tātad Turnīri, Spēlētāji, Spēles.

Tad sasrakti kastītēs iekšā tās lietas, kas šīs lietas raksturo, piemēram, turnīra nosaukums, sākuma datums, spēlētāja vārds, spēles datums. Tad savelc saites (relācijas) starp kastītēm, piemēram, spēlētājs piedalās turnīrā, spēle notiek starp spēlētāju 1 (pirmā saite) un spēlētāju 2 (otrā saite), kaut kāda atzīme, kurš ir vinnētājs, pēc spēles X nākošā ir spēle Y (t.i. norāde uz to kuru spēli spēlēs vinnētājs). Un tikai tad sāc domāt, kā tu norādīsi to, ka spēlē piedalās tieši 2 spēlētāji (droši vien 2 laukus kas norāda uz spēlētāju). Tad tev arī radīsies jautājums - kā tu gribi glabāt spēlētājus? Vai katru reizi reģistrēsi no jauna, vai kaut kā vispirms savadīsi personas un tad spēlētājs būs tikai tas, kad konktrētā personas piedalās kādā turnīrā....

Tas viss saucās datu modelēšana un to ir jāveic pirms ķeras vispār pie tabulām.

Ātrumā neko labāku par šo pašlaik nevaru atrast...

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

. To atkal jaunā tabulā vai kā?

taa butu ljoti mulkjiigi dariit, jo ja buus vairaak speletaju (teiksim 32 ) tad atkal naktos veidot jaunu tabulu ....

 

pieliec klaat velvienu lauku teiksim SPELE ... un TURNIRS

 

un tad :

speletaji 16 --> SPELE ir 1 / turniirs visiem teiksim 1

8 --> SPELE ir 2

4 --> SPELE ir 3

2 --> Spele ir 4

 

taatad uzreiz vari ieguut vairaakus labumus ;)

1. zinaasi cik vispar speeles tika izspeletas (netkariigi no speletaaju skaita ...)

2. vienmer vareesi atlasiit VISUS uzvaretaajus / zaudetajus (pa spelem, pa turnieriim utt...)

 

( lielakais SPELE skaitlis buus arii Final speele ... )

Link to comment
Share on other sites

Arprāc kā man galva nestrādā uz šito lietu :D Nevar kads uz ātru roku kādu uzskatāmu piemēru uztaisīt kur būtu gan turnīri gan spēlētāji, kā arī izspelētās spēles kā tur tos uzvaretājus, zaudētājus?

Link to comment
Share on other sites

Nu bet dari kaa ieteica Gints Plivna Uziimee visu uz papiira , tad arii uzreiz redzeesi kas un kaa .....

Sho principu der atcereties vienmer !!!

Gluzji vienkarshi Cilveks Vizualu informaciju uztver Daudzkart vieglak nekaa Rakstisku (tekstualu) ....

// peimeram iedomajies kaadas organizacijas pelnjas/zaudejumu atsakaiti tabulaa no skaitliem { tas ir kaa tu paslaik megjini izdomaat}

Vai Grafikaa { Tas ir taa kaa buutu jaadara } ... Kuraa gadijumaa atraak pamaniisi kljuudu ???

Link to comment
Share on other sites

Triviāls uzdevums!

 

Pieņemu, ka Tev ir:

* spēlētāji

* spēles

* turnīri

 

Spēlētāji - tabula Speletaji ar, piemēram sekojošiem laukiem:

 

SpeletajaID - PK

Vards

Uzvards

Vecums

... citas īpašības

 

 

Turnīri - tabula, kur saglabāt turnīrus

 

TurniraID - PK

Nosaukums

Limenis

... citas īpašības

 

 

Spēlētāju un turnīru saisttabula (pieņemot, ka viens spēlētājs var būt vairākos turnīros un otrādi):

 

TurniraSpeletaji

 

ID - PK

TurniraID

SpeletajaID

 

 

Spēļu tabula - katra spēle var piederēt tikai vienam turnīram, savādāk nespēju iedomāties, kas tā būtu par spēli, kas attiektos uz diviem turnīriem:

 

Speles

 

SpelesID - PK

TurniraID - FK

UzvaretajaID - tā kā princips ir uzvarētājs viens vai neizšķirts, tad šeit ievada tā spēlētāja ID, kurš uzvarēja. Ja bija neizšķirts, var ievadīt šeit 0

NakamasSpelesID - ja notiek play-off, tad no divām spēlēm izriet viena - šeit var ievadīt nākamās spēles ID - ja šī spēle būs 1/4 fināls, tad nākamās spēles ID būs izrietošā pusfināla spēle. Satiksies UzvaretajaID.

NorisesVieta

Laiks

... citas īpašības

 

 

Spēļu un spēlētāju saisttabula - viens spēlētājs var spēlēt vairākas spēles, savukārt, vienā spēlē var spēlēt vairāki spēlētāji - šī tabula būs nemitīgi atjaunojama un papildināma:

 

SpeluSpeletaji

 

ID - PK

SpelesID

SpeletajaID

 

 

P.S. Ja nepieciešamas komandas, var uztaisit tabulu Komandas, uz kuru ID būs tabulai Speletaji lauks KomandasID - FK. Viens spēlētājs, tak nevar piederēt vairākām komandām. Attiecīgi pēc tam ar spēļu un turnīru tabulām saistas nevis spēlētāju tabulas ieraksti, bet komandu tabulas ieraksti.

 

FK - foreign key

PK - primary key

 

Viss!!! Visa māksla! Atliek tikai pareizi sarakstīt pieprasījumus un viss kārtībā! :)

Link to comment
Share on other sites

Vēl gribēju atzīmēt, ka tās īpašības var pierakstīt klāt cik vien vajag un kādas vajag, piemēram, tabulai spēle var pievienot vēl vienu lauku spēles rezultāts vai arī, ja runa iet par savāktiem, punktiem, tad SpelesUzvaretajaRezultats un SpelesZaudetajaRezultats. Arī turnīrus var saistīt ar sezonām, gadiem un arī līgām, izveidojot, ja nepieciešāms attiecīgas tabulas un pievienojot attiecīgos FK tabulai Turniri, vai arī papildus lauku.

 

Pāris piemēra selekti priekš manis aprakstītā modeļa:

 

1. dabūt turnīra ar ID=8 uzvarētāja vārdu un uzvārdu:

 

SELECT s.Vards, s.Uzvards FROM Speletaji s, Speles sp INNER JOIN SpeluSpeletaji ss ON ss.SpelesID=sp.SpelesID AND sp.NakamasSpelesID=0 AND ss.SpeletajaID=s.SpeletajaID WHERE sp.TurniraID=8

 

2. dabūt visas spēles no turnīra ar ID=8, kuras ir uzvarējis spēlētājs ar ID=21. (piemērā, tabula Speles ir izveidots lauks Nosaukums, kas satur spēles nosaukumu):

 

SELECT sp.Nosaukums FROM Speles sp WHERE sp.UzvaretajaID=21 AND sp.TurniraID=8

 

 

Ja ievēro db teoriju, principā visu var izdarīt! :)

Link to comment
Share on other sites

×
×
  • Create New...