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

eine spalte mit ihrer Inhalt in eine andere tabelle kopieren

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von jetwork, 23 Oktober 2014.

  1. jetwork

    jetwork Fleissiger Benutzer

    Ich habe die folgende 2 Tabellen:

    tbl_presentation
    presentation_id
    presentation_name
    besucher_anzahl
    konferenz_ref
    usw.

    tbl_konferenz
    konferenz_id
    konferenz_name
    usw.

    Eine Konferenz enthält mindestens eine oder mehrere Präsentationen.

    Dieser Entwurf ist aber leider bisschen schlecht. Man zählt in der wirklichkeit nur die Anzahl der Besucher der Konferenzen. Nicht die Anzahl der Besucher jeder Präsentation in einer Konferenz. In diesem Entwurf ist aber leider die Anzahl der Besucher von einer Konferenz für alle Präsentationen dieser Konferenz redundant gespeichert.

    Es sind mehr als 16000 Einträge. Ich kann sie alle per Hand nicht korrigieren.

    Meine idee ist: über den Fremd Schlüssel Beziehung die beide Tabellen miteinander referenzieren und die Spalte besucher_anzahl von der tbl_presentation in die tbl_konferenz kopieren.

    Könnt ihr mir bitte bitte helfen? Wie kann ich so ein sql abfrage schreiben oder in MS Access oder in MySQL dieses Problem lösen.

    Danke im Voraus
     
  2. ukulele

    ukulele Datenbank-Guru

    Also erstmal ist mir nicht ganz klar, was du an Daten hast und was du ermitteln möchtest. Die presentation Tabelle hat ein Atribut besucher_anzahl, die konferenz Tabelle nicht. Die Anzahl der Teilnehmer einer Konferenz ist aber nicht zwingend die Summe der Teilnehmer aller Presentationen. Diese Summe könnte man zwar dennoch ermitteln, diese dann aber redundant wieder irgendwo zu speichern entbehrt jeglichem Grundsatz der relationalen Datenhaltung.
     
  3. jetwork

    jetwork Fleissiger Benutzer

    Sorry für die schlechte Erklärung.

    z. B. Es gibt eine Konferenz namens „KonferenzA“. Es hat 100 Besucher.
    KonferenzA hat 3 Präsentationen Präsentation_a, Präsentation_b, Präsentation_c.

    Das ist bis jetzt so in der Datenbank: Präsentation_a 100 Besucher, Präsentation_b 100 Besucher, Präsentation_c 100 Besucher.
    Das ist eigentlich falsch. 100 ist die Anzahl der Besucher der Konferenz A. Die Anzahl der Präsentationen wissen wir nicht. Es ist leider alles falsch entworfen. Ich muss diesen Fehler korrigieren.

    Meine Idee ist: über den Fremd Schlüssel Beziehung die beide Tabellen miteinander referenzieren und die Spalte besucher_anzahl von der tbl_presentation in die tbl_konferenz kopieren danach diese Spalte von tbl_presentation löschen.

    Wie kann ich das machen? Wie kann ich so ein sql abfrage schreiben oder in MS Access oder in MySQL dieses Problem lösen.
     
  4. Hony%

    Hony% Datenbank-Guru

    Mach das. Die Fremdschlüsselbeziehung gibt es doch schon?

    Code:
    SELECT K.*, P.besucher_anzahl
    FROM tbl_presentation AS P
    INNER JOIN tbl_konferenz AS K
        ON P.konferenz_ref = K.konferenz_id
    
    Nach außen sollte die Tabelle tbl_presentation dann immer noch identisch aussehen. Du kannst dazu auch gerne eine VIEW benutzen um so Anwendungen den Eindruck zu vermitteln, es wäre alles

    Gruß
    Hony
     
    jetwork gefällt das.
  5. ukulele

    ukulele Datenbank-Guru

    Wichtig wäre zu wissen, ob die Daten auch alle korrekt sind. Wenn in deinem Beispiel bei Präsentation_c nur 99 Besucher eingetragen sind könnte das ein Problem werden. Das läßt sich aber leicht feststellen: Lege eine neue Spalte in der Tabelle konferenz an und versuche diese mit Daten zu füllen.
    Code:
    UPDATE    tbl_konferenz
    SET        neue_spalte = (    SELECT    DISTINCT besucher_anzahl
                            FROM    tbl_presentation
                            WHERE    konferenz_ref = tbl_konferenz.konferenz_id )
    Wenn hier eine Fehlermeldung kommt stimmen die Zahlen schonmal irgendwo nicht überein.
     
    jetwork gefällt das.
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