Hallo maynard,
ich kann mir schon denken, was du möchtest; ich habe mal mit einem (Großrechner-) System gearbeitet, wo man etwas ähnliches machen konnte. Natürlich kann man nicht erwarten, dass der Anwender im Datenbankdesign rumfummelt, zumal damit ja noch nichts an Anzeige und Verarbeitungslogik vorhanden wäre.
Ich skizziere mal, was das System damals gemacht hat: Das Basissystem hat natürlich weitestgehend alles abgedeckt, was man im Normalfall so benötigt (z.B. Kontodaten o.ä). Es gibt sog. "Sonderdaten", die der Anwender definieren kann. Ein Sonderdatum hat einen Code, einen Namen, einen Typ und ggf. sogar Ausprägungen. Der Anwender - bzw. der Administrator beim Kunden - gibt also in einer Maske einen Datensatz ein, der z.B. besagt: Sonderdatum "101", heisst "Debitorenkontonummer", ist "String" der Länge "10". Denkbar wären noch z.B. Datum, Zahl, Betrag, Flag.
Jetzt kann der Anwender in einer allgemeinen Sonderdatenmaske neue Sätze zu einem Objekt einfügen, die vom Typ "101" sind, akzeptiert werden hier nur Strings bis zur Länge 10.
In der Sonderdatenmaske sind alle vorhandenen Sonderdaten zu einem Objekt einfach als Liste angezeigt.
Ein weitere Verfeinerung wäre die Möglichkeit, in einer weiteren Sonderdatenmaske zu einem Typ ("101") definieren zu können, welche Ausprägungen es gibt. Wäre der Datentyp Zahl, so könnte man eingeben 0 = "nicht vorhanden", 1 = "XXX", 2 = "yyy".
Dann werden in der Anzeige der Sonderdaten die Ausprägungen übersetzt.
Diese Methode ist sehr mächtig und kann mit sehr wenig Aufwand in der
DB implementiert werden: Ein Table definiert die Sonderdaten:
Art : Integer;
Typ : (Integer, Boolean, Date, String, Currency);
Länge : Integer;
Name : String(40);
Und jetzt kann man sie in genau einer(!) Tabelle speichern:
Objekt-ID : ...
Art : Integer;
Wert_Integer : Integer;
Wert_Boolean : Boolean;
Wert_Date : Date;
Wert_String : String(...);
Wert_Currency : Currency;
Bei der Anzeige in der Maske entscheidet dann der Typ des Sonderdatums, welche Spalte angezeigt wird. Diese Anzeigemaske muss dann halt recht universell programmiert werden, also nur String-Anzeigen o.ä.
Arbeitet man mit Ausprägungen, so kommt noch eine Tabelle dazu, die diese definiert:
Art : Integer;
Wert_Integer : Integer;
Wert_Boolean : Boolean;
Wert_String : String(...);
(* andere Typen machen wohl keinen Sinn *)
Bedeutung : String (...);
Mit dieser Tabelle kann man jetzt die Eingaben der Anwender prüfen/beschränken und die Anzeige in der Liste sprechender gestalten.
Mit etwas Phantasie kann man jetzt noch einiges verfeinern, z.B. den Typ-Code so sprechend machen, dass man eine Berechtigungsverwaltung draufsatteln kann (ein Anwender kann nur Sonderdaten eingeben, zu denen er berechtigt ist...)
Oder man sagt, zu welcher Art von Objekt ein bestimmter Typ nur angegeben werden darf...
Es sind damit in gewissen Rahmen auch Auswertungen für den Anwender machbar ("Anlisten aller Kunden, die Sonderdatum "101" haben bzw. die Sonderdatum "101" = "xxxxx" haben").
Ich hoffe, das gibt ein paar Ideen...
Viel Spass beim machen!
Bis dann
Peter