Datenbanken automatisch updaten
Simone
- datenbank
0 Simone0 Vinzenz Mai0 Simone0 Vinzenz Mai0 Hamster
0 Hamster
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
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
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
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
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
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) FROMTageserfassung
Jetzt habe ich das letzte Datum aus dieser Tabelle2.) 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
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.
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?