AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken redundante Datenspeicherung
Thema durchsuchen
Ansicht
Themen-Optionen

redundante Datenspeicherung

Ein Thema von khh · begonnen am 5. Feb 2009 · letzter Beitrag vom 11. Feb 2009
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.435 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 16:06
Zitat von mquadrat:
Eine Tabelle in der mit einem extra Gültigkeitsdatum gearbeitet wird, macht nur Sinn wenn man die Daten immer aus dem Kundenstamm holt und im Einzelfall nicht mehr ändert. Beispiel Zahlungsart: Wenn alle Vorgänge über die Zahlungsart gehen, die im Kundenstamm verknüpft sind kann man mit der Referenztabelle arbeiten, wird aber für einen Vorgang eine abweichende Zahlart vorgesehen so müssen die Daten beim Vorgang gespeichert werden.
Das ist nicht ganz richtig. Es muss nur klar sein, das eine einfache Historie nicht genügt.
Erforderlich ist ein Protokoll, das den Zustand der entsprechenden Stammdaten zu jedem Zeitpunkt, insbesondere der Rechnungslegung wiederspiegelt.

Eine Historie kann ich im nachhinein ändern oder es können auch schon zukünftige Änderungen erfasst werden.
Beispiel für eine Historie von Adressen eines Kunden

ID_KD, GUELTIG_AB, STRASSE
17012, "05.12.1980", "Blaustraße 1"

Der Kunde teilt uns mit, er zieht in 5 Wochen um:

ID_KD, GUELTIG_AB, STRASSE
17012, "05.12.1980", "Blaustraße 1"
17012, "06.03.2009", "Grünstraße 2"

Eine Rechnung am "02.03.2009 10:03" erstellt, wird an die "Blaustraße 1" adressiert.

Eine Wochen später teilt uns der Kunde mit, er ist doch schon 2 Wochen früher umgezogen:

ID_KD, GUELTIG_AB, STRASSE
17012, "05.12.1980", "Blaustraße 1"
17012, "20.02.2009", "Grünstraße 2"

Wenn wir uns jetzt beim Druck einer Rechnungskopie auf die Historie verlassen, erscheint auf der Rechnungskopie plötzlich "Grünstraße 2".


In einem Protokoll gibt es praktisch nur Inserts(kein Update oder Delete).
Deshalb ist es möglich die für die Rechnung gültige Straße eindeutig zu bestimmen:

ID, GEAENDERT, ID_KD, GUELTIG_AB, STRASSE
1, "05.12.1980 10:13", 17012, "05.12.1980", "Blaustraße 1"
2, "09.02.2009 13:45", 17012, "06.03.2009", "Grünstraße 2"
3, "05.03.2009 09:30", 17012, "20.02.2009", "Grünstraße 2"

Der Eintrag mit der ID=3 darf für die Rechnungskopie nicht berücksichtigt werden, da GEAENDERT > Zeitpunkt der Rechnungserstellung.

select strasse
from tabelle
order by id_kd desc, geaendert desc
where (id_kd = :id_kd) and (geaendert <= :rechnungserstellung)
rows 1

Der Einfachkeit halber kann man bei der Rechnung auch einfach die ID aus dem Protokoll speichern.
Damit ersparrt man sich auch Ärger mit ungenauem Zeitstempeln oder eventuell parallelen Transaktionen bei der Rechnungserstellung.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz