Abfragbare Historie in Access 2007

Hallo,

mir fällt zu folgendem Problem keine passende Lösung ein und im Internet habe ich nichts so richtig Passendes gefunden:

Ich habe eine Datenbank mit 3 Tabellen: Person, Tätigkeit, Stelle.
Alle 3 Tabellen sind zueinander in Beziehung gesetzt.
An der Tabelle „Person“ hängen die beiden anderen Tabellen dran.

Ich benötige nun eine Historie, welche sämtliche Änderungen speichert, also eine Art Schnappschuss erstellt.

Beispiel:
Am 01.03.11 hat Meier im Unternehmen angefangen mit 40h/Woche.
Seit 01.04.11 arbeitet Kunze nur noch 30h/Woche statt bisher 40h/Woche die Woche. Bülow (40h/Woche) ist am 15.04.11 in Rente gegangen.

Es ist erforderlich, sich per heutiger Abfrage den Stand eines bestimmten Datums ausgeben zu lassen, also:
* am 01.02.11 waren 2 Mitarbeiter im Unternehmen beschäftigt mit 80h/Woche
* am 03.04.11 waren 3 Mitarbeiter mit 110h/Woche beschäftigt
usw.

Legt man nun eine 4. Tabelle „Historie“ an, in der alle (abfragewerten) Felder der Tabellen Person, Tätigkeit und Stelle zuzüglich Gültigkeitsdatum enthalten sind? Dann hätte ich ja quasi einen Schnappschuss jedes Zeitpunktes einer Änderung. Aber das hieße auch, dass bei beispielsweiser Änderung der h/Woche zur Person auch alle deren anderen Daten in der Tabelle „Historie“ abgespeichert werden werden, d.h. die Datenmenge würde recht schnell wachsen. Ein für mich größeres Problem wären aber die Abfragen, da diese ja in den 3 aktuellen Tabellen wie auch der Historie stattfinden müsste ohne zu wissen, wo die erforderlichen Daten des gesuchten Zeitpunktes zu finden sind…

Ich habe gerade das Gefühl, den Wald vor lauter Bäumen nicht zu sehen. ich hoffe daher, dass mir einer von Euch helfen kann.

Dank vorab

Gruß
Ronny

Hallo,

Ich habe eine Datenbank mit 3 Tabellen: Person, Tätigkeit,
Stelle.
Alle 3 Tabellen sind zueinander in Beziehung gesetzt.
An der Tabelle „Person“ hängen die beiden anderen Tabellen
dran.

also 1:n? Was ist dann der Unterschied zwischen Tätigkeit und Stelle? Du must schon Dein Datenmodell etwas genauer beschreiben. Hier wäre vielleicht sogar eine n:m-Verküpfung zweckmäßiger. Eine Stelle kann (im Laufe der Zeit) von verschiedenen Personen besetzt werden, eine Person kann verschiedene Stellen ausfüllen. Gleiches könnte man sich für Tätigkeit vorstellen. Bei so einer Verknüpfung könntest Du in der Verbindungstabelle das „Datum von“ und „Datum bis“ abspeichern. Daraus könntest Du ganz einfach mit einer Abfrage den Schnappschuss erstellen.

Legt man nun eine 4. Tabelle „Historie“ an, in der alle
(abfragewerten) Felder der Tabellen Person, Tätigkeit und
Stelle zuzüglich Gültigkeitsdatum enthalten sind?

Wenn man in einer Datenbank Informationen doppelt speichert (redundant), dann macht man etwas falsch.

MfG,

ujk

Guten Morgen und erstmal danke für die Antwort.

Bei der Sache mit der Stelle hast Du grundsätzlich Recht, hat hier aber bei uns einen anderen Hintergrund.
Das ist aber für mein Problem erstmal unerheblich.

Mit Deinem Vorschlag „Datum von“ und „Datum“ klingt interessant. Ich verstehe das so, dass die Tabelle mit diesen Zeitangaben einen Primärschlüssel und damit die übergeordneten Datensätze enthält, an denen dann die Daten aus den anderen Tabellen dranhängen.
Wäre dann noch das Problem zu verhindern, dass sich Zeiträume zu einer Person überschneiden:
Tabelle Zeitraum: ID=1, vom 01.01.11 bis 31.03.11
Tabelle Person: betrifft Meier, hängt an ID=1(Zeitraum), Arbeitszeit=40h/Woche

Senkung auf Arbeitszeit 30h/Woche ab 01.04.11
Tabelle Zeitraum: ID=2, vom 01.04.11 bis 99.99.99
Tabelle Person: betrifft Meier, hängt an ID=2(Zeitraum), Arbeitszeit=30h/Woche

Wie bringe ich ihm aber nach diesem Schema bei, dass es sich immer noch um die selbe Person handelt?

Der Knoten in meinem Kopf muss doch mal platzen :frowning:

Gruß
Ronny

Hallo,

Du kannst auch zwei Tabellen, die jeweils einen Primärschlüssel haben (sagen wir einmal Person und Stelle), miteinander verknüpfen, in dem Du eine Tabelle dazwischenschaltest. Die Tabelle enthält dann (natürlich) einen eigenen Primärschlüssel und die Werte der Primarschlüssel aus den zu verknüpfenden Tabellen Person und Stelle.
Dazu kannst Du auch weitere Eigenschaften der Verknüpfung wie das Datum_von und Datum_bis in dieser Tabelle speichern.

Ein Datensatz könnte dann so aussehen:

ID 1
ID_Person 27 (das könnte Müller sein)
ID_Stelle 98 (vielleich die Stelle des Gärtners)
Datum_von 27.9.2009
Datum_bis 28.4.2010

Wenn neue Daten in ein ungebundenes Formular eingegeben werden, das also nicht direkt an einer Tabelle hängt, kann man sie vor Eintragen in die Tabelle mit bereits vorhandenen Einträgen vergleichen und so Überschneidungen verhindern. Aber dazu wäre wohl VBA notwendig.

MfG,

ujk

Nachtrag: Re^4: abfragbare Historie in Access 2007
Du realisiert solche n:m-Verknüpfungen in Access dadurch, dass Du im Beziehungsfenster die Tabelle Personen 1:n mit der Tabelle Zeiträume und ebenso die Tabelle Stellen 1:n mit der Tabelle Zeiträume über die jeweiligen Schlüsselfelder verknüpfst.

Danach kann man mit der Kombination Haupt- und Unterformular sowohl zu einer Person die von ihr belegten Stellen als auch andersherum zu einer Stelle die dort beschäftigten Personen anzeigen lassen.

1 Like

Guten Morgen und danke für die Tipps.
Ich werde mich dann mal an die Arbeit machen und versuchen die Sache umzusetzen.

Gruß aus Leipzig
Ronny