Web-Shop » modified eCommerce » Queries

Datenbank Prüfungen mit SQL

Peter Kropff hat die Problematik der referentiellen Integrität an Hand eines Beispiels gut erläutert. Leider ist bis heute in den mir bekannten Shops keine Prüfung der referentiellen Integrität auf Datenbankebene implementiert, und die Datenmodelle entsprechen in aller Regel nicht dem Lehrbuch. Deshalb kommt es gelegentlich zu Fehlern, die nicht leicht zu finden sind. In diesem Artikel habe ich einige Queries notiert, die mir im Zusammenhang mit osCommerce, xt:Commerce und dem modified Shop halfen, derartige Fehler aufzuspüren und in manchen Fällen auch zu lösen.

Kategorien

In der Tabelle categories ist über die Felder categories_id und parent_id die Kategoriestruktur abgebildet. Jede Kategorie führt den Bezug zur jeweils übergeordneten Kategorie mit, ist die parent_id = 0, so handelt es sich um die oberste Ebene. Lösche ich nun eine Kategorie, deren categorie_id in einer anderen Kategorie als parent_id vermerkt ist, so breche ich die referentielle Integrität innerhalb einer einzigen Tabelle. Das folgende Query findet verwaiste Kategorien:

select c.categories_id, c.parent_id 
from categories c
where not exists( select categories_id from categories where categories.categories_id = c.parent_id)

Das Ergebnis sollte ausschließlich Kategorien mit parent_id = 0 zeigen, die tatsächlich immer Waisenkinder sind. Wer die nicht sehen will, blendet sie aus:

select c.categories_id, c.parent_id 
from categories c
where parent_id > 0
and not exists( select categories_id from categories where categories.categories_id = c.parent_id)

 

Einen Artikel zu diesem Thema schrieb ich früher schon einmal, irgendwann werde ich sie zusammenführen. Sie finden ihn auf meinem Blog, den ich zumindest in dieser Form wohl nicht weiterführen werde.

Powered by Etomite CMS.