Simone: Datenbanken automatisch updaten

Hallo Self Gemeinde,

Ich habe ein Problem mit einer Datenbank – Verknüpfung.

Ich bin derzeit dabei ein kleines Kassenbuch zu modellieren. Es existieren drei Tabellen

Verkürzte Struktur der Tabellen

1. Tageserfassung in dieser Tabelle werden die aktuellen Aus bzw. Eingaben erfasst

2. Intervall Zahlungen in dieser Tabelle werden einmalig zukünftige Aus bzw. Eingaben erfasst. Die Intervallzahlungen können von täglichen Zahlungen über wöchentliche bzw. 1-monatliche, 2- monatliche, 3- monatliche usw. Variieren.

3. Update Tabelle um ein Abgleich der Tabelle 1. und 2. zu ermöglichen.

Verkürzte Spaltendarstellung  (alle Spalten mit Datum  im Mysql Typ Datum)

Zu 1. Tabelle Tageserfassung

Id | Datum | Betrag | Vorgang

Zu 2. Tabelle Intervall

Id | Datum | Betrag | Vorgang

Zu 3. Tabelle Update

Id | Datum | id_intervall

Die Mysql Abfrage  soll folgendes bewirken:

Prüfe ob in der Tabelle Tageserfassung die Intervallzahlungen vorhanden
( letztes Datum  bis Now () )

Sind Intervallzahlungen vorhanden mache update

  • füge Datensatz in Tageserfassung ein
  • protokolliere Update in der Tabelle update

Wie könnte der Query aussehen den ich modellieren muss um folgende Verknüpfungen der DBs zu erreichen. Leider bin ich was Mysql angeht nicht der Profi.

vielen lieben Dank
Simone

  1. HI, Selfer

    Meine Frage - (stellung) konnte ich noch nicht lösen.

    Bitte versucht doch mit mir zusammen eine Lösungsansatz zu erarbeiten. Gerne gebe ich eine Runde aus! Im Angebot habe ich virtuelles online Bier ;o)

    Danke Simone

  2. Hallo Simone,

    Ich bin derzeit dabei ein kleines Kassenbuch zu modellieren. Es existieren drei Tabellen

    ich verstehe leider viel zu wenig von Buchhaltung, um Deinem folgenden Exkurs (den ich gekürzt habe) zu folgen. Ich fürchte, Du hast entweder Deine Tabellen so sehr gekürzt, dass relevante Informationen weggefallen sind - oder Du hast relevante Informationen vergessen. Ich kann mir derzeit nicht vorstellen, dass Du mit Deinen drei Tabellen Deine Aufgabe sinnvoll umsetzen kannst. Vielleicht denke ich zu kompliziert, aber da fehlt meiner Meinung nach einfach alles, um Deine Vorgänge miteinander verknüpfen zu können.

    [...]

    Deinen abschließenden Absatz zitiere ich jedoch vollständig:

    Wie könnte der Query aussehen den ich modellieren muss um folgende Verknüpfungen der DBs zu erreichen. Leider bin ich was Mysql angeht nicht der Profi.

    vielen lieben Dank
    Simone

    Leider sehe ich keine folgenden Verknüpfungen. Und ja, ich habe auch in Deinen vorherigen Ausführungen, die ich gestrichen habe, keine Verknüpfungen sehen können. Ja, ich habe versucht, Deine Frage zu fühlen, nicht wörtlich zu übersetzen, bin aber leider kläglich gescheitert.

    Ich kann mir vorstellen, dass es anderen ähnlich geht. Welches Problem möchtest Du lösen?

    Ein paar Anmerkungen noch zum Schluß:
    Manches läßt sich sinnvoll nur in der API lösen. Wieviel Du in die Datenbank schieben kannst, hängt natürlich eng mit den Fähigkeiten des Datenbankmanagementsystems zusammen. MySQL 4.x und älter weisen enorme Defizite auf, für Geschäftsprozesse bieten sich oftmals Stored Procedures an, die MySQL erst ab Version 5.0 unterstützt. Der Einsatz von Foreign-Key-Constraints (der durchaus sinnvoll ist), erfordert bei MySQL den Einsatz der InnoDB-Engine, ...

    Warum ausgerechnet MySQL, warum nicht ein anderes Datenbankmanagementsystem? Wenn unbedingt MySQL, welche Version? Ich rate in diesem Fall zu 5.0.12 oder neuer. Meine Gründe sind im Vergleich zum Juni 2006 unverändert :-)

    Freundliche Grüße

    Vinzenz

    1. Hallo, Vinzenz

      Meine Datenbankmodell ist schon etwas komplexer
      aus diesem Grund habe ich alles sehr stark reduziert hier reingestellt.

      Ich möchte auch am reduzierten Modell vielleicht mit Deiner Hilfe eine Lösung finden.

      Zu 1. Tabelle Tageserfassung

      Id | Datum | Betrag | Vorgang

      Zu 2. Tabelle Intervall

      Id | Datum | Betrag | Vorgang | Intervallzahlung

      Zu 3. Tabelle Update

      Id | Datum | id_intervall

      Mein Lösungsanasatz

      1.)
      Ich suche den letzten Eintrag (Datum) in der Tageserfassung
      SELECT MAX(datum) FROM Tageserfassung
      Jetzt habe ich das letzte Datum aus dieser Tabelle

      2.) ich durchsuche die Intervallzahlungen
      Es müssen jeweils z.B. am 2 jeden Monats 200 Euro Miete bezahlt werden. Natürlich gibt es in der Tabelle Intervall eine Spalte für den Zahlungsintervall.

      Id | Datum        | Betrag | Vorgang | Intervallzahlung
      2  | 2006-10-02   | 200    | Miete   | monat

      Anhand des letzten Eintragdatum von Tageserfassung z. B. 1.10.06 und dem heutigen Datum dem 4.10.06  lieget eine Intervallzahlung dazwischen.
      praktisch muss jetzt die Tageserfassung update werden und gleichzeitig ein Protokoll in der Tabelle update geschrieben werden.

      Meine Lösungsvorstellung sollte sich auf einen Query beschränken.

      liebe Grüße
      Simone

      1. Hallo Simone,

        verstehe ich Dich richtig:

        Du möchtest alle seit dem letzten Aufruf fälligen Intervallzahlungen

        a) ermitteln
          b) in die Tageserfassung einfügen
          c) protokollieren

        Richtig?

        Mein Lösungsanasatz

        1.)
        Ich suche den letzten Eintrag (Datum) in der Tageserfassung
        SELECT MAX(datum) FROM Tageserfassung
        Jetzt habe ich das letzte Datum aus dieser Tabelle

        2.) ich durchsuche die Intervallzahlungen
        Es müssen jeweils z.B. am 2 jeden Monats 200 Euro Miete bezahlt werden. Natürlich gibt es in der Tabelle Intervall eine Spalte für den Zahlungsintervall.

        Du benötigst mehr Informationen :-)
        z.B. an welchem Tag des Intervalls der Betrag fällig ist,
        ab welchem Zeitpunkt (Datum) die Intervallzahlung erfolgt,
        ab welchem Zeitpunkt (Datum) die Intervallzahlung nicht mehr erfolgt ...

        Id | Datum        | Betrag | Vorgang | Intervallzahlung
        2  | 2006-10-02   | 200    | Miete   | monat

        Anhand des letzten Eintragdatum von Tageserfassung z. B. 1.10.06 und dem heutigen Datum dem 4.10.06  lieget eine Intervallzahlung dazwischen.
        praktisch muss jetzt die Tageserfassung update werden und gleichzeitig ein Protokoll in der Tabelle update geschrieben werden.

        Meine Lösungsvorstellung sollte sich auf einen Query beschränken.

        Das geht. Voraussetzung MySQL 5.x oder ein anderes Datenbankmanagementsystem, das Stored Procedures unterstützt. Die Query könnte in etwa so aussehen:

        SELECT aktualisiere_intervallzahlungen() ;-)

        In der Prozedur steckt Deine Anwendungslogik.

        Freundliche Grüße

        Vinzenz

        1. Meine Lösungsvorstellung sollte sich auf einen Query beschränken.

          Das geht. Voraussetzung MySQL 5.x oder ein anderes Datenbankmanagementsystem, das Stored Procedures unterstützt. Die Query könnte in etwa so aussehen:

          SELECT aktualisiere_intervallzahlungen() ;-)

          In der Prozedur steckt Deine Anwendungslogik.

          Eventuell wären RDBMS-eigene Transaktionen von Nutzen, sofern von mySQL unterstützt.

  3. Wie könnte der Query aussehen den ich modellieren muss um folgende Verknüpfungen der DBs zu erreichen.

    Nach Querlesen Deiner Frage verstehe ich folgendes: Du willst aufgrund von neuerfassten oder geänderten Daten aus Tabelle B Tabelle A aktualisieren und die Änderungen in Tabelle C notieren.

    Das ist OK, geht ein wenig in Richtung Daten-Historisierung. Zur "Query", ganz vermutlich benötigst Du ein Rudel von Abfragen und temporäre Datenhaltung, mir ist nicht ganz klar ob mySQL das in der bei Dir im Einsatz befindlichen Version zu leisten vermag.

    Aber, no prob, Du hast ja sowas wie PHP zur Verfügung und kannst bspw:
    1.) die neu hereingekommenen (bzw. geänderten) Datensätze identifizieren und "in PHP" ablegen (als array bspw.)
    2.) auf Grund bestimmter Regeln Tabelle A updaten
    3.) diese Datenaktualisierungen in Tabelle C notieren

    Welches Vorgehen hast Du bisher ins Auge gefasst bzw. umgesetzt?