Ankündigung

Einklappen
Keine Ankündigung bisher.

Alle Relationen von Tabellen in einer Datenbank abfragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alle Relationen von Tabellen in einer Datenbank abfragen

    Hallo mySQL-Experten,

    ich möchte eine bestehende Datenbank in einem Datenmodell abbilden.
    Um die Relationen der Datenbanktabellen entsprechend abzubilden müsste ich diese irgendwie herausfinden....

    Und genau da liegt mein Problem. Wie setze ich hier am besten an? Gibts dazu irgend ne Abfrage oder nen ähnlichen "Automatismus" der mir die Relationen meiner Tabellen in der Datenbank zurückliefert?

    Danke für die Hilfe!


    Tom


  • #2
    Hallo dreifragezeichen,

    das kommt jetzt ganz drauf an ob du InnoDB oder MyIsam verwendest. Bei MyIsam kannst du die Beziehungen/Fremdschlüssel nicht angeben - und damit auch schwer wieder abfragen

    Bei InnoDB sollte das schon gehen - wie weiß ich aus dem Stehgreif jetzt allerdings auch nicht. Was sagt ein DESCRIEB TABLE? Schonmal in den information_schema-Tabellen nachgeschlagen (table_constraints dürfte dein Kandidat sein).


    Wenn es MyIsam ist musst du eben hoffen, dass da irgendwelche Konventionen eingehalten werden wie Fremdschlüssel-Felder benannt sind...
    Create your own quiz show.

    Kommentar


    • #3
      Um ehrlich zu sein, geht mein mySQL-Erfahrung bislang nicht über einfache Abfragen hinaus. Deswegen kann ich Dir auch nicht so ganz folgen... Könntest Du das ganze noch etwas präzisieren?

      Die mySQL-Datenbank ist Kern einer Typo3-Installation, so weit ich bislang bei der einfachen Durchsicht der Datenbanktabellen sehe existiert eine Verknüpfungstabelle (Anzahl der Einträge ist hier überdurchschinttlich hoch...), allerdings kann ich nicht ausschließen, dass auch noch andere Verknüpfungen existieren, bspw. über Primär- und Fremdschlüssel - zumindest prinzipiell wär das möglich....

      Da ich nicht jede Tabelle einzeln durchsuchen möchte, hoffe ich eben, dass eine Abfrage oder ähnliches existiert, mit der ich mein Ziel erreichen kann.

      Falls meine Ausführungen noch nicht ganz schlüssig sein sollten, gerne nochmal nachhaken!

      Grüße

      Tom

      Kommentar


      • #4
        Vielleicht googelst du mal nach dem was du nicht verstehst? agrajag hat dir doch schon einige Stichworte genannt...

        Kommentar


        • #5
          Naja, die Begriffe nachzuschlagen ist ja nun nicht das Problem. Hab auch ein paar Bücher hier.

          Allerdings hab ich mein Problem ja eben noch etwas spezifiziert. Ich vermute eher, das es da hakt. Ich find zumindest in den Büchern und auch bei Google keinen Ansatzpunkt. In Typo3-Foren übrigens auch nicht. Deswegen setz ich jetzt doch ne Ebene tiefer an, bei der mySQL-Datenbank.

          Hat jemand hilfreiche Tipps?

          Kommentar


          • #6
            Geht es dir denn darum das ganze für dich abzubilden oder willst du das dynamisch in eine Anwendung reinbekommen?

            Kommentar


            • #7
              Das Ziel ist, ein Datenbankmodell zu erstellen. Verwenden möchte ich dazu das Tool DBDesigner oder Ähnliches. Allerdings gibt es in diesem Tool bei Import einer bestehenden DB nur zwei Auswahlmöglichkeiten für abzubildende Relationen und ich vermute, dass damit nicht alle Beziehungen ordnungsgemäß erfasst werden bzw. diese auch teilweise gar nicht erfasst werden.

              Daher möchte ich die Relationen vorher selbst ermitteln durch eine Abfrage oder Ähnliches, wenn vorhanden auch mit einem Tool mit dem ich wirklich alle Relationen erfassen kann.

              Kommentar


              • #8
                Ja genau dieses Tool hätte ich dir dann nämlich auch empfohlen. Das Problem bei dir wird sein das die Beziehungen Datenbanktechnisch einfach nicht verknüpft sind, sondern nur der Nutzer der Datenbank (als der Programmierer) weiss wie die Tabellen zueinander stehen

                Kommentar


                • #9
                  Du hast mich richtig verstanden. Nur die Entwickler (..meine Vorgänger) sind nicht mehr greifbar. Da liegt die Problematik und mehrere hundert Tabellen "händisch" auf Relationen zu prüfen, indem man in die Tabellen reinschaut ist müßig.

                  Welche Möglichkeiten gibts da sonst?

                  Kommentar


                  • #10
                    Naja ich weiss ja nicht wie deine Vorgänger gearbeitet haben. Vielleicht lässt sich was anhand der Spaltennamen herausfinden?

                    Kommentar


                    • #11
                      Zitat von dreifragezeichen Beitrag anzeigen
                      Du hast mich richtig verstanden. Nur die Entwickler (..meine Vorgänger) sind nicht mehr greifbar. Da liegt die Problematik und mehrere hundert Tabellen "händisch" auf Relationen zu prüfen, indem man in die Tabellen reinschaut ist müßig.

                      Welche Möglichkeiten gibts da sonst?
                      Wie gesagt: Bei InnoDB solltest du das in der information_schema.table_constraints sehen können....wenn in der Spalte constraint_type irgendwo "FOREIGN_KEY" steht hast du 'ne Relation... In den anderen Tabellen von information_schema kannst du dann bestimmt noch genauere Infos nachschlagen....

                      Wenn es MyIsam ist, musst du wie cycap schon gesagt hat, darauf hoffen, dass deine Vorgänger irgendwelche Konventionen für die Benenneung von Feldnamen eingehalten haben.... bspw. ist es weit verbreitet "user_id" als Feldnamen zu verwenden wenn auf die Tabelle "User" und dort das Feld "id" verwiesen wird, ein Indiz kann es auch sein wenn ein Index über der Spalte liegt...
                      Jetzt musst du dir eben alle Feldnamen aus der DB auslesen lassen und schauen ob es "*_id"-Felder gibt. 'ne Garantie, dass du so alle erwischst hast du natürlich nicht.

                      Ich würde an deiner Stelle jetzt erstmal kucken ob es MyISAm- oder InnoDB-Tabellen sind. (steht z.B. bei phpMyAdmin immer mit dabei...)
                      Create your own quiz show.

                      Kommentar

                      Lädt...
                      X