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

Hilfe bei Datenbankmodellierung

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von Behaelter, 22 Februar 2013.

  1. Behaelter

    Behaelter Neuer Benutzer

    Hallo allerseits,
    Ich bräuchte dringend Hilfe bei der Erweiterung einer Datenbank.
    Mir geht es aber erstmal nur ums Modell.
    Anbei erstmal das ER-Diagramm der Datenbank die ich bisher habe.
    Dazu erstmal eine Erklärung, weil die Modellierung vlt da nicht ganz sauber ist:
    Gehoert ein Nutzer zu einer Organisation, so gehoert er auch automatisch zu allen Unterorganisationen. Um das zu Verwirklichen, habe ich natürlich nicht alle Beziehungen von Nutzer und Organisation eingefügt in der Datenbak abgespeichert. Das war ja bisher noch nicht nötig.
    Jetzt würde ich gerne noch ein neues Feature hinzufügen:
    Jeder Nutzer, der in einer Organisation ist, soll auch Rechte in dieser Organisation haben und allen Unterorganisationen. Aber in den Unterorganisationen sollen es evtl. andere Rechte sein als in der eigentlichen Organisation.
    Das Problem ist also: Erst habe ich Rechte als Attribut der Relation vin Nutzer zu Organisation modelliert. Um dann zumerken, dass ich so natürlich keine Rechte zu den Untergruppen abgespeichert habe. Vlt müsste ich jetzt doch jede einzelne Bezeihung zwischen Nutzer und Organisation abspeichern. Was aber auch doof wäre, wegen der Abfrage...
    Ich hoffe einer von euch hatt eine gute Lösung, oder kann mir eine schon von mir angesprochene empfehlen...
    lg Behaelter
     

    Anhänge:

  2. akretschmer

    akretschmer Datenbank-Guru

    Also mußt definieren, wie die Suborgs zu den Organisationen gehören (sub_org - Table) und welche Rechte welcher Nutzer in welcher Suborg hat (nutzer_rechte).

    Code:
    test=# create table nutzer (id serial primary key, name text, email text);
    NOTICE:  CREATE TABLE will create implicit sequence "nutzer_id_seq" for serial column "nutzer.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "nutzer_pkey" for table "nutzer"
    CREATE TABLE
    Time: 427,705 ms
    test=*# create table organisation (id serial primary key, name text);
    NOTICE:  CREATE TABLE will create implicit sequence "organisation_id_seq" for serial column "organisation.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "organisation_pkey" for table "organisation"
    CREATE TABLE
    Time: 18,956 ms
    test=*# create table sub_org(id serial primary key, org int references organisation, suborg_name text);
    NOTICE:  CREATE TABLE will create implicit sequence "sub_org_id_seq" for serial column "sub_org.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "sub_org_pkey" for table "sub_org"
    CREATE TABLE
    Time: 52,380 ms
    test=*# create table nutzer_rechte (id serial primary key, nutzer int references nutzer, sub_org int references sub_org, rechte text);
    NOTICE:  CREATE TABLE will create implicit sequence "nutzer_rechte_id_seq" for serial column "nutzer_rechte.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "nutzer_rechte_pkey" for table "nutzer_rechte"
    CREATE TABLE
    Time: 81,296 ms
    
    Vielleicht so? Als Grobansatz. Sicherlich sind die Rechte dann nicht als Text definiert, aber das ist ja nicht die Frage jetzt.


    Andreas
     
  3. Behaelter

    Behaelter Neuer Benutzer

    sry, dass ich so lange nicht geantwortet habe. Bin umgezogen und hatte noch kein internet ... :-(
    ich hab aber trotzdem noch ne frage zu deinem Vorschlag. Ein eintrag in der table "nutzer_rechte" wuerde dann sowohl eine Relation zwischen einem nutzer und einer organisation darstellen, als auch die rechte speichern. Wuerde das nicht in etwa diesem hier gleich kommen:
    Und des kommt mir leider sehr redundant vor. Obwohl schon impliziert ist, dass ich eine Relation zu einer sub_org habe, wenn ich zur entsprechenden oberorganisation schon eine relation habe. Aber vlt ist es doch die beste Loesung. Verbraucht halt unnoetig speichplatz und ist irgendwie haesslich.
    Warum machst du eigentlich eine org und eine sub_org als eigene table. Des ist irgendwie auch doof. Erstens sollst ja ewig geschachtelt sein und zweitens kann man dann nicht so einfach eine org zu einer sub_org einer anderen machen. Ich hoffe du verstehtst jetzt mein problem. Danke schonmal fuer die Hilfe.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Das bezog sich Deiner Forderung, daß je Nutzer und Sub-Org spezifische Rechte sein können.
    da fehlt aber wohl noch eine Zuordnung Nutzer->Organisation, denn ein Nutzer gehört ja wohl nicht zu ALLEN Organisationen.

    Du hast Nutzer und Organisationen. Nicht jeder Nutzer ist in allen Organisationen. Ist er in einer, so ist er auch in allen Unter-Orgs. So hab ich Dich verstanden. Nur hat er da spezifische Rechte. Also muß man Nutzer und Organisation darstellen und Nutzer und Unter-Org und da die Rechte. So hab ich es zumindest verstanden.

    Zeig wie es besser geht.

    Jedenfalls denke ich, Du mußt 2 Dinge trennen:

    • die Darstellung der Organisationsform. Im ersten Post war da nur eine Tiefe von 2 Ebenen, scheinbar willst Du aber beliebig tief verschachteln.
    • die Abbildung der Rechte eines Users auf einen beliebigen Knoten dieser Organisationsform

    Das erfordert dann doch einige Tabellen und Verbindungen dazwischen. Da scheiden wohl schon mal mittelalterliche MyISAM-Konstrukte aus ...,
    damit die DB auch referrentielle Constraints erzwingen kann.

    Davon war bisher keine Rede. Es gab bisher nur Organisationen und UnterOrganisationen. Aber keine UnterUnterOrganisationen und auch keine UnterUnterUnterOrganisationen.
    In beliebiger Tiefe. Wenn Du das willst, mußt Du anders rangehen.

    Wie man das in PG machen könnte, hab ich hier mal gezeigt: http://datenbankforum.com/threads/select-abfrage-kategoriebaum.1007/ . Oder http://dcparris.net/2013/02/24/using-ltree-hierarchical-postgresql/ , hab ich aber noch nicht selber mit gespielt. Auf alle Fälle werden solche rekursiven Dinge a Stück weit anspruchsvoller und hängen dann auch stark von dem ab, was das verwendete DB-System bietet.


    Andreas
     
  5. akretschmer

    akretschmer Datenbank-Guru


    Einzugsfete ist wann und wo?

    Andreas
     
  6. Behaelter

    Behaelter Neuer Benutzer

    Hey Danke für deine schnelle Antwort.
    Einzugsfete ist in Erlangen... wann weiß ich noch nicht. Also zurück zum eigentlichen Problem.
    Ich hab mich da wohl nicht klar ausgedrückt. Die Verschachtelungstiefe ist nicht festgelegt. D.h. man soll tatsächlich erstmal so viele Untergruppen (in der Tiefe) anlegen können wie man will. Natürlich auch in der Breite. Dazu kommt dann noch die ganze Geschichte mit den Rechten.
    Würdich gerne. Aber ich hab keine Ahnung. Desshalb frag ich ja.

    Also durch organisation und Sub_organisation? Kann man da nicht einfach nur eine table "organisation" machen und eine zweite "untergeordnet", wo man jeweils eine organisation einer anderen unterordnen kann?

    Also vlt doch wieder so wie angedacht einfach durch noch eine Table "nutzer_rechte" und zu jeden nutzer die enprechenden (organisationen/sub_organisationen)(was ja dann des selbe wäre evtl.) + rechte

    lg Behaelter
     
Die Seite wird geladen...

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