Kerstin: rekursive Daten in relationaler DB abbilden

Hallo,

ich möchte gern ein Inhaltsverzeichnis eines Buches o.ä. in einer relationalen DB ablegen. Dabei ist es natürlich wichtig die Reihenfolge der einzelnen Kapitel einhalten zu können. Desweiteren soll es möglich sein nach jedem Kapitel oder unterhalb ein weiteres Kapitel nach Wunsch einfügen oder löschen zu können.

Man könnte ein Ordnung der Kapitel als weitere Datenbankspalte einführen. Diese würde jedoch zerbrochen, wenn ein weiteres Kapitel eingefügt oder eines gelöscht würde.

Meine Testtabelle sieht im Moment so aus:

id manualId parentId pre title
--------------------------------------
1  1        0       0     1. Kapitel
2  1        0       1     2. Kapitel
3  1        1       1     1.1 Kapitel
4  1        1       3     1.2 Kapitel
5  1        3       3     1.1.1 Kapitel
6  1        2       2     2.1 Kapitel

Ich habe jeweils eine Id für das Eltern- sowie Vorgänger-Kapitel angelegt. Nur bin ich mir nicht gerade sicher was denn nun als Vorgängerkapitel zählt. Das 2. Kapitel hat eigentlich doch das 1. Kapitel als Vorgänger (auf der selben Ebene). Allerdings hat das 1. Kapitel weitere Unterkapitel. So dass es möglich wäre, dass auch das Kapitel 1.2 Vorgänger vom 2. Kapitel wäre, oder?! Ich bin verwirrt.

Habt ihr eine Idee, wie man das sinnvoll abbilden könnte?

Gruß,
Kerstin

--
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
  1. Moin!

    id manualId parentId pre title

    1  1        0       0     1. Kapitel
    2  1        0       1     2. Kapitel
    3  1        1       1     1.1 Kapitel
    4  1        1       3     1.2 Kapitel
    5  1        3       3     1.1.1 Kapitel
    6  1        2       2     2.1 Kapitel

    Habt ihr eine Idee, wie man das sinnvoll abbilden könnte?

    Deine Kapitel werden allein durch ihren Titel schon eindeutig sortiert.

    Und mal im Ernst: Wieviele Kapitelebenen wirst du haben? In HTML sind 6 erlaubt (h1 - h6), und das ist mehr als genug. In LaTeX sind es sogar 7 Ebenen (allerdings bezogen auf mehrbändigen Buchsatz).

    Also wird es vermutlich ausreichen, wenn du deine Datenbank mit drei bis sechs Spalten für jede Kapitelebene versiehst, und zusätzlich dann noch den Texttitel - und schon bist du perfekt ausgerüstet.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo Sven,

      danke für deine Antwort.

      Moin!

      id manualId parentId pre title

      1  1        0       0     1. Kapitel
      2  1        0       1     2. Kapitel
      3  1        1       1     1.1 Kapitel
      4  1        1       3     1.2 Kapitel
      5  1        3       3     1.1.1 Kapitel
      6  1        2       2     2.1 Kapitel

      Habt ihr eine Idee, wie man das sinnvoll abbilden könnte?

      Deine Kapitel werden allein durch ihren Titel schon eindeutig sortiert.

      In dem Beispiel schon. Es soll nur der Orientierung dienen. Im Normalfall ist dort wirklich nur der Titel ohne Nummerierung drin. An welche Stelle welches Kapitel dann steht, sollen die anderen Tabellenspalten ja dann vermerken.

      Und mal im Ernst: Wieviele Kapitelebenen wirst du haben? In HTML sind 6 erlaubt (h1 - h6), und das ist mehr als genug. In LaTeX sind es sogar 7 Ebenen (allerdings bezogen auf mehrbändigen Buchsatz).

      Das weiß ich leider nicht. Theoretisch könnten es mehr als 6 oder sogar 7 sein. Wenn der spätere Anwender dann davor sitzt und die Struktur bzw. Kapitelebenen zusammenklickt, können es halt mehr werden. Das ist ja nicht voraus zu sehen ... leider.

      Also wird es vermutlich ausreichen, wenn du deine Datenbank mit drei bis sechs Spalten für jede Kapitelebene versiehst, und zusätzlich dann noch den Texttitel - und schon bist du perfekt ausgerüstet.

      Hm ... ich glaube nicht. Ich würde das lieber ganz ohne Beschränkung aufbauen. Wenn man die Ordnung nicht erhalten müsste, wäre das ja einfacher.

      Da fällt mir ein: Wie macht das eigentlich Typo3? Da kann man sich doch sein Menü zusammenklicken und an jede Stelle einen weiteren Unterpunkt hinzufügen. So oder so ähnlich solls bei mir mit den Kapiteln funktionieren. Ist bei Typo3 so eine Beschränkung drin? Müsste man mal ausprobieren ...

      Gruß,
      Kerstin

      --
      "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
      1. Moin!

        Und mal im Ernst: Wieviele Kapitelebenen wirst du haben? In HTML sind 6 erlaubt (h1 - h6), und das ist mehr als genug. In LaTeX sind es sogar 7 Ebenen (allerdings bezogen auf mehrbändigen Buchsatz).

        Das weiß ich leider nicht. Theoretisch könnten es mehr als 6 oder sogar 7 sein. Wenn der spätere Anwender dann davor sitzt und die Struktur bzw. Kapitelebenen zusammenklickt, können es halt mehr werden. Das ist ja nicht voraus zu sehen ... leider.

        Was jetzt? Struktur oder Kapitelebenen? Das ist schon ein Unterschied! Denn ich kann mir nicht vorstellen, dass ein Text, den man in Kapitel einteilt, gewöhnlich mehr als vier Abstufungen benötigt.

        Bei einer Sitenavigation hingegen könnte das schon eher mal vorkommen.

        Also wird es vermutlich ausreichen, wenn du deine Datenbank mit drei bis sechs Spalten für jede Kapitelebene versiehst, und zusätzlich dann noch den Texttitel - und schon bist du perfekt ausgerüstet.

        Hm ... ich glaube nicht. Ich würde das lieber ganz ohne Beschränkung aufbauen. Wenn man die Ordnung nicht erhalten müsste, wäre das ja einfacher.

        Dann nutze exakt zwei Spalten: "Position" und "Ebene". Die Position gibt dir, numerisch sortiert, die Position in der Abfolge der Kapitel, unabhängig von ihrer Einrückung in den Ebenen, und die Ebene gibt dir numerisch die "Tiefe".

        Damit vereinfachst du recht elegant das Auslesen und Darstellen der Kapitel zur Navigation - das ist ja das häufigste, was auf einer Website stattfindet.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Hallo,

          Was jetzt? Struktur oder Kapitelebenen? Das ist schon ein Unterschied! Denn ich kann mir nicht vorstellen, dass ein Text, den man in Kapitel einteilt, gewöhnlich mehr als vier Abstufungen benötigt.

          Sorry, ich meine schon die Kapitelebenen. Für mich ist das Struktur im Sinne von Einteilung des Textes in Kapitel als den Text einfach hintereinander weg zu schreiben ohne jegliche Einteilung.

          Bei einer Sitenavigation hingegen könnte das schon eher mal vorkommen.

          Sicher, in dem Fall soll es jedoch ein Dokument sein, dass u.u. auch mehr als 4 Unterkapitel besitzt.

          Dann nutze exakt zwei Spalten: "Position" und "Ebene". Die Position gibt dir, numerisch sortiert, die Position in der Abfolge der Kapitel, unabhängig von ihrer Einrückung in den Ebenen, und die Ebene gibt dir numerisch die "Tiefe".

          Damit vereinfachst du recht elegant das Auslesen und Darstellen der Kapitel zur Navigation - das ist ja das häufigste, was auf einer Website stattfindet.

          Klingt gut. Danke. Ich werd damit mal rumprobieren. Ist vielleicht sogar am Einfachsten.

          Gruß,
          Kerstin

          --
          "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
          1. Moin!

            Sorry, ich meine schon die Kapitelebenen. Für mich ist das Struktur im Sinne von Einteilung des Textes in Kapitel als den Text einfach hintereinander weg zu schreiben ohne jegliche Einteilung.

            Gut. Dann frage ich mich, ob du schon jemals einen Text gesehen hast, der mehr als 6 oder 7 Abstufungen enthalten hatte - im Sinne von Kapitel, Unterkapitel, Abschnitt, ...

            Sicher, in dem Fall soll es jedoch ein Dokument sein, dass u.u. auch mehr als 4 Unterkapitel besitzt.

            HTML ist eine universelle Auszeichnungssprache für primär wissenschaftliche Texte. Und genau diese wissenschaftlichen Texte sind es, die am allermeisten mit Kapiteleinteilungen arbeiten. Und wenn schon für diese wissenschaftliche "Unterpunktsammlungswut" sechs Ebenen ausreichen, dann sollte es für deine Anforderung aus ausreichen.

            Oder das Beispiel aus LaTeX. Die sieben Ebenen dort sind:
            part
            chapter
            section
            subsection
            subsubsection
            paragraph
            subparagraph

            Fallen dir spontan noch mehr Ebenen ein, die man in einem Text _sinnvoll_ unterbringen kann?

            Oder meinst du nicht auch, dass eine Gliederung des Textes in
            1. Kapitel
            1.1 Abschnitt
            1.1.1 Unterabschnitt
            1.1.1.1 Unterunterabschnitt
            1.1.1.1.1 Absatz
            1.1.1.1.1.1 Unterabsatz
            eigentlich für jeden existierenden Text ausreichend sein sollte? Wer es noch detaillierter haben möchte, wird gezwungen sein, sich eben zu beschränken - zumal es mit Sicherheit keine wirklich sinnvolle Gliederung mehr wäre.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. Hallo Sven,

              über den Unsinn mehr als 4 oder 5 Unterkapitel anzulegen, brauchen wir uns nicht zu streiten. Generell bin ich deiner Meinung.
              Ob die Dokumente, um die es hier geht, nun mehr oder weniger als deine obere Beschränkung an Kapitelebenen hat, kann ich nicht sagen. Ich möchte jedoch nicht gleich am Anfang den Fehler machen und solch eine Beschränkung einbauen, wenn dann doch mal eine noch tiefere Nummerierung gebraucht wird.

              Sei bitte nicht beleidigt, dass ich deinen Lösungsvorschlag nicht umsetze.

              Gruß,
              Kerstin

              --
              "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
  2. echo $begrüßung;

    Habt ihr eine Idee, wie man das sinnvoll abbilden könnte?

    Eine aufwendigere Variante als sie Sven vorschlug nennt sich Nested Sets. Eine Quelle neben vielen anderen: http://www.klempert.de/nested_sets/

    echo "$verabschiedung $name";

    1. Hallo,

      Habt ihr eine Idee, wie man das sinnvoll abbilden könnte?

      Eine aufwendigere Variante als sie Sven vorschlug nennt sich Nested Sets. Eine Quelle neben vielen anderen: http://www.klempert.de/nested_sets/

      Auf den ersten Blick sieht das interessant aus. Werde mich mal damit beschäftigen. Vielen Dank.

      Gruß,
      Kerstin

      --
      "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra