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
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von hazard999
hazard999

Registriert seit: 2. Okt 2008
38 Beiträge
 
#11

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 12:53
Möglich wäre es auch bei jeder Änderung ein neues Record in der Kundentabelle anzulegen
und den alten als deprecated zu definieren.
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#12

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 13:15
Hallo,

jede vernünftige Firma wird ihre Datenbestände per Band oder ein anderes Medium sichern.
Wir z.B. sind verpflichtet unsere Datenbestände 10 Jahre aufzubewahren.
Ich weiss, dass mein Beitrag etwas am Thema vorbei geht aber wird täglich eine Sicherung gemacht
in einer Monatssicherung zusammengefasst und diese 10 Jahre aufgehoben so hast du immer
noch die Möglichkeit an deine alten Daten zu kommen.
Ich möchte auch noch das Stichwort "optisches Archiv" in den Raum stellen.
Ansonsten müsstest du dir soetwas wie eine Backup-Datenbank zulegen in der jede Änderung
gespeichert wird. Halte ich für unrealistisch!

Grüsse
Rainer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#13

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 13:45
OK, das Backup ist schonmal gut, aber wenn er "schnell" mal auf alte Daten zugreifen will, dann würde ich je eine zusärtliche Tabelle anlegen, wo die "alten" Daten reinverschoben werden, mit einem zusätzlichen Feld für das Änderungs/Löschungsdatum.

Die Daten würden dann die aktuelle Tabelle nicht belasten
und man könnte sowas wie eine History in sein Programm einbauen, wo man sich zu einen Datensatz die letzen Änderungen anzeigen lassen könnte.

Zu alte Daten und jene, welche nicht mehr benötigt werden, könnte man dort ja wieder rauslöschen lassen. Für den Notfall, daß man dann doch mal viel ältere Daten benötigt, könnte/müßte man sich dann halt das passende Backup raussuchen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 13:55
... und da komme ich wieder mit meinem Vorschlag:
Adressdaten in eigene Tabelle. Jeder Satz hat einen
referentiellen Bezug auf die Kundentabelle und ein
Gültigkeitsdatum ... Das ist gleichzeitig auch ein Archiv
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#15

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 14:29
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.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#16

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 15:49
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.
Hallo,

endlich jemand, der neben der Diskussion um relationale Tabellen auch etwas von der Sache selbst versteht. Eine Rechnung ist eine Rechnung ist eine Rechnung und keinesfalls darf daran etwas geändert werden, wenn sie mal gedruckt ist. Selbst wenn ein Tippfehler vorliegt, ist nur Stornieren und Neuanlegen zulässig! Es darf nie der Fall eintreten, dass 2 gedruckte Rechnungen gleicher Nummer existieren, die sich irgendwo unterscheiden.

Ich halte daher das spätere Hereinmixen von Daten aus dem Kundenstamm (oder Warenstamm usw.) für generell nicht zulässig - was auf der Rechnung steht, muss auch im Rechnungsdatensatz gespeichert werden, relationale Theorie hin oder her. Nur zum Zeitpunkt der Rechnungserstellung werden die aktuellen Stammdaten eingelesen. Nach aussen hin wäre daher auch eine Speicherung im PDF-Format denkbar, womit diese Fragen erledigt wären, aber dann kann man die Rechnungsdatensätze nicht mehr statistisch auswerten.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 16:12
Das Eine schließt das Andere ja nicht aus, oder? Gefordert ist doch
lediglich Eindeutigkeit der Zuordnung, das physische Modell "darunter"
ist m.E. zweitrangig. Mein Vorschlag soll auch nur als Hinweis dienen,
wie so etwas mit wenig Aufwand zu realisieren ist. Ob ich "beim Vorgang"
speichere, oder an anderer Stelle mit eindeutiger Verknüpfung kann
wohl keine so große Rolle spielen. Entscheidend ist die "Business-Logik",
eine nachträgliche (verbotene) Manipulation könnte schließlich auch stattfinden,
wenn die Daten physisch in derselben Tabelle stehen.
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#18

Re: redundante Datenspeicherung

  Alt 9. Feb 2009, 17: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
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#19

Re: redundante Datenspeicherung

  Alt 10. Feb 2009, 11:43
Zitat von Blup:
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....
Hallo,

mit dem Zugriff über eine eindeutige ID kann man die Sache sicher in den Griff bekommen, vorausgesetzt man beachtet auch die Möglichkeit von ad-hoc-Vereinbarungen wie geänderte Zahlungsziele, Skonti usw. und speichert diese mit der Rechnung ab.

Bei unserer Anwendung kamen aber noch weitere Randbedingungen dazu: Ossi-Fertigung und Wessi-Verwaltung mit ca 500 km Entfernung. Daher enthält die Rechnungsdatenbank alles, was in der Rechnung steht und wird jeden Morgen übertragen. Wegen der Besonderheit, dass vorhandene Rechnungen nicht geändert werden dürfen, genügen dabei die neu erstellten Rechnungen, eine Datenmenge von weniger als 100 kB.

Wäre alles relational verknüpft, so müsste ein konsistenter Snapshot des ganzen Systems mit Kundendaten, Artikeldaten, Material usw. übertragen werden, das wären 25 - 50 MB. Eine Online-Datenverbindung von Server zu Server wäre natürlich nicht uncool, aber zum Zeitpunkt, als das alles konzipiert wurde, wären die Kosten im Bereich kEUR/Monat gelegen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

Re: redundante Datenspeicherung

  Alt 10. Feb 2009, 12:33
Manchmal wird die Art der Speicherung auch durch die Arbeitsweise festgelegt ...

Ich betreue auch einen Einzelhandel und da ist bei der Auftragserstellung/Rechnung der Divers-Kunde sehr beliebt.

Eine Dummy-Kunden-Nummer, wenn der Kunde nicht dauerhaft gespeichert werden soll.

Also wird die Adresse einfach im Rechnungskopf gespeichert. Somit revisionssicher und auch Diverskunden-fähig.

Als weiterer Hinweis ist die Angabe der Lieferschnschrift, die sich ja auch von Auftrag zu Auftrag ändern kann (mal für die Omi, mal für wen auch immer). Auch hier werden diese Daten im Rechnungskopf gespeichert.

Weiterer Vorteil: Bei einer Revision werden nur die Tabellen Rechnungskopf und Positionen benötigt. Eine Verknüpfung mit den Adress-Bestönden entfällt.

Aber insgesamt bleibt es halt Geschmckssache

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 11:15 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