Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Kreuztabelle oder geht das auch anders?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von habak, 7 Juni 2013.

  1. habak

    habak Benutzer

    Hallo,

    als SQL-Neuling habe ich folgendes Problem.

    Ich habe drei Tabellen.
    In Tabelle 1 (tab1) sind Benutzer hinterlegt (der Name und die Anzahl an Teilnahmen an Events).
    Eine zweite Tabelle (tab2) verwaltet Events (eine fortlaufende Nummer, Eventname und die Teilnehmeranzahl an einem Event).
    In der dritten Tabelle (tab3) wird gespeichert, welcher Benutzer an einem Event teilgenommen hat (über die id's) und ob der Event bei der Berechnung der Teilnahmen berücksichtigt (anzeigen =1) werden soll oder nicht (anzeigen=0, der Event noch in der Zukunft liegt).
    [​IMG]
    Mit den drei Tabellen möchte ich nun eine Abfrage erstellen, die als Ergebnis die Tabelle 4 (tab4 ) "erzeugt".
    Mir ist leider nicht klar, wie ich so etwas anfange.
    Für eine Hilfestellung wäre ich sehr dankbar.

    Vielen Dank.

    Gruß

    Habak
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Diverse Fehler:
    • in Tab1 die Anzahl der Teilnahmen ist aus tab3 berechenbar und damit dort komplett falsch
    • wenn anzeigen vom Datum abhängig ist, an dem das Event ist, dann nutze das Datum, um zu ermitteln, ob es schon war oder erst noch kommt
    • deine Tab4 ist, wenn überhaupt, dann nur mit extremer Mühe machbar. Vergiß die Idee.
     
  3. habak

    habak Benutzer

    Hallo akretschmer,

    Danke für die Erläuterungen zu den scheinbar offensichtlichen Fehler, aber die entsprechenden Felder (Anzahl Teilnahmen und anzeigen) haben im Kontext des gesamten Projekts durchaus ihre Berechtigung. Und ob das datenbankmäßig oder gar performancemäßig nicht optimal ist, erscheint mir als Anfänger zunächst zweitrangig, denn das lässt sich ja später noch anpassen. Zudem führen mehrere Wege nach Rom, denn zukünftige Eventteilnahmen werden in tab3 per Datumsvergleich mit (0) geschrieben und ein tägliches php-Update-Tool prüft nur, ob in tab3 überhaupt "0" vorhanden ist. Natürlich kann ich das auch genau "umdrehen" und die tägliche Abfrage mit der Datumsabfrage durchführen, was aber mehr Trafic erzeugt.
    Aber bitte zurück zur eigentlichen Fragestellung.
    Nichtsdestotrotz kann ich es als Anfänger (nach jeder Menge Lektüre bezüglich: Achtung normalisieren) kaum glauben,
    dass zwei Tabellen, die in einer dritten verknüpft sind, nicht wie beschrieben, abgefragt werden können.
    Oder wie muss ich die Tabellen dann anlegen?

    Danke und Gruß

    Habak
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja, sicher. Ich sehe das täglich in zigfacher Ausführung bei unseren Kunden. Später ist es dann nämlich oft zu spät, das Projekt größer und man kämpft an anderen Fronten. Daß die Ursache in solchen Designfehlern liegt ist dann zwar irgendwie bekannt, aber man kann es nicht mehr ändern.

    Ja. Dein tägliches Update-Tool, schön via Cronjob, gell? Dumm nur, wenn zur geplanten Zeit Dein Server grad mal down ist, weil der Provider mal Updates macht.

    Ich habe Möglichkeiten dafür in den letzten Jahren an einigen Stellen gezeigt, z.B. hier: http://www.pg-forum.de/viewtopic.php?f=66&t=4067. In PostgreSQL gibt es sogar ein extra Contrib-Modul, was sowas relativ elegant kann: http://www.postgresql.org/docs/9.2/interactive/tablefunc.html. Dennoch solltest Du das überdenken. Datenbanken arbeiten mit exakt und fest definierten Tabellen. Dein Ziel ist aber, für jedes Event eine eigene Spalte zu haben. Du kannst es gern versuchen.

    Andreas
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden