MySQL 4.1.21 ForeignKeys (Verzeichnisstruktur) anlegen

xxppatronen

Grünschnabel
Sicherlich ganz einfach für jemanden vom Fach.

Ich möchte folgendes realisieren, was ich bereits fast zum Laufen bekommen habe (Fehler fiel mir erst jetzt auf): Ich möchte "Produkte" in "Ordner" und die Ordner wiederrum in "Gruppen" sortieren und einen Verzeichnisbaum zum Navigieren.

Ich arbeite mit InnoDB-Tabellen.

Tabelle GRUPPEN
id(int) auto_increment primary key
gruppe(varchar)
...


Tabelle ORDNER (Fremdschlüssel: group_id => gruppen->id)
id(int) auto_increment primary key
group_id(int)
ordner(varchar)
...


Tabelle PRODUKTE
(Fremdschlüssel: gruppe_id => gruppen->id, ordner_id => ordner->id)
id(int) auto_increment primary key
gruppe_id(int)
ordner_id(int)
produkt(varchar)
...

Meine Überlegung ist es, ob die Tabelle Produkte auch ohne die Spalte gruppe_id auskommt?!

Ich möchte dass jedes Produkt eindeutig einem Order und einer übergeordneten Gruppe zugewiesen ist und beim Ändern der Ordner- oder Gruppen_id sich die Werte in Tabelle Produkte "automatisch" verändern. Gut ausgedrückt ,-)

Bislang tritt der Fehler auf, dass wenn ich die Ordner_id in Tabelle Produkte ändere (quasi verschieben der Produkte in einen anderen Ordner), dass zusätzlich die alten Zuweisung bestehen bleiben und nur bei direkter Abfrage: "SELECT gruppe_id FROM produkte WHERE gruppe_id=2" zum Vorschein kommen. Merkwürdig.

Wer kann mir helfen?
 
Leider hast Du nicht geschrieben, welche Abfrage Du normalerweise verwenden möchtest.
Das entfernen des Fremdschlüssels gruppen.id aus produkte erscheint mir sehr sinnvoll, da sonst bei jedem Verschieben zwei Tabellen verändert werden müssten.
Für ein Verschieben der Produkte wäre somit nur noch das Ändern des Ordners, für das Ändern des Ordners nur die Gruppe zu berücksichtigen.
 
Um die Produkte auszulesen verwende ich:

SELECT SQL_CALC_FOUND_ROWS s.id AS subcat_id,
g.groups AS groups,f.folder AS folder,p.image,s.subcategory,i.interval_decimal AS num,t.zeitbedarf,s.status,s.priority
FROM $db_table AS s
INNER JOIN ORDNERas f
ON s.folder_id=f.id
INNER JOIN GRUPPE as g
ON f.group_id=g.id
WHERE f.id=2 AND g.id=4
 
Zurück