(Die erste Normalform ist Bedingung für die zweite Normalform.)
Ich gehe mal von folgenden Tabellen aus (und ignoriere erstmal, dass es bestimmt auch ein Inhaltsfeld mit Text und weiteres gibt):
Code:
Tabelle1:
ID | Titel
Tabelle2:
ID | Titel
Relation
Tabelle1ID | Tabelle2ID
Folgendes MySQL-Query gibt Dir alle verknüpften Artikel aus Tabelle2 zu dem Artikel aus Tabelle1 mit der ID $tabelle1ID:
Code:
SELECT * FROM Tabelle2 JOIN Relation ON (Relation.Tabelle2ID = Tabelle2.ID) WHERE Relation.Tabelle1ID=$tabelle1ID;
MySQL bietet auch die Möglichkeit, die referentielle Integrität sicherstellen, indem Du Relation.Tabelle2ID mit Tabelle2.ID verknüpfst. Dann würden theoretisch alle passenden Zeilen in Relation automatisch gelöscht, wenn Du einen Eintrag aus Tabelle2 löscht. Entsprechend auch die Verknüpfung zur Tabelle1.
Wie das geht, kann ich Dir nicht genau sagen, da ich der Sache noch nicht so ganz traue.
Aber Du kannst mit 2 Querys die referentielle Integrität selbst sicherstellen, ohne dass Du Dir alle Einträge in Tabelle 1 einzeln anschauen musst und die entsprechende ID dann aus Deinem Array entfernst.
Angenommen, Du willst den Artikel in Tabelle2 mit der ID 3 löschen:
Code:
DELETE FROM Tabelle2 WHERE ID=3;
DELETE FROM Relation WHERE Tabelle2ID=3;
Wenn Du in Tabelle2 einen Eintrag änderst kann eigentlich nie etwas schief gehen, da er seine ID behält.
Wenn Du in Tabelle 2 einen Eintrag löscht, sparst Du Dir mit oben angesprochenem Query eine Menge Arbeit und Serverlast.
Wenn Du einen Eintrag aus Tabelle2 zusätzlich verknüpfen willst sparst Du Dir ebenfalls eine Menge Arbeit. Du musst nicht den Eintrag in Tabelle1 auslesen, die ID als String anfügen und Dein Update durchführen, sondern fügst einfach eine neue Zeile in Relation ein.
Auf den ersten Blick mag das für einen Neuling (entschuldige bitte, wenn ich Dich falsch einschätze) unübersichtlicher aussehen, aber, wenn man etwas mehr mit Datenbanken macht und auch andere Datenbanken gesehen hat, wird man erkennen dass dies die (einzig richtige) Art ist, um m zu n Beziehungen darzustellen.
Die Normalisierung ziehlt vor allem auf die referentielle integrität und die Redundanzfreiheit ab.
Ein anderer Aspekt ist aber auch, dass sich "normale" Datenbanken wesentlich leichter erweitern lassen.
Stell Dir vor, Du möchtest zum Beispiel später die Art der Verknüpfung festlegen. Bei Themen zum Beispiel "Vertiefung des Themas" und "gegensätzliche Meinung".
Dann würdest Du eine Tabelle Verknüpfungsbeschreibung mit ID und Beschreibung erstellen und der Relationtabelle ein weiteres Attribut VerknüpfungsbeschreibungsID anfügen (attributierte m zu n Beziehung).
Du kannst auf diese Art auch wesentlich einfacher viele Dinge bereits in Deinem SQL-Statement abhandeln, ohne jedesmal alles noch in PHP verarbeiten zu müssen.
Ich hoffe, ich konnte Dir weiterhelfen
Gruß hpvw
PS: Erschrick nicht zu sehr vor der Normalisierung, für private Datenbanken genügt es in der Regel, wenn Du die 1., 2. und 3. Normalform erfüllst.