3.NF noch eingehalten trotz Verkaufsarchiv?

Schönen guten Abend zusammen

Ich arbeite zurzeit an einer Datenbank die als Abschlussarbeit für meinen Lehrabschluss benotet wird. Und nun habe ich ein Problem mit dem Aufbau der Datenbank.

Ich habe den Auftrag erhalten, eine Lagerverwaltung in Access zu realisieren. Dort sollen alle Produkte erfasst werden sowie auch eine Lagerübersicht vorhanden sein.

Ich habe nun den Aufbau der Datenbank so geplant, dass es auch eine Maske für die Ausgabe geben wird (welcher Artikel und wie viele abgegeben wurden) Daraus soll dann automatisch der Lagerbestand neu berechnet werden. Soweit so gut, doch nun möchte ich noch eine „Verkaufshistory“ einbauen. Man soll also sehen, wann, wie viele eines bestimmten Artikels verkauft wurden.

Dazu habe ich mit einer separaten Anfügeabfrage eine neue Tabelle (Verkaufshistory) gemacht und diese mit den entsprechenden Daten gefüllt.
Doch nun zu meinem hauptsächlichen Problem, dadurch, dass ich eine History gemacht habe, sind natürlich einige Daten 2mal in der Datenbank (Produktname) und dadurch ist diese nicht mehr in de 3 NF (nehme ich an).

In der History werden alle Daten gespeichert (Artikelbeschreibung, Datum des Verkaufes und wie viele davon verkauft wurden)

Ich habe nun zuerst nur die ID der jeweiligen Artikel in die neue Tabelle übertragen, somit wären die Daten nur 1x vorhanden gewesen. Doch dann wurde, sobald ich ein Produkt aus der Datenbank natürlich auch das Produkt aus der History gelöscht bzw. dessen Bezeichnung konnte nicht mehr angezeigt werden. Und die History soll ja trotzdem das abgegebene Produkt anzeigen, selbst wenn es nicht mehr erfasst ist.

Lange Rede, kurzer Sinn, darf ich die Daten trotzdem in einer separaten Tabelle nochmals speichern? Im Auftrag, welchen ich erhalten habe steht nämlich dass ich unbedingt schauen muss, dass die Datenbank in der 3NF realisiert wird.

Ich wäre sehr froh, wenn Sie mir kurz sagen könnten, ob ich dadurch irgend eine Regel verletzt habe und ob es eine andere Möglichkeit gibt, mein Vorhaben zu realisieren.

Vielen herzlichen Dank und liebe Grüsse

Moin, Nina,

der Ärger lässt sich vermutlich umgehen, wenn das Produkt um ein Feld „gültig“ (J/N) erweitert wird. Dadurch wird die Löschung eines Produktes unnötig, es genügt, das Feld entsprechend zu belegen.

Ich wäre sehr froh, wenn Sie1 mir kurz sagen könnten, ob ich
dadurch irgend eine Regel verletzt habe

Die Normalisierung soll in erster Linie Pflege-Anomalien verhüten, wie Du sie beschrieben hast - Produkt wird gelöscht und Bewegungen zum Produkt verschwinden auch gleich. Bei historisierten Daten zieht dieses Argument nicht, da wird verlangt, den momentanen Stand, auch Schnappschuss genannt, einzufrieren.

und ob es eine andere
Möglichkeit gibt, mein Vorhaben zu realisieren.

Gerade bei komplexen Datenbanken wird in der Praxis oft nicht die Struktur historisiert, sondern nur der flachgeklopfte und damit „redundante“ Datensatz.

Gruß Ralf

1Die meisten Leute im Forum duzen sich, egal wie alt sie sind :wink:

Guten Tag Ralf

Vielen Dank für die rasche Antwort!

Ich habe es nun schlussendlich so gelöst, dass der Datensatz als gelöscht gekennzeichnet wird, jedoch noch in der Datenbank bleibt. So habe ich die Normalform nich verletzt.

Da es eine Abschlussarbeit ist und da darauf geachtet wird, dass man die Normalformen nicht verletzt habe ich mich entschlossen dies so zu lösen…

Vielen Dank für die Hilfe!

Liebe Grüsse

Nina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]