Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Eine Frage des Designs

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von Sophus, 21 August 2015.

  1. Sophus

    Sophus Datenbank-Guru

    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: 21 August 2015
  2. akretschmer

    akretschmer Datenbank-Guru

    Bahnhof.

    Aber vielleicht hilft Dir ein Stichwort für die Google-Suche: Normalisierung.
     
  3. Sophus

    Sophus Datenbank-Guru

    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.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  5. Sophus

    Sophus Datenbank-Guru

    Was genau möchtest du denn wissen? Vielleicht hilft mir das ein wenig weiter.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Lies noch mal. Was ich schrieb.
     
  7. Sophus

    Sophus Datenbank-Guru

    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.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Nein. Nur psql.
     
  9. Sophus

    Sophus Datenbank-Guru

    Dann muss ich mein Ergebnis als Bild veröffentlichen. Wird ein großes Bild.
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Nein. Ein Bild kann man nicht in einer DB ausführen.
     
  11. Distrilec

    Distrilec Datenbank-Guru

    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... :)
     
    akretschmer gefällt das.
  12. Sophus

    Sophus Datenbank-Guru

    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.
     
  13. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  14. Sophus

    Sophus Datenbank-Guru

    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.
     
  15. Distrilec

    Distrilec Datenbank-Guru

    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? :)
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden