datenbankdesign



  • hallo,
    ich möchte einen online ligamanager mit php und mysql schreiben, habe aber probleme mit dem datenbankdesign.

    habe einfach mal drauf los programmiert und bei bedarf tabellen erstellt ==> CHAOS pur....daher habe ich beschlossen noch einmal anzufangen...diesesmal allerdings mit einem durchdachten datenbankdesign.

    die einzige tabelle die mir klar ist wäre die mit den mannschaften:

    mannschaften: id,name,sonstige infos

    weiters soll noch abgespeichert werden:

    -sämtliche spielrunden (welche spielrunde, wer gegen wen, datum, usw.)
    -spielberichte zu den spielen
    -aktuelle tabelle

    die aktuelle tabelle ist wohl eine komplett eigenständige tabelle, die nach jeder runde UPGEDATED wird...

    kann/soll man (ist es gut?) die ganzen anderen informationen (die spiele betreffend) einfach in eine riesentabelle abspeichern oder eher aufteilen?

    wäre nett wenn mir jemand helfen könnte....

    mfg



  • Naja, das koennte schnell ausufern ....

    Will man es "richtig" machen, und noch ne ganze Menge dabei "lernen", geht man wie die "profis" vor:

    Man schreibt alle Begriffe auf, was man als Info so hat ....
    (Bundesliga, Spielrunde, Spielzeit, Kommentar, datum ... etc)
    dann fanegt man an, daraus die Objekte, und die dazugehoerigen eigenschaften zu identifizieren. (Spielrunde, hat eigenschaft Datum, Manschaft 1, Manschaft 2, spielstand ... z.B.)
    Danach versucht man die Beziehungen zwischen den Objekten zu beschreiben .... (Spielrunde hat Manschaft1 (Objekt Manschaft) und Manschaft2 (Objekt Manschaft))
    Damit das alles schoen dokumentiert ist, und von allen gleich lesbar ist, pflegt man das im UML konformer Notation in einem entsprechenden Tool ein ...
    (wenn Glueck hast, kann das UML Tool DDS-Scripe gleich erzeugen, besser ist aber, man macht das per hand, wegen dem lerneffekt und ned alle tools arbeiten richtig gut 🙂 )
    Nun benutzt man also sein Wissen ueber relationale Datenbanken und erstellt das Datenbank Layout an hand der identifizeirten beziehungen zwischen den Objekten ....
    Dieses Ausgliedern von Beziehungen aus einer grossen Flachen Tabelle in mehrere mit beziehungen untereinander nennt man Normalisierung ... Daten die Doppelt in der Tabelle vorkommen, nennt man reduntant ....

    Meist wird als Abschluss der ganzen Aktion noch mal ein Redesign gemacht, in hinblick auf die Optimierung. Man schaut sich die Haeufigkeiten und eigenschaften bestimmter Abfragen(queries) an, und optimiert enstprechend der Haeufigkeit auf diese Speziellen Abfragen. Das fuehrt meist wieder zu einem Reuckschritt in Sachen Normalisierung(Denormalisierung) und teilweise auch zu reduntanten Daten .... (spezielle tabellen, die aus daten anderer tabellen befuellt werden, "relativ" selten aktualisiert werden, aber unheimlich schnell komplexe Abfrage-Ergebnisse liefern) ....

    Also ganz so trivial ist die Sache also nicht, zumindest reicht es immer um Buecher mit 1000 und mehr seiten zu relativ viel Geld erfolgreich zu verkaufen .... :-))))

    Ciao ....



  • also, ich bin nach langem überlegen auf folgende lösung gekommen:

    2 tabellen:

    teams: id, liga, name, spiele, siege, unentschieden, niederlagen, geschossen, bekommen, punkte

    spiele: id, runde, datum, heimmannschaft, heimtore, heimaufstellung,heimschützen, heimgelb, heimrot, auswärtsmannschaft, auswärtstore, auswärtsaufstellung,auswärtsschützen, auswärtsgelb, auswärtsrot, bericht, infos

    nun hab ich aber ein problem, wenn ich die id von teams jeweils mit heimmannschaft und auswärtsmannschaft verknüpfen möchte, das geht nicht....

    weiß jemand eine lösung?

    mfg



  • Also 2 Tabellen sieht aufn ersten blick schon mal recht duerftig aus ...
    Ausserdem versuchst du zu viele dinge in eine Tabelle zu packen ...

    siege, unentschieden, niederlagen, geschossen, bekommen, punkte sieht mir eher wie berechnungen aus, anstatt feste werte in ner Tabelle ...

    verknuepfungen realisierst du durch die ID's ....
    Besipielsweise

    [Mannschaften]
    ID
    Name

    [Spiel]
    ID
    Datum
    HeimManschaft_ID
    AuswaertsManschaft_ID
    Heimtore
    AuswaertsTore

    Punkto der sowas Solltest dir eh errechnen ....

    Ciao ...



  • Original erstellt von <XYZ>:
    **Also 2 Tabellen sieht aufn ersten blick schon mal recht duerftig aus ...
    Ausserdem versuchst du zu viele dinge in eine Tabelle zu packen ...

    siege, unentschieden, niederlagen, geschossen, bekommen, punkte sieht mir eher wie berechnungen aus, anstatt feste werte in ner Tabelle ...

    verknuepfungen realisierst du durch die ID's ....
    Besipielsweise

    [Mannschaften]
    ID
    Name

    [Spiel]
    ID
    Datum
    HeimManschaft_ID
    AuswaertsManschaft_ID
    Heimtore
    AuswaertsTore

    Punkto der sowas Solltest dir eh errechnen ....

    Ciao ...**

    stimmt schon das ich das auch berechnen kann, aber wenn man davon ausgeht, das die seite am tag sagen wir 50-100 mal aufgerufen wird, dann muss man jedesmal alles spiele durchgehen um die ganzen werte zu berechnen, so wird die tabelle einmal die woche neu berechnet....

    aus einem tutorial:

    Bei umfangreichen Datenbeständen mit hohen Zugriffszahlen kann es sich jedoch teilweise empfehlen, aus Performancegründen wieder eine gewisse Denormalisierung herzustellen.

    im endeffekt werden dann um die 10 ligen verwaltet....

    mfg


Anmelden zum Antworten