Hallo,
arbeite momentan bei einem größeren Projekt mit einer relativ umfangreichen Datenbank mit und habe eine allgemeine Frage zur Optimierung von SQL-Statements bei one-to-many-Beziehungen.
Es gibt sehr viele Situationen, in denen 2 oder mehr Tabellen gejoint werden müssen und eine Ausgabe der folgenden Form erzeugt werden soll:
Tabellen in diesem Beispiel: Kunden (beordern) Bestellungen (beinhalten) Produkte
Man joint hier in der Regel (?) alle drei Tabellen, sortiert das Ergebnis nach Kundennummer, dann nach Bestellungs-ID und schließlich nach Produkt-ID und durchläuft dieses Ergebnis dann unter Verwendung von Hilfsvariablen mit denen überprüft werden kann ob ich mich in der Iteration noch bei der aktuellen Bestellung bzw. beim aktuellen Kunden befinde oder ich die nächste Überschrift ausgeben muss (wenn es dafür eine bessere Praktik gibt, wäre ich für Hinweise übrigens sehr dankbar).
In diesem stark vereinfachten Beispiel mag das kein Problem darstellen. Da bei meinem Projekt jedoch die Tabellen sowohl horizontal als auch vertikal sehr umfangreich sind, habe ich die (evtl. unbegründete) Sorge, dass durch die Joins eine riesige Datenmenge entsteht, insbesondere weil die Daten der "linken" Tabellen ja so oft im Ergebnis kopiert auftauchen wie es entsprechende Einträge in den rechts davon gejointen Tabellen gibt, obwohl man die Daten ja eigentlich nur ein einziges Mal zurückgeben müsste, nämlich dann wenn sich der Wert in der linken Tabelle ändert.
Meine Frage ist nun: Ist es unnötig, in diese Richtung zu optimieren, obwohl teilweise 5 Tabellen auf diese Art gejoint werden müssen und eine Zeile sehr große Datenmengen enthält? Optimal wäre so etwas wie ein Array als Spalte in einem SQL-Resultat zurückzugeben, was aber meines Wissens nur sehr unschön mit GROUP_CONCAT möglich wäre.
Danke für alle Antworten und viele Grüße
arbeite momentan bei einem größeren Projekt mit einer relativ umfangreichen Datenbank mit und habe eine allgemeine Frage zur Optimierung von SQL-Statements bei one-to-many-Beziehungen.
Es gibt sehr viele Situationen, in denen 2 oder mehr Tabellen gejoint werden müssen und eine Ausgabe der folgenden Form erzeugt werden soll:
Tabellen in diesem Beispiel: Kunden (beordern) Bestellungen (beinhalten) Produkte
Code:
Kunde 1: Bestellung 1: Produkt 1, Produkt 2, Produkt 3… Bestellung 2: Produkt 4, Produkt 5, Produkt 6… Kunde 2: Bestellung 3: Produkt 3, Produkt 4, Produkt 5…
In diesem stark vereinfachten Beispiel mag das kein Problem darstellen. Da bei meinem Projekt jedoch die Tabellen sowohl horizontal als auch vertikal sehr umfangreich sind, habe ich die (evtl. unbegründete) Sorge, dass durch die Joins eine riesige Datenmenge entsteht, insbesondere weil die Daten der "linken" Tabellen ja so oft im Ergebnis kopiert auftauchen wie es entsprechende Einträge in den rechts davon gejointen Tabellen gibt, obwohl man die Daten ja eigentlich nur ein einziges Mal zurückgeben müsste, nämlich dann wenn sich der Wert in der linken Tabelle ändert.
Meine Frage ist nun: Ist es unnötig, in diese Richtung zu optimieren, obwohl teilweise 5 Tabellen auf diese Art gejoint werden müssen und eine Zeile sehr große Datenmengen enthält? Optimal wäre so etwas wie ein Array als Spalte in einem SQL-Resultat zurückzugeben, was aber meines Wissens nur sehr unschön mit GROUP_CONCAT möglich wäre.
Danke für alle Antworten und viele Grüße
Kommentar