Bundesliga-Tippspiel
Diego
- datenbank
Hallo,
ich will zu Übungszwecken und zum späteren privaten Einsatz in meinem Freundeskreis ein Bundesliga-Tippspiel programmieren.
Meine Grobplanung:
Hab sowas ähnliches schonmal mit Excel gemacht, also mir die Tipps per Email zuschicken lassen in Excel kopiert und dann Excel rechnen lassen. Ich denke den Code zum Vergleich der Ergebnisse usw. bekomme ich schon hin bzw. möchte ich es erstmal probieren und melde mich dann zu gegebener Zeit ;)
Meine Fragen beziehen sich vielmehr auf den Start. Bevor ich mir bereits zu Beginn etwas kaputt mache.
Was für Tabellen würdet ihr anlegen? Für jeden Spieltag mit den Begegnungen des Tages eine gesonderte Tabelle oder alle Begegnungen einer Saison in einer Tabelle mit entsprechender Spalte "Spieltag"?
Außerdem in gleicher Tabelle die Ergebnisse und Tipps? Oder sollte ich das irgendwie anders aufteilen? Was haltet ihr für sinnvoll?
Also mein erster Ansatz (so ausm Stehgreif, weil die Idee gerade erst gewachsen ist):
Tabelle 1:
id | Heimteam | Auswärtsteam | Spieltag | Erg. H-Tore | Erg. A-Tore | Tipp1 H-Tore | Tipp1 A-Tore | Tipp2 H-Tore | Tipp2 A-Tore | ...
Tabelle 2:
id | Name | Punkte
(oder auch in Tab. 1 die Tipps weglassen und bei den Spielern eintragen)
Werd mir auch noch das ein oder andere kostenlose Script (davon gibt es ja massig) runterladen und mir die Tabellenstruktur angucken. Nur besteht dann wieder die Gefahr, dass ich mir zu viel abgucke, womit der Lerneffekt hin wäre und auch, dass ich übermutig werde, wenn ich sehe, was mit den Scripts so alles möglich ist.
Für allgemeine Tipps für so ein Tippspiel bin ich natürlich auch dankbar.
Gruß
Diego
Ich vergass:
Das Ganze soll mit PHP und MySQL umgesetzt werden.
Sollte ich noch andere wichtige Informationen vergessen haben, reiche ich die gerne nach.
Mahlzeit Diego,
Tabelle 1:
id | Heimteam | Auswärtsteam | Spieltag | Erg. H-Tore | Erg. A-Tore | Tipp1 H-Tore | Tipp1 A-Tore | Tipp2 H-Tore | Tipp2 A-Tore | ...Tabelle 2:
id | Name | Punkte
Mach Dich bitte (in Deinem eigenen Interesse) zum Thema Normalisierung schlau. Ich würde grob folgende Struktur vorschlagen:
Tabelle Spieler
ID | Name | ...
---+------+-----
Tabelle Mannschaft
ID | Name | ...
---+------+-----
Tabelle Begegnung
ID | Heim_ID | Gast_ID | Heim_Tore | Gast_Tore | ...
---+---------+---------+-----------+-----------+-----
Tabelle Tipps
ID | Begegnung_ID | Spieler_ID | Heim_Tore | Gast_Tore | Punkte | ...
---+--------------+------------+-----------+-----------+--------+-----
"Heim_ID" und "Gast_ID" sind dabei jeweils Manschaft_IDs, die Tore kannst Du dort nach dem Spiel eintragen. Mittels geeigneter Abfragen kannst Du dann die Spalte "Punkte" in der Tabelle "Tipps" füllen und auch dort den Gesamtpunktestand der einzelnen Spieler ermitteln.
MfG,
EKKi
Hallo EKKi und Harlequin,
vielen Dank für den Link zum Thema Normalisierung; klingt zwar erstmal sehr trocken und kompliziert, aber da muss man als Anfänger ja immer mal wieder durch und Harlequin hat mich ja vorgewarnt, dass es viel Lesestoff ist.
Tabelle Spieler
ID | Name | ...
---+------+-----Tabelle Mannschaft
ID | Name | ...
---+------+-----Tabelle Begegnung
ID | Heim_ID | Gast_ID | Heim_Tore | Gast_Tore | ...
---+---------+---------+-----------+-----------+-----Tabelle Tipps
ID | Begegnung_ID | Spieler_ID | Heim_Tore | Gast_Tore | Punkte | ...
---+--------------+------------+-----------+-----------+--------+-----"Heim_ID" und "Gast_ID" sind dabei jeweils Manschaft_IDs, die Tore kannst Du dort nach dem Spiel eintragen. Mittels geeigneter Abfragen kannst Du dann die Spalte "Punkte" in der Tabelle "Tipps" füllen und auch dort den Gesamtpunktestand der einzelnen Spieler ermitteln.
Vielen Dank für diesen Vorschlag. Werde das mal als Grundgerüst übernehmen und vlt. finde ich nach studieren des Wikipediaartikels noch Verbesserungsmöglichkeiten ;-)
Wünsche euch noch ein schönes Bergfest.
Yerf!
Meine Fragen beziehen sich vielmehr auf den Start. Bevor ich mir bereits zu Beginn etwas kaputt mache.
Das ist gerade bei Datenbanken eine sehr gute Idee, mit einem schlechten Datenmodell kann man sich später viel Ärger einhandeln.
Was für Tabellen würdet ihr anlegen? Für jeden Spieltag mit den Begegnungen des Tages eine gesonderte Tabelle oder alle Begegnungen einer Saison in einer Tabelle mit entsprechender Spalte "Spieltag"?
Alles gleichartige in eine Tabelle. Es sollte zur Laufzeit der Anwendung nie die Notwednigkeit anfallen neue Tabellen anlegen zu müssen (wie es sonst ja pro Spieltag nötig wäre). Und keine Angst vor vielen Einträgen in einer tabelle, genau dafür wurden Datenbanken erfunden.
Außerdem in gleicher Tabelle die Ergebnisse und Tipps? Oder sollte ich das irgendwie anders aufteilen? Was haltet ihr für sinnvoll?
Ich würde mal so grob Überschlagen 3 Tabellen anlegen: Spiele (mit Spieltag und Ergebnis), Mitspieler und Tipps (mit Zuordnung zu Mitspieler und Spiel)
Also mein erster Ansatz (so ausm Stehgreif, weil die Idee gerade erst gewachsen ist):
Tabelle 1:
id | Heimteam | Auswärtsteam | Spieltag | Erg. H-Tore | Erg. A-Tore | Tipp1 H-Tore | Tipp1 A-Tore | Tipp2 H-Tore | Tipp2 A-Tore | ...
Hier müsstest du zur Laufzeit die Tabellenstruktur anpassen und für jeden weiteren Tipp eine neue Spalte anlegen, auch das ist schlecht. Die Struktur sollte sich nach dem einmaligen Anlegen nicht mehr ändern (außer die Anwendung wird um neue Features erweitert).
Der übliche Weg um zu einer guten Tabellenstruktur zu kommen ist die Normalisierung. Das ist erst mal etwas Lesestoff für eine allgemeine Vorgehensweise (wichtig sind vor allem die ersten 3 Normalformen). Dadurch vermeidet man Redundanz in der Datenhaltung und erhält eine "stabile Struktur".
Gruß,
Harlequin
Hi Diego,
Tabelle 2:
id | Name | Punkte
jenseits der Frage der generellen Datenbankstruktur (die ist ja bereits weitgehend beantwortet) rate ich Dir davon ab, die Punkte eines Spielers in der Datenbank zu speichern. Es ist ein absolut zumutbarer Aufwand fuer die Datenbank/das PHP-Skript, bei Ausgabe der Tabelle die Punkte zu berechnen, und Du bist erheblich flexibler, was z.B. nachtraegliche Aenderungen der Regeln, oder, viel wichtiger, nachtraegliche Aenderungen von Ergebnissen betrifft (es kam ja schon vor in der Bundesliga, dass Spiele nachtraeglich "am gruenen Tisch" entschieden wurden).
Uebrigens: Geiles Tor, das Du am Samstag gegen Cottbus gemacht hast ;-)
viele Gruesse
der Bademeister
Hi Bademeister!
jenseits der Frage der generellen Datenbankstruktur (die ist ja bereits weitgehend beantwortet) rate ich Dir davon ab, die Punkte eines Spielers in der Datenbank zu speichern. Es ist ein absolut zumutbarer Aufwand fuer die Datenbank/das PHP-Skript, bei Ausgabe der Tabelle die Punkte zu berechnen, und Du bist erheblich flexibler, was z.B. nachtraegliche Aenderungen der Regeln, oder, viel wichtiger, nachtraegliche Aenderungen von Ergebnissen betrifft (es kam ja schon vor in der Bundesliga, dass Spiele nachtraeglich "am gruenen Tisch" entschieden wurden).
Danke für den Tipp. Wie gesagt, hab ich mir über das eigentliche Skript erst wenig Gedanken gemacht. Aber ich werde diese Option ebenfalls in Betracht ziehen :)
Uebrigens: Geiles Tor, das Du am Samstag gegen Cottbus gemacht hast ;-)
Joa, ich wusste net wohin mit dem Dingen und hab einfach mal draufgehalten ;-)