PDA

Vollständige Version anzeigen : Jahres-Archivtabellen verarbeiten


Anne Berg
28.03.2006, 07:27
Hallo Ihr Lieben,

heute habe ich mal eine Frage an die Experten des Relationalen Datenmodells. ;)

Ich stehe vor dem Problem, eine jährlich wachsende Anzahl von Archivtabellen zur Berechnung von Gesamtsummen heranziehen zu müssen. Da stellt sich mir die Frage, wie man das elegant(er) lösen könnte.
Die Speicherung der Jahressummen in einer zusätzlichen Tabelle scheint mir im Widerspruch zu den Regeln der Normalisierung zu stehen.

Wie also löst man das auf möglichst geschickte Art?
Sicher kommt so etwas öfter vor (z.B. in der Buchhaltung?), daher hoffe ich auf praktikable Vorschläge.

Smaug
28.03.2006, 07:44
befinden sich alle Archivtabellen in der gleichen Datenbank ? Ausser dem separaten Abspeichern der Summen (da hätte ich auch meine Bedenken - wobei wenn die Daten nachträglich explizit nicht mehr geändert werden können ?!) würde mir noch eine Union-Abfrage einfallen. Da die Anzahl der Archivtabellen zunimmt, müsste diese allerdings dynamisch sein. In diesem Fall könnte man die einzelnen Tabellen-Namen über ein TableDef-Objekt durchlaufen (entweder alle Tabellen mit einer gemeinsamen Syntax benennen und dann Stringvergleich oder über die Description-Eigenschaft des TableDef-Objekts für die Union selektieren) und dann die Union zur Laufzeit zusammensetzen (dürfte allerdings nicht gerade schnell sein).

Anne Berg
28.03.2006, 08:12
Hallo Smaug, Danke für deine Antwort.

Genau das ist meine Sorge: dass die Antwortzeiten in die Knie gehen oder dass ich einen Aufwand betreibe, über den andere nur gequält lächeln würden... :rolleyes:

Die Archivtabellen befinden sich in einer Datenbank bzw. sind eingebunden, der Zugriff ist schon mal unproblematisch. Sie sind auch systematisch benannt, so dass sie in einer Schleife ausgelesen werden könnten. Prinzipiell sollten die Archivdaten auch nicht mehr verändert werden können - darin sehe ich u.a. auch den Sinn der Archivierung (Einfrierung eines Jahresbestands).

Eine Union-Abfrage möchte ich lieber nicht einsetzen, da es schon jetzt zehn Tabellen sind und ich noch ein paar Jahre mit diesem System leben muss. (Gibt es da evtl. eine Obergrenze?) Ich fange schon mal an, mich mit einer VBA-Lösung anzufreunden... ;)

Anne Berg
25.04.2006, 17:13
Hallo ihr Lieben!

Ich möchte diese Frage gern nochmals nach oben schieben in der Hoffnung, noch ein paar weitere Meinungen dazu zu erhalten. Wie gesagt, ich muss auf Anforderung die Archivdaten zu einem Eintrag (sagen wir mal Kunden-Nr.) aufdröseln, wozu ich dann auf sämtliche Jahres-Archivtabellen seit Beginn des Kontaktes zugreifen muss.

Ich kann mir nicht vorstellen, dass das Problem so einzigartig ist. Wie macht ihr denn so etwas - mit einer Gesamt-Archivtabelle? Wo liegen die Vor- und Nachteile der einen oder anderen Methode? Was gibt es noch an Alternativen?

Ich freue mich auf eure Antworten! :sun:

Engeli
25.04.2006, 18:11
Hallo Anne

Bin im Gegensatz zu Dir in Access nur ein kleines Licht (Hobby - Accessler), muss Dich jedoch, da es mich auch interessiert (habe eine Fitness DB, und evt. muss ich die Daten auch einmal archivieren) fragen.

Die Speicherung der Jahressummen in einer zusätzlichen Tabelle scheint mir im Widerspruch zu den Regeln der Normalisierung zu stehen.

Was spricht eigentlich dagegen. Eine Temporäre Tabelle mit den Jahressummen zu erstellen. Damit werden doch nicht die Regeln der Normalisierung verletzt?

Ich arbeite lieber mit temporären Tabellen als langsame komplizierte Abfragen zu konstruieren. Liegt wahrscheinlich auch an meinem kleinen Wissenstand. Nouba der Abfragen Hexer, hat sicher eine andere Meinung dazu.

Anne Berg
26.04.2006, 09:43
Hallo Markus.

Mir scheint, ich habe mein Thema nicht verständlich genug dargestellt und meine diesbezüglichen Fragen nicht richtig auf den Punkt gebracht.

Es ging mir zunächst darum, die bislang übliche Speicherung von Jahressummen (im Zuge des Jahresabschlusses und der Archivierung) in einer separaten (nicht temporären!) Tabelle in Frage bzw. zur Diskussion zu stellen. (Wie man auf anderen Wegen - sei's mit Abfragen oder mit Hilfe temporärer Tabellen - an diese Daten kommt, steht auf einem anderen Blatt. ;) )

Ein weiterer Punkt in diesem Zusammenhang ist meine Nachfrage, ob es überhaupt klug ist, separate Jahresarchive zu erstellen, anstelle eines (eingefrorenen, nicht änderbaren) Gesamtarchivs.

Es geht zum einen um die Bereitstellung von Jahressummen (z.B. Umsatzzahlen) - sollen diese bei Bedarf immer wieder neu berechnet oder doch besser beim Jahresabschluss ermittelt und gespeichert werden?
Dann geht es um die Detailinformationen (z.B. Bestellungen), die bei Bedarf vollständig aufgelistet werden sollen.

RST
16.06.2006, 21:02
Hallo Anne,

dieser Thread ist schon etwas älter, aber vielleicht besteht ja noch Handlungsbedarf. Daher sende daher zunächst einmal einen Hinweis, um diese dann, bei Bedarf, weiter zu vertiefen.

Die Datenbanktheorie ist aus historischen (bereits bewährten) Konzepten, wie die Netzwerk-Datenbank, über die relationale Dantenbank hin zur obejktorientierten Datenbank stets in Veränderung. Wir haben gelernt, dass es keine für alle Anforderungen optimale Variante der Datenspeicherung gibt. Wir wählen die Art der Datenhaltung und Aufbereitung der Ergebnisse immer häufiger nach dem Bedarf und den Anwenderanforderungen. Ich habe in Deinen Threads gesehen, dass Du Dich auch mit größeren Datenbanken beschäftigst, daher wird das alles nichts neues für Dich sein.

Daraus abgeleitet, möchte ich Dir dann die Konzepte des Datawarehouses in Erinnerung bringen. Im Datawarehouse werden häufig sämtliche Unternehmensdaten zusammen geführt, denormalisiert und inkrementell für zu erwartende Fragestellungen multidimensional aggregiert.

Meine Anregung ist, an die Art der Fragestellung und die Anforderung an die Zugriffszeit in den Vordergrund zu stellen. Mit diesen erprobten Konzepten möchte ich den Schwerpunkt der Normalisierung in Frage stellen.

Zum Einsatz und zur Umsetzung solcher Konzepte gibt es mit dem SQL Server und vielen anderen Tools reichhaltig unterstützte Möglichkeiten. Aber egal, ob man Tools einsetzt oder es selber strukturiert und umsetzt, die Methode wäre meiner Ansicht nach, anforderungsgerecht.


Gruß
Ralf

Anne Berg
19.06.2006, 08:10
Hallo Ralf,

vielen Dank für Deinen Beitrag, auch wenn mir der Inhalt - selbst nach mehrmaligem Lesen - doch recht "philosophisch-kryptisch" (d.h. theoretisch-abstrakt) erscheint. ;)

Im konkreten Fall handelt es sich um eine Access-Datenbank, in der jährlich zwei Archivtabellen von je ca. 2000 DS erzeugt werden. Zusätzlich wird in zwei separaten Tabellen je ein Summensatz pro "Kunde" eingefügt.

Nun ging es mir darum, im Zuge der Neu-Programmierung der Anwendung, dieses Verfahren in Frage zu stellen und evtl. zu optimieren. Da aber bislang keine Gegenargumente und auch keine entsetzten Aufschreie alà "wie kann man nur..." hierzu kamen, vermute ich, dass dies durchaus gängige Verfahrensweise ist und werde es wohl dabei belassen.

Danke nochmals allen Beteiligten!

J_Eilers
19.06.2006, 08:22
Moin Anne,

Ich hab hier ein Messsystem, welches mit 2 BE arbeitet. In dem Einen sind aktuelle Messungen (ungefähr die letzten 4 Monate) und in dem anderen, alles, was davor war. In den Archivtabellen speichere ich 2 maximal Werte pro Messung. Das hat den Vorteil, dass ich sie nicht zur Laufzeit berechnen muss und in einer Übersicht schneller das Ergebnis bekomme. Denn mit 2000 DS komm ich nicht weit ;)

Wobei mein Datenbestand aber in einer Tabelle eingefroren wird und nicht jedes Jahr in eine neue, der Aufwand wäre mir für Auswertungen und die Suche zu umständlich. Ansonsten sag ich immer, wenn ich ins Archiv gehe, bin ich froh, überhaupt was zu finden, also geduldet euch einfach ein wenig. Eine komplexe Auswertung dauert ca. 4 min, das halte ich noch für annehmbar.

kama
19.06.2006, 08:28
Hallo Anne
Statt für jedes Jahr eine eine Tabelle zu erzeugen würde sich IMHO anbieten die Jahreswerte alle in einer Tabelle abzuspeichern um auch auswertungen über mehre Jahre machen zu können.
Ich verfolge aber in solchen Fällen einen anderen Ansatz.
Mein daten die ich brauche liegen alle "roh" in einer Stammtabelle.
Mein Frontend verfügt über Tabellenerstellungsabfragen die aus diesen Rohdaten die die Zusammenstellung z.b. nach Jahr im Frontend erstellt. Der User kann den Bereich eingeben.
Vorteile des Verfahrens aus meiner Sicht.
Es wird auf Veränderungen in den Rohdaten reagiert.
Es gibt keine Netztraffic als Bremse.
Da der Bereich vorher festgelegt wird, sind keine weiteren Auswahlabfragen notwendig.
Wenn der Benutzer einen anderen Bereich haben will werden neue Tabellen erstellt.
Nicht benötigt Daten werden als Rohdaten archiviert.
Gruß Klaus

Anne Berg
19.06.2006, 09:04
Vielen Dank auch Euch. Ich habe mir das nochmal durch den Kopf gehen lassen mit der wachsenden Anzahl von Archivtabellen und möchte nun doch lieber Abstand davon nehmen. Es ist so, dass ich in diesem Zusammenhang keine Auswertungen nach Zeitbereich mache, sondern wenn, dann alle Daten zu einem 'Kunden' auslesen will. Da ist es echt blöd, die ganzen Archive durchzuackern. ;)

Ich werde statt dessen das Archivierungsjahr als zusätzliche Spalte hinzunehmen, um zu dokumentieren, wann diese Datensätze erzeugt wurden und das (Kalenderjahr-übergreifende Archivierungs-) Jahr nicht jedes Mal aus dem Datum herleiten zu müssen.