Moin!
Seh ich anders. 2 Tabellen reichen.
Natürlich _kann_ man das mit zwei Tabellen machen. Aber das Tabellendesign sollte sich nicht an einer möglichst menschenfreundlichen Datenspeicherung in möglichst wenigen Tabellen orientieren, sondern primär an den später zu erledigenden Abfragen.
Und da ist es einfach unpraktisch, wenn man die Summe geschossener Tore aus _zwei_ Spalten zusammenzählen muß. Weil das in _einer_ SQL-Abfrage schwierig geht.
Machen wir mal zwei Mannschaften und zwei Spiele:
Spiel-ID, HeimID, GastID, Heim-Tore, Gast-Tore
1 1 2 0 1
2 2 1 1 0
Aufgabe: Formuliere _eine_ Abfrage, welche alle geschossenen Tore der zwei Mannschaften ergibt, die Tordifferenz der Mannschaften, die zu verteilenden Punkte je Spiel (Sieg: 3 Punkte, Unentschieden 1 Punkt) summiert und die Resultate sortiert mit dem Punkthöchsten zuerst, bei Punktegleichstand den mit der besseren Tordifferenz, bei Gleichstand den mit den meisten Toren.
Gewünschtes Resultat:
MannID Pkte Diff Tore
2 6 +2 2
1 0 -2 0
Da finde ich meine Version mit einem SELECT auf eine einzige Tabelle mit GROUP BY doch irgendwie sehr elegant.
Die Punkte-Verteilung ergibt sich aus den Toren, braucht also nicht extra (redundant) gespeichert werden.
Früher gab es für einen Sieg nur zwei Punkte. Wie speicherst du das ab?
Setzt man anfangs die Spalten mit den Toren auf NULL und nach einem Spiel auf andere Werte (also 0 oder mehr), braucht man auch keine weitere Spalte für die Information, ob ein Spiel schon stattgefunden sind.
Wenn das Spiel noch nicht eingetragen ist, ist das eigentlich eine ausreichende Information, oder? Da braucht man kein NULL - außer man gibt vorher den Spielplan ein, dann ist das natürlich was anderes.
- Sven Rautenberg