UNION auf Datenbank-Tabellen
Author: dleinich
Publication Date: 7/7/2011 8:24
Hallo zusammen,
ich habe zwei Tabellen mit ähnlichen Inhalten (z.B. news und pressemitteilungen) sowie eine Tabelle kategorien, in der (man glaubt es kaum) Kategorien zu diesen Inhalten gespeichert werden und die über eine M:N Fremdschlüssel-Beziehung mit den Inhaltstabellen verbunden ist.
Nun sollen die News und Pressemitteilungen gemeinsam nach Datum sortiert in einer Absatzvorlage ausgegeben werden. In SQL mache ich üblicherweise einen UNION auf die Tabellen und arbeite mit dem Ergebnis.
Damit ich die Daten auch in FirstSpirit nutzen kann, habe ich zuerst eine neue Tabelle namens teaser angelegt, die alle gemeinsamen Informationen abbildet und auch hier die Fremdschlüssel-Beziehung zur keywords Tabelle hinzugefügt. Direkt in der Datenbank (MySQL in diesem Fall) wurde die Tabelle dann verworfen und durch einen View ersetzt, der alle Felder enthält und genau den oben angesprochenen UNION als Basis hat. Auch die Verknüpfungstabelle für die Fremdschlüssel-Beziehung wurde in einen View umgewandelt, damit die Verknüpungen beider Inhaltstabellen berücksichtigt werden.
Soweit so gut. Ich kann jetzt also in FirstSpirit auf den View zugreiffen (natürlich nur lesend) und entsprechende Seiten mit den zusammgefassten Informationen generieren. Hurra! Oder?
Das Problem das noch besteht, und damit der Grund dieses Postings, ist, dass mir das ganze Setup um die Ohren fliegt, wenn ich einen Eintrag der keywords freigeben möchte. Das das passiert ist logisch, da FirstSpirit natürlich versucht einige Felder (fs_release_to, etc.) der Beziehungstabelle zu setzen, das klappt aber natürlich nicht, da es sich um einen nicht beschreibbaren View handelt.
Die Frage ist also, ob es entweder eine Möglichkeit gibt FirstSpirit zu sagen, dass er eine Beziehungstabelle einfach nicht anfassen soll oder vielleicht sogar einen anderen, sinnvollen Weg gibt, um die beschriebene Funktionalität abzubilden.
Danke schon mal im Voraus für kreative Vorschläge zur Lösung!
Tags: datenbank
-
Author: dleinich - 7/11/2011 15:55
Hallo Holger,
vielen Dank erstmal für deine Antwort, die mir ausnahmsweise aber mal nicht weitergeholfen hat. :smileywink: Wie dem auch sei, ich konnte mein Problem gerade noch lösen.
Grundsätzlich brauche ich, wie von dir schon richtig festgestellt, keine eigenständige Freigabe auf den Fremschlüssel-Tabellen-Views. Da FirstSpirit aber auch die Verknüpfungstabellen anfassst, wenn etwas freigegeben wird, diese aber zwischen keywords und teaser nur ein View ist, flog bei mir eine Exception.
Vorher hatte ich also eine Struktur wie unten, wobei:
- teasers ein View auf den UNION von news und pressemitteilungen ist
- Die M:N Verknüpfung zwischen teasers und kategorien ein View auf den UNION der Verknüpfungstabellen von news bzw. pressemitteilungen mit kategorien ist
Meine Lösung ist nun, dass ich eine zweite Tabelle angelegt habe, die die Tabelle keywords nachbildet und in der Datenbank durch einen View auf die Tabelle keywords ersetzt wurde. So habe ich jetzt ein komplett unabhängiges System für die teaser und niemand will irgendwem in den View schreiben.
Jetzt sieht es also so aus, wobei:
- teasers ein View auf den UNION von news und pressemitteilungen ist
- kategorienView ein View auf die Tabelle kategorien ist
- Die M:N Verknüpfung zwischen teasers und kategorienView ein View auf den UNION der Verknüpfungstabellen von news bzw. pressemitteilungen mit kategorien ist
Klingt kompliziert, ist vermutlich auch so. Vielleicht habe ich ja wirklich noch einen Denkfehler drin aber so scheint es erstmal wunderbar zu funktionieren.
Das die Geschichte nicht Import/Export sicher ist, ist mir bewusst, aber danke noch mal für den Hinweis. Historische Generierungen sollten hingegen eigentlich schon funktionieren, da die Views ja auf alle verfügbaren Datensätze gehen, das muss ich aber noch mal prüfen. Wäre aber auch kein KO Kriterium.
Beste Grüße,
Daniel
0
Please sign in to leave a comment.
Comments
1 comment