Eine Frage des Designs

Sophus

SQL-Guru
Beiträge
135
Hallo Leute,

ein kurzes Szenario, bevor ich meine allgemeine Frage stelle: Ich schreibe eine Anwendung, mit der man so ziemlich alles verwalten kann. Zur Zeit geht es um Briefmarken, Bücher, Comic, Zeitschriften, Filme, Serien, Kontakte (Adressbuch), Videospiele, Münzen, Musik etc. Zunächst hatte ich die Idee, für jede Kategorie eine Datenbank anzulegen. Also, für Bücher, für Filme, für Münzen, für Videospiele etc eine Datenbank. Aber dann fiel mir sofort ein, dass zum Beispiel bei Personen recht schnell Redundanz auftauchen kann. Beispiel, eine Person kann ein Schauspieler sein und auch ein Buchautor und von mir aus auch ein Sänger. Wenn ich also für jede Kategorie eine Datenbank anlegen würde, hätte ich am Ende bestimmte Personen doppelt und dreifach. Also entschied ich mich dazu nur eine Datenbank anzulegen, und dort sozusagen alles (geordnet) reinzustopfen. Das heißt, ich lege eine Tabelle an, in denen erst einmal ganz neutral Personen eingetragen wird. Für diese Eintragung gibt es eine ganz normale Profil-Maske in meiner Software. Das heißt, es werden ganz neutrale Informationen einer Person abverlangt: Geschlecht, Geburtsort, Name, Vorname, Künstlername, Nationalität, Todestag und ein Foto von der Person. Alles Informationen, die nichts mit dem Adressbuch zutun haben. Über die Profil-Maske wird also jede Person zentral und neutral in die Datenbank gelegt. Zunächst weiß die Datenbank also noch nicht, um welche Person es sich handelt, ob das ein Schauspieler, Musiker, Autor oder einfach nur eine Privatperson ist.

Und von dort aus werden über die ID der Personen dann Verknüpfungen zu Bücher, Filme, etc hergestellt. Das bedeutet aber auch, dass in die Person-Tabelle dann auch deine Freunde/Bekannte/Verwandte etc reinkommen, und man dann eine Verknüpfung zur Kontakte/Adressbuch herstellt. Man stelle sich also vor, Schauspieler, Autoren, deine Freunde, deine Verwandten etc sind in der Person-Tabelle vorhanden. Soweit alles super. Nun bin ich reim vom Denken her an ein mögliches Problem gestoßen. Wenn der Anwender meiner Software die Suchmaske öffnet, dort sagen wir mal Peter Mustermann eingibt, dann wird dieser natürlich aufgelistet, wenn die Person in der Datenbank ist. Nun klickt der Anwender in der Liste, in der sämtliche Suchergebnisse gelistet werden, doppelt auf Peter Mustermann. Woher soll jetzt meine Software wissen, dass die Person auch im Adressbuch ist? Anders gefragt, woher soll meine Software wissen, dass es für Peter Mustermann nun die Adressbuch-Maske öffnen soll? Denn genauso gut könnte mein Programm auch die Profil-Maske der Person öffnen, und nicht das Adressbuch. Wir erinnern uns, dass es ja keine Adressbuch-Datenbank gibt, sondern alle Tabellen in einer Datenbank untergebracht wurden. Gäbe es für jede Kategorie eine Datenbank, sähe ich da kein Denk-Problem bei mir.

Ich hoffe, ich konnte meine Sachlage etwas verständlich darstellen. Denn ich habe das Talent mich immer unglücklich und kompliziert auszudrücken.

Gruß
Sophus
 
Zuletzt bearbeitet:
Werbung:
Ich habe mir fast gedacht, dass ich mich sehr umständlich und unglücklich ausgedrückt habe. Später wollte ich diesen Beitrag bearbeiten, aber irgendwie war mir das nicht mehr möglich.

Also: Ich habe eine Datenbank, in der alles verwaltet wird. Vorher war ja meine Idee, für jede Kategorie eine Datenbank anzulegen. Diese Idee habe ich aber verworfen. Bleiben wir bei der Person. Da eine Person in meiner Datenbank so ziemlich alles sein kann, Autor, Musiker, Schauspieler oder einfach nur Freunde, werden die Personen in eine Tabelle untergebracht. Ganz nüchtern und neutral. Dafür gibt es eine Maske in meinem Programm. Die sieht wie folgt aus:

Add_Person.jpg

Alles kein Problem. Aber dann gibt es eine Profil-Maske der Person, diese aber eher für Schauspieler/Autoren/Musiker etc.Profile_Person.jpg
Wir sehen, dass hier Auszeichnungen, Filmografie, Diskografie und vieles mehr von einer Person angezeigt werden. Typische Angaben einer prominenten Person.

Aber dann gibt es auch eine Adressbuch-Maske, die leider noch nicht ganz vollständig ist, und ich sie hier noch nicht zeigen möchte. Wenn ich also in der Datenbank nach Peter Mustermann suche, und in der Liste dann doppelt auf seinen Namen klicke, muss mein Programm nun wissen, ob er nun die Adressbuch-Maske oder eben diese Profil-Maske (siehe zweites Bild) öffnen soll. Und was ist, wenn ein Schauspieler gleichzeitig mein Freund ist, und ich ihn in meinem Adressbuch habe? Denken wir noch einfacher. Wir lassen alle Personen in einer Liste ausgeben. Und aus dieser Liste suchen wir eine Person aus. Klicken doppelt auf der Person. Dann müsste ja irgendein Fenster angezeigt werden, um weitere Details über eine Person anzuzeigen. Wenn aber die Kategorie Filme, Serien, Bücher, Videospiele, Adressbuch etc alles in einer Datenbank ist, dann weißt mein Programm dann nicht, welche Maske er anzeigen soll.
 
das Front-End ist hier völlig nebensächlich. Aber "Also: Ich habe eine Datenbank, in der alles verwaltet wird. Vorher war ja meine Idee, für jede Kategorie eine Datenbank anzulegen." ist KEINE Beschreibung Deines DB-Designs.
 
Du möchtest sehen, wie meine Datenbank aufgebaut ist. Gut, dann muss ich mich daran machen und die Adressbuch-Verwaltung zu Ende bringen. Benutzt du auch das Programm DIA? Ich zeichne damit meine Vorstellungen auf. Ist für mich angenehmer.
 
Was er will sind DDLs... "Create Table"-Statements... Wenn möglich auch Indizes/Constraints... Und das nonplusultra wären ein paar Test-Daten...

Bei größeren Modellen ist es leider unmöglich Probleme zu verstehen, ohne Sie selbst einmal ausprobiert zu haben... Da kann man noch so viele Bücher schreiben... :)
 
Jetzt zitiere ich dich mal, akretschner: Lies nochmal, was ich schrieb. Ich will mein Ergebnis, also die Modellierte Datenbank, als Bild darstellen, damit ihr das Design meiner Datenbank sehen könnt. Vielleicht wird ja dann das Problem sichtbar.
 
Ein Bild versteht meine DB nicht, sie versteht nur sowas:

Code:
test=# create table bla_blubb(id int primary key, name text);
CREATE TABLE
test=*# create table blubb_bla(bla_blubb_id int references bla_blubb, data text);
CREATE TABLE

so what?
 
Die Datenbank soll ja auch nicht für dich denken. Du, mit deinen Augen, sollst das Bild ansehen, und das Design erkennen - ohne Datenbank. Ich modelliere, indem ich mit dem DIA-Programm zeichne. Nicht mit Absicht so kompliziert denken.
 
Werbung:
Ok... Das Modell anhand eines Bildes erkennen ist eine Sache... Aber sollen wir evtl. Lösungsvorschläge dann auch im Kopf zusammenbauen? Ohne die Auswirkungen zu kennen? Ich hoffe das soll ein Witz sein? :)
 
Zurück
Oben