n x m Kombination

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

n x m Kombination

Beitrag von Scotty »

Ich habe eine Datenbank (MariaDB) mit einem Spieler pro Zeile. In den Spalten stehen Name, Passwort, Rating usw. Das Rating rechne ich pro Spiel in Relation zum Rating der Mitspieler und aktualisiere die einzelne Zelle. Jetzt hätte ich gern eine Kombination, wie oft Spieler 1 gegen 42 gespielt hat, wie oft gewonnen und wie oft verloren. Ich habe keine rechte Idee, wie ich das aufbauen könnte, außer alles hintereinander schreiben. Aber da gibt es sicher eine best-practice Lösung...

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: n x m Kombination

Beitrag von Antrepolit »

Hallo Scotty,

verzeih die plumpe Antwort, aber du musst dich dazu mit Relationalität bei Datenbanken beschäftigen. Hoffe, dass diesmal in Kikipedia keine Fehler enthalten sind: http://de.wikipedia.org/wiki/Relationale_Datenbank
Grüße, Antrepolit

care only if your os is really burning

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: n x m Kombination

Beitrag von Scotty »

Hast du noch eine Idee, was in der zweiten Tabelle drin stehen sollte? Dem Wikipedia-Beispiel folgend, wären das alle gemachten Spiele - da würde ich dann doch lieber n x m Spieler (Zeile/Spalte) mit Gewinn/Verlust pro Zelle nehmen. Das könnte allerdings recht umfangreich werden.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: n x m Kombination

Beitrag von Antrepolit »

Ok, ein wenig Hilfe. Aber du solltest dir das bei Kikipedia wirklich durchlesen und verstehen.

Du hast eine Tabelle für die Spiele und eine für die Spieler. Die erste Tabelle enthält eine ID, einen Primärschlüssel für jedes Spiel und dessen Daten (wozu nicht die Spieler gehören). Genauso enthält die zweite eine ID für jeden Spieler und dessen Daten. Außerdem benötigst du eine dritte Tabelle, eine sog. "Relationstabelle". Diese enthält zwei Spalten. EIne enthält die Spiel-ID. Die zweite die Spieler-ID. So werden jedem Spiel die Spiele zugeordnet. Diese Spalten sind sowohl Primär- als auch Fremschlüssel der Relationstabelle.

Um die Aufteilung der Daten jedoch korrekt hinzubekommen, musst du dich mit "Normalisierung" bei relationalen Datenbanken beschäftigen - ODER du probierst es ats. Es ist halt nicht ganz so einfach. Aber du wirst schon merken, wenn du zu viele Daten erfasst. Die Abfragen werden dann auch etwas komplexer. Stichwort: JOIN.
Grüße, Antrepolit

care only if your os is really burning

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: n x m Kombination

Beitrag von Scotty »

Verstehe. Im Moment werden die Spiele als Dateien gespeichert (pro Jahr sind es rund 20000 Spiele) und nach einer Weile gelöscht. Diese Sachen könnte ich natürlich in eine extra Tabelle schreiben, was gar keine schlechte Idee ist.
Meine ursprüngliche Überlegung war, in der Spielertabelle eine Zelle o.ä. mit den Kombinationen einzufügen. Da stünde dann ID=1, Name, ..., (2=1,5,2,42=0,1,0) jeweils mit win/loss/draw.

Antworten