registered Geschrieben 17. April 2010 Teilen Geschrieben 17. April 2010 Hallöchen, ich bin ein Newbie in Sachen Datenbankenabfragen und habe deshalb mal eine Verständnisfrage zu Indizes. Wenn zwei Tabellen 1:n beispielsweise miteinander verknüpft sind und die Abfrage ewig dauert, wie setze ich dann Indizes bzw. wenn ich das richtig weiß, lege ich eine neue Tabelle an. Aber wie, und wenn, dann muss ich doch auch meine Abfrage ändern, oder? Da weiß ich nicht mehr weiter. Bsp. Tabelle 1 enthält Automarken. Tabelle zwei die Typen mit x-Angaben, also bspw. 20 Spalten. Es würde dann Sinn machen Indizes auf die Marken und die Typen zu setzen.(?) Wie mach ich das bzw wie kriege ich das dann hin, dass der Rest der Spalten auch ausgegeben wird, wenn ich ja nur die Modelle und Typen drin habe. Muss ich da eine weitere JOIN Abfrage hinzufügen? Ich hoffe ich hab mich nicht zu umständlich ausgedrückt und es versteht jemand, was ich meine. Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 17. April 2010 Teilen Geschrieben 17. April 2010 eine weitere tabelle ist bei einer 1:n beziehung unnötig, da die veerknüpfungsinformation in der tabelle der n-anteile gespeichert werden kann. um bei deinem beispiel zu bleiben, die automarke ist eine eigenschaft des autos. also: modell, automarke, motor, leistung, allrad, ... im zuge der normalisierung werden zwei tabellen daraus, die bezeichnung der automarke kommt zusammen mit anderen informationen zur marke in eine extra tabelle. in der auto-tabelle verbleibt nur ein verweis auf die automarke-tabelle. in der automarke-tabelle sollte ein primärschlüssel existieren, den nimmt man dann auch zur referenzierung in der auto-tabelle. heißt in der automarke-tabelle existiert ein index und du musst in der auto-tabelle nur einen index über die spalte erzeugen die die automarke referenziert. um informationen aus zwei tabellen zu erhalten brauchst du JOIN, welches genau hängt immer vom gewünschten ergebnis ab. als bedingung für das JOIN legst du feset das automarke.id gleich auto.automarke sein soll. damit alle spalten beim select geliefert werden musst du sie einfach in der spaltenauswahl beim select angeben, oder ein *. um spalten aus einer anderen tabelle zu bekommen, muss diese natürlich per JOIN verknüpft werden. hoffe ich hab dich richtig verstanden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
registered Geschrieben 18. April 2010 Autor Teilen Geschrieben 18. April 2010 Vielen Dank für die Antwort. Ich hab mich vllt. doch nicht so unverständlich ausgedrückt wie ich dachte. verweis auf die automarke-tabelle Fremdschlüssel... richtig? index über die spalte erzeugen die die automarke referenziert. hier beginne ich langsam auszusteigen. Ich muss die Frage etwas ändern: Wenn ich beispielsweise eine Autotabelle habe und in der anderen nicht die Modelle sondern z.B. wie du sagst Motoren u.a. das auf mehrere Autos bezogen werden kann, und ich bspw. über ein BLOB Feld mehrere UIDs von Automodellen für einen Motor habe, dann muss ich doch die Tabelle x-mal durchlaufen, um alle Ergebnisse zu bekommen. Bsp.: Automarkentabelle hat 300 Modelle, Zubehörtabelle 2 Mio Teile. Jetzt müsste doch die Zubehörtabelle 2Mio mal 300 abgefragt werden, rauszufinden, welche Modelle beispielsweise Motor x benutzen. ++++++++++++ + uid + Modell + ++++++++++++ + 1 + Auto1 + +-------------+ + 2 + Auto2 + +-------------+ + 3 + Auto3 + ++++++++++++ +++++++++++++++++++++++++++++++++++++++++ + uid + Fremdkey + Motortyp + Reifentyp + ....... + +++++++++++++++++++++++++++++++++++++++++ + 1 + Auto1, Auto2 + V8 + 225x50 + ....... + +--------------------------------------------------+ + 2 + Auto 3 + V6 + blabla + ....... + +++++++++++++++++++++++++++++++++++++++++ Würde ich nur den Begriff Auto suchen, würde ich 2 Mio Ergebnisse bekommen. Würde ich Auto1 suchen, würde ich je nachdem einebestimmte Anzalh bekommen, die die 2Mios abgegrast hat. Würde ich aber wissen wollen welches Fahrzeug Motor x benutzt (also nach Motor suche) möglicherweise nur 3 Ergebnisse. Allerdings würde die Tabelle trotzdem alle 300 Autos durchgehen, ob diese diesen Motor benutzen. Oder habe ich da einen Denkfehler drin. Das würde mein Verständnisproblem vllt. erklären. Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 18. April 2010 Teilen Geschrieben 18. April 2010 [...] wie du sagst Motoren u.a. das auf mehrere Autos bezogen werden kann, und ich bspw. über ein BLOB Feld mehrere UIDs von Automodellen für einen Motor habe, dann muss ich doch die Tabelle x-mal durchlaufen, um alle Ergebnisse zu bekommen. Wenn Du (Fremd-)Schlüssel innerhalb von BLOB (binary large object) oder CLOB (charater large object) Feldern speicherst, dann ist definitiv bei der Normalisierung etwas schief gelaufen. So dass ich sagen würde befördere die Tabelle bzw Datenbank nach /dev/null und mache eine anständige Normalisierung. Tabellen und gerade die Beziehung zwischen diesen, müssen per Definition immer minimal modelliert werden. Würde ich nur den Begriff Auto suchen, würde ich 2 Mio Ergebnisse bekommen. Bei korrekter Referenzierung und Struktur der Datenbank sind 2 Mio Datensätze bei einer Abfrage kein größeres Problem. Genau dafür sind Datenbanken entworfen worden. Der ausschlaggebende Punkt liegt immer bei dem Entwickler, der sich beim Design die Gedanken über korrekte Beziehungen machen muss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.