Carsten: Sinnvolle DB-Struktur

Beitrag lesen

» ich möchte die Navigationspunkte einer Navigation mit 3 Ebenen
» dynamisch generieren lassen.

» Hierzu sollen die Punkte in einer MySql DB abgespeichert werden.
» Zudem sollen die Inhalte die zu den Punkten gehören auch in der
» DB gespeichert werden.

Ich würde Dir eine "flat"-Lösung vorschlagen, sprich: zwei simple Tabellen.

Tabelle Navi:
+----------+-------------+-----------+-----------+----------+
| ID       | Key         | URL       | Title     | Words    |
+----------+-------------+-----------+-----------+----------+
| uint(10) | char(xxx)   | char(255) | char(255) | char(255)|
| pri key  | unique      |           | index     | index    |
+----------+-------------+-----------+-----------+----------+
| 1        | 000100000000|/s1/       |"ext.links"| foo,bar  |
+----------+-------------+-----------+-----------+----------+
| 2        | 000100010000|/s1/s1/    |"software" | software |
+----------+-------------+-----------+-----------+----------+
| 3        | 000100010001|/s1/s1/s1/ |"linux"    | os,linux |
+----------+-------------+-----------+-----------+----------+
| 4        | 000200000000|           |"impressum"| impr.    |
+----------+-------------+-----------+-----------+----------+
| 5        | 000300000000|           |"texte"    | texte    |
+----------+-------------+-----------+-----------+----------+
| 6        | 000300010000|           |"gedichte" | lyrik    |
+----------+-------------+-----------+-----------+----------+
| 7        | 000300010001|           |"rilke"    | rilke    |
+----------+-------------+-----------+-----------+----------+
| 8        | 000300020000|           |"lieder"   | lieder   |
+----------+-------------+-----------+-----------+----------+
| 9        | 000300020001|           |"abba"     | abba     |
+----------+-------------+-----------+-----------+----------+

Der "Trick" ist der Key. Zum Einen kannst Du mittels

SELECT * FROM Navi WHERE Key LIKE "/[0-9]{4}0{8}/"

die Hauptüberschriften auslesen, zum anderen mittels

SELECT * FROM Navi WHERE Key LIKE "0003*"

den Baum vom Texte-Bereich. Einfach dabei prüfen, wie viele "0000" am Ende stehen, um die Ebene zu erfahren.

"Words" sind Keywords zur Suche. Die Spalte kannst Du natürlich weglassen.

Die Inhalte-Tabelle ist noch simpler:

Tabelle Content:
+----------+----------+-----------+------------+
| ID       | NaviID   | Title     | Content    |
+----------+----------+-----------+------------+
| uint(10) | uint(10) | char(255) | mtext      |
+----------+----------+-----------+------------+
| 1        | 9        |"Fernando" |"..."       |
+----------+----------+-----------+------------+
| 2        | 9        |"Money"    |"..."       |
+----------+----------+-----------+------------+

Mit

SELECT Content.Title FROM Navi,Content
  WHERE Navi.Key = '000300020001'
    AND Navi.ID = Content.NaviID

kriegst Du dann die Titel Deiner Inhalte in der "Abba"-Ecke. Darauf legst dann halt den Link auf die PHP-Seite, die den Content anzeigt und per Get nur die ID von "Inhalte" braucht.

HTH

Carsten