Announcement

Collapse
No announcement yet.

Hierachische Daten in mySQL DB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hierachische Daten in mySQL DB

    Hallo, ich bin ziemlicher Anfänger, was Datenbanken betrifft und möchte gerne technische Messwerte aus XML-Dokumenten in einer mySQL Datenbank Speichern. Jetzt suche ich erstmal einen einfachen Weg, die hierachischen XML-Daten in einer relationelen DB zu speichern.

    Die Hierachie der XML-Dateien ist sehr einfach:

    Anlage
    |
    |-Sensor
    |
    |-Messwert

    Jeder Knoten hat nur einen Unterknoten.
    Ich dachte mir, ich erstell eine Tabelle Anlagen, jedem Eintrag dieser Tabelle ist eine Tabelle Sensoren zugeordnet, jedem Sensor ist eine tabelle Messwerte zugeordnet. Genau da liegt das Problem. Ich kann zwar über Fremdschlüssel z.B. Jedem Sensor seine Anlage zuordnen, aber nicht jeder Zeile der Tabelle Anlagen eine Messwerttabelle. Oder?
    Das ist meine Frage, gibt es eine Möglichkeit eine Zeile mit einer Tabelle zu verknüpfen? Oder bin ich total auf dem Holzweg?

    Ich hoffe ich habe mich so ausgedrückt, dass jeder mein Problem versteht.

    Besten Dank im Voraus.

  • #2
    Hi,

    die Idee mit der Fremdschlüsseln ist schon mal an sich nicht schlecht. Ich steige jedoch gerade noch nicht genau durch deine Struktur durch:

    Hat jede Anlage mehrere Sensoren und diese haben wiederum mehrere Messwerte? Also in Xml so etwas wie:

    [highlight=xml]
    <anlage>
    <sensor>
    <messwert>
    </messwert>
    <messwert>
    </messwert>
    </sensor>
    <sensor>
    <messwert>
    </messwert>
    <messwert>
    </messwert>
    </sensor>
    </anlage>
    <anlage>
    <sensor>
    <messwert>
    </messwert>
    <messwert>
    </messwert>
    </sensor>
    <sensor>
    <messwert>
    </messwert>
    <messwert>
    </messwert>
    </sensor>
    </anlage>
    [/highlight]
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Geanau das ist die Struktur der XML-Dateien. Allerdings kommt in jeder Datei Anlage nur einmal vor. Aber das tut ja nichts zur Sache.

      Comment


      • #4
        Hi,

        dann müssen deine Tabellen etwa so aussehen:

        Code:
        anlage
          id   |  ...
        -------|-------
           1   |  ...
           2   |  ...
        
        sensor
          id   |  anlage_id  | ...
        -------|-------------|------
           1   |      1      | ...
           2   |      1      | ...
           3   |      1      | ...
           4   |      2      | ...
        
        messwert
          id   |  sensor_id  | ...
        -------|-------------|------
           1   |      1      | ...
           2   |      2      | ...
           3   |      3      | ...
           4   |      3      | ...
        Dargestellt wird damit Folgendes:

        [highlight=xml]

        <anlage>
        <sensor>
        <messwert>
        </messwert>
        </sensor>
        <sensor>
        <messwert>
        </messwert>
        </sensor>
        <sensor>
        <messwert>
        </messwert>
        <messwert>
        </messwert>
        </sensor>
        </anlage>

        <anlage>
        <sensor>
        </sensor>
        </anlage>
        [/highlight]

        Ich hoffe, dass ich in meinem Beispiel kein Fehler habe, aber ich denke, dass die Struktur so klar werden dürfte.
        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

        Viele Grüße Novi

        Comment


        • #5
          Hallo,

          danke für die bisherige Mühe.
          Über so eine Lösung, mit nur einer Tabelle für alle Messwerte habe ich auch schon nachgedacht. Allerdings würde die Messwerttabelle ziemlich schnell anwachsen. Ich kann mir vorstellen, dass Anfragen wie:

          Code:
          SELECT * FROM messwert WHERE sensor_id = xxx;
          irgendwann ziemlich zeitaufwändig werden, darum würde ich die Messwerte gerne in mehrere Tabellen aufteilen. Wäre das Sinnvoll?

          Comment


          • #6
            Originally posted by sasC#a83 View Post
            Allerdings würde die Messwerttabelle ziemlich schnell anwachsen.
            Auf 100, 1.000 oder 1 Millionen Einträge? Mehre hunderttausend Datensätze dürften kein Problem darstellen.

            Originally posted by sasC#a83 View Post
            Ich kann mir vorstellen, dass Anfragen (...) irgendwann ziemlich zeitaufwändig werden, darum würde ich die Messwerte gerne in mehrere Tabellen aufteilen. Wäre das Sinnvoll?
            Du musst die Spalte Id natürlich indizieren lassen. Dadurch ist auch bei großen Datenmengen eine schnelle suche nach einer bestimmten Id möglich.
            "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

            Viele Grüße Novi

            Comment


            • #7
              Hallo,
              Originally posted by sasC#a83 View Post
              ...irgendwann ziemlich zeitaufwändig werden, darum würde ich die Messwerte gerne in mehrere Tabellen aufteilen. Wäre das Sinnvoll?
              Nein, das wäre eher totaler Schwachsinn! Datenbanken wurden dafür entwickelt mit einer großen Menge an Daten umzugehen. Bei vernünftiger Strukturierung und Indizierung stellen auch mehrere Millionen DS kein Problem dar.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Originally posted by sasC#a83 View Post
                Hallo,

                danke für die bisherige Mühe.
                Über so eine Lösung, mit nur einer Tabelle für alle Messwerte habe ich auch schon nachgedacht. Allerdings würde die Messwerttabelle ziemlich schnell anwachsen. Ich kann mir vorstellen, dass Anfragen wie:

                Code:
                SELECT * FROM messwert WHERE sensor_id = xxx;
                irgendwann ziemlich zeitaufwändig werden, darum würde ich die Messwerte gerne in mehrere Tabellen aufteilen. Wäre das Sinnvoll?
                Hallo,

                Und was würde dir die Aufteilung bringen ausser das deine Abfragen komplizierter werden ? Wenn du aus n Datensätzen m Resultate willst, ist die Arbeit, welche die DB machen muss bei der Aufteilung in mehrere Tabellen eher grösser, aber mindestens identisch.

                Du solltest in diesem Falle eher über Partitionierung nachdenken :

                http://dev.mysql.com/doc/refman/5.1/...titioning.html


                gruss


                Gruss

                Comment


                • #9
                  Hallo,

                  ich habe das von Novi vorgeschlagene Konzept umgesetzt und es reicht für meine Zwecke völlig aus. Was aber auf diese Weise nicht möglich wäre ist eine Art Benutzerverwaltung oder? Wenn mann zum Beispiel einem Benutzer nur erlauben möchte gewisse Messwerte zu betrachten, müsste mann dem entsprechenden Benutzer ja Rechte für gewisse Zeilen einräumen. Das ich Rechte für Spalten vergeben kann weiss ich, aber für Zeilen ist es nicht möglich oder?

                  MfG
                  Sascha

                  Comment


                  • #10
                    Hallo,
                    Originally posted by sasC#a83 View Post
                    ...Das ich Rechte für Spalten vergeben kann weiss ich, aber für Zeilen ist es nicht möglich oder?

                    MfG
                    Sascha
                    Wenn man DB-seitige Nutzerrechte bis auf einzelne Zeilen herunterbrechen möchte, kann man dies über Views lösen.
                    Du erstellst eine View, in der über die Where-Klausel die angezeigten Zeilen passend eingeschränckt werden. Dem Nutzer erteilst du jetzt Select-Rechte nur auf diese View und nicht auf die Tabelle.

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment


                    • #11
                      Danke, klingt einleuchtend.

                      MfG
                      Sascha

                      Comment

                      Working...
                      X