Komplexere Abfrage mit SQLAlchemy

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi, ich bin gerade dabei, eine Seite zu entwerfen. Die einzelnen Seiten sollen mit Tags versehen werden. Zur Navigation soll eine Art Tag Cloud verwendet werden. Klickt man auf einen Tag sollen alle nicht mehr relevanten Tags ausgeblendet werden, wie bei einem Filter. Zusätzlich sollen entsprechend gefundene Seiten aufgelistet werden.

Ich habe mir das so vorgestellt: eine Tabelle mit den Seiten, eine 1:N Verknüpfung und eine Tabelle mit den Tags.

Um das gewünschte Ergebnis zu erhalten brauche ich zwei Abfragen. Zunächst muss ich feststellen, welche Seiten zu den angegebenen Tags gehören. Im zweiten Schritt muss ich alle übrig gebliebenen Tags ermitteln, die mit den gefilterten Seiten verknüpft sind. Jetzt ist die Frage, wie man das am besten realisieren kann, so dass es bei vielen Seiten/Tags auch noch performant läuft.

Also so ähnlich wie bei einem Wordpress Blog, nur dass man mehrere Tags kombinieren kann und eine gewisse Hierarchie entsteht. Die URL könnte dann zum Beispiel so aussehen
example.com/tags/tag1+tag2+tag3
Es sollen alle Seiten angezeigt werden, die diese Tags gemeinsam haben und zusätzlich alle Tags, die mit den angezeigten Seiten verknüpft sind.

Wie kann man die Datenbankabfrage am besten gestalten? Views verwenden? Stored Procedures? Oder hat SQLAlchemy ein "Zaubermittel"? Einen Filter auf der Client Seite mit JavaScript möchte ich erstmal weg lassen, auch wenn sich das anbieten würde. Es soll erstmal ohne laufen
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
BlackJack

@burli: Hast Du denn ein Geschwindigkeitsproblem? Oder einfach nur Langeweile und den Wunsch komplizierte SQL-Anfragen zu schreiben die bei vielen Seiten und Tags vielleicht schneller sind -- vielleicht aber auch nicht!?

Ich würde es ja erst einmal "normal" implementieren, also einfach das ORM benutzen. Dann viele Daten rein füttern und *messen* wo es hakt. Oder ob es halt überhaupt zum Problem wird.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Die erste Implementierung wird sicher erstmal "straigt forward". Es kann vielleicht sogar sein, dass ich damit nie Probleme bekomme. Ich will dabei aber auch etwas lernen und eventuell auf mögliche Änderungen vorbereitet sein
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
lunar

@burli: Es geht selten gut aus, wenn man sich um alle Eventualitäten und insbesondere um möglicherweise nie auftretende Probleme zu kümmern versucht, daran ist schon so manches Projekt gescheitert. Insofern kümmert sich am besten nur um tatsächliche oder absehbare Probleme.

Wenn Du nur daran interessiert bist, wie man theoretisch optimiert, dann leihe Dir lieber ein gutes Buch über dieses Thema, denn Datenmengen, die bei einem üblichen DBMS Optimierungen in den Abfragen erfordern, muss man auch erst einmal ansammeln.
Antworten