Access Design: Generische Datenbank

Aus DBWiki
Wechseln zu: Navigation, Suche

Eine generische Datenbank - Was ist das?
Wikipedia schreibt dazu:"Generische Begriffe oder Objektbezeichnungen entstehen durch Abstraktion gemeinsamer Merkmale und Eigenschaften von vielen unterschiedlichen Begriffen oder Objekten durch Fokussierung auf deren Gemeinsamkeiten." Das drückt genau das aus, was ich meine - ist aber wahrscheinlich immer noch schwer verständlich. Ich will es daher an einem Beispiel aus der Transportwirtschaft erläutern.

Ein Transportunternehmen bewegt mit irgendwelchen "Geräten" Güter. Ein solches "Gerät" kann sowohl ein Schiff, als auch ein LKW als auch ein Gabelstapler oder irgend etwas anderes sein. Will man jetzt für ein solches Unternehmen eine Datenbank entwickeln, so müsste man eigentlich für jedes dieser unterschiedlichen Transportmittel (so wollen wir die "Geräte" ab jetzt nennen) eine extra Tabelle anlegen. Kommt dann ein neues Transportmittel hinzu, muss wieder eine neue Tabelle angelegt werden. Das ist natürlich ein Problem für den Nutzer der Datenbank! Er muss sich an den Entwickler wenden und ihn bitten, die Datenbank um das neue Transportmittel zu erweitern. Eine solche Bitte kostet normalerweise Geld, denn der Entwickler muss eine ganze Menge Sachen neu programmieren.

Für den Nutzer einer Datenbank wäre es daher schön, wenn er diese Erweiterung selber und ohne Programmieraufwand vornehmen könnte. Und das geht tatsächlich - mit Hilfe einer generischen Datenbank. In dieser Datenbank gibt es weder eine Tabelle "tblSchiff", noch eine Tabelle "tblLKW", noch eine Tabelle "tblGabelstapler". In dieser Datenbank gibt es stattdessen die "generischen" (=verallgemeinerten) Tabellen "tblTransportMeans" und "tblTMtype" (ich habe das Ganze wegen der Internationalität des Transportgewerbes auf Englisch gemacht!). In tblTMtype gibt es die Einträge "ship", "truck", "forklift", ... usw. Das sind die Transportmittel-Typen. In tblTransportMeans stehen dann bunt durcheinander konkrete Schiffe, LKWs , Gabelstapler, usw.

Jeder Transportmittel-Typ hat spezifische Eigenschaften: Das Schiff hat z.B. einen Namen, der LKW hat ein Kennzeichen, der Gabelstapler hat einen Wenderadius. Diese Eigenschaften (engl. "properties") stehen in der Tabelle tblTMproperty. Der vierte im Bunde ist schließlich die Tabelle tblTMPvalue. Darin stehen die Werte der Eigenschaften - also die Schiffsnamen, die LKW-Kennzeichen und die Gabelstapler-Wenderadien.

Der Nutzer kann dann selber - und ohne programmieren zu müssen! - neue Transportmitteltypen definieren.

Datenmodell der generischen Beispiel-DB


Wem das alles zu unverständlich klingt, der möge sich meine Beispiel-Datenbank mal herunterladen und einfach ein wenig darin herum klicken. Dann wird er hoffentlich den geradezu genial einfachen und zugleich universellen Ansatz erkennen! Wenn man z.B. denselben Ansatz für die Transporteinheiten (Container, Gitterboxen, Paletten, ...) benutzt, dann kann man eine Datenbank entwickeln, mit der sich sowohl der Transport von Containern auf Schiffen als auch der Transport von Paletten mit Gabelstaplern abbilden lässt. Und: Die Datenbank ist jederzeit auf beliebige andere Transportmittel und Transporteinheiten erweiterbar!

Ich freue mich auf Eure Meinungen und auf Ideen für weitere Anwendungen dieses Ansatzes!

Download der Beispiel-Datenbank: Datei:GenericDB-v02.zip