SQL Wie am besten Datenbank strukturieren?

M

Mr. Snoot

Gast
Hio,

ich möchte die Inhalte meiner Seite gerne in eine MySQL-DB auslagern (bisher steht alles in PHP-Dateien, die via include eingebunden werden), weiß aber nicht so richtig, wie ich diese aufbauen soll. Grundsätzlich sieht eine Seite so aus, die Kommentare rechts sind quasi all das, was in der DB gespeichert werden müsste:

HTML:
<html>
  <head>
    <meta name="description" content="Beschreibung des Kapitels">     <!-- metatag -->
  </head>

  <body>

    <h1>Kapitelüberschrift</h1>                                       <!-- Kapitelüberschrift -->

    <ul>
      <li><a href="#1. Absatz">1. Absatz</a></li>                     <!-- 1. Absatz -->
      <li><a href="#2. Absatz">2. Absatz</a></li>                     <!-- 2. Absatz -->
    </ul>

    <a href="/downloads/kapitel-id">Download als PDF</a>              <!-- Kapitel-ID -->

    <h2><a name="1. Absatz">1. Absatz</a></h2>

    Inhalt des ersten Absatzes ...                                    <!-- Inhalt des ersten Absatzes -->


    <h2><a name="2. Absatz">2. Absatz</a></h2>

    Inhalt des zweiten Absatzes ...                                   <!-- Inhalt des zweiten Absatzes -->

  </body>
</html>


Wie mache ich das am besten? Ich hätte erstmal zwei Varianten im Blick:

1) Aufteilung auf zwei Tabellen, einmal die Kapitelmerkmale und einmal die jeweiligen Absätze:
v1.JPG

2) Nur eine Tabelle, dafür einiges doppelt (Metatags, Download-ID):
v2.JPG


Ich denke mal #1 wäre eleganter, aber ich weiß nicht, ob eine Verknüpfung über die Kapitel-ID bspw. auch sinnvoll ist. Wäre das okay, oder sollte man das anders machen? Theoretisch könnte man die erste Tabelle ja nochmal in bereich und kapitel aufteilen:
v11.JPG

Was ich mich dabei grundsätzlich frage: wie lege ich die Reihenfolge der Absätze fest, einfach durch IDs? Was mache ich, wenn bspw. ein neuer Absatz dazukommt, der zwischen zwei existierenden Absätzen stehen soll? Dann müsste man ja alle IDs umsortieren.
 
Zuletzt bearbeitet:
Variante 3 ist ok, allerdings würd ich mich beim Absatz nicht von beiden (Kapitel und Bereich) abhängig machen. Versteh ich irgendwie nicht.

Die Ordnung bzw. Ausgabe deiner Absätze kannst du zum Beispiel durch eine zusätzliche Nummer festlegen.
 
Also wenn du das in der DB nach Bereichen trennen willst, ist Variante 3 natürlich sinnvoll. Es gibt aber keinen Grund, wieso sich ein Absatz seinen Bereich speichern sollte. Da reicht einfach die Speicherung eines Fremdschlüssels auf Kapitel. Ein Kapitel weiß ja, zu welchem Bereich er gehört.

Die Reihenfolge der Absätze musst du natürlich irgendwie festlegen und der Primärschlüssel wäre zumindest geeignet. Wenn man dazwischen noch was einfügen kann, muss man sich da was überlegen. In der Praxis würde ich wahrscheinlich beim Speichern eines veränderten Kapitels alle Absätze des Kapitels in der DB löschen und dann alle Absätze des veränderten Kapitels neu reinschreiben, anstatt zu versuchen das irgendwie dazwischen zu kriegen. Je nach verwendetem DBMS sollte man dabei natürlich ab und zu die Tabelle optimieren.
 
Okay, die Bereichs-ID nochmal bei den Absätzen ist natürlich überflüssig. Aber wenn das so grundsätzlich schon mal ok ist, bin ich ja zufrieden.

Dann werd ich mich mal an die Arbeit machen, merci :)
 
Zurück
Oben