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

Hilfstabelle für m:n

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von drdownload, 19 September 2013.

  1. drdownload

    drdownload Neuer Benutzer

    Ich habe die unterschiedlichen zueinander verknüpften Tabellen, Person, Position und Organisation. Jede dieser Entities kann eine oder mehrere Email-Adresssen haben. Die Email-Adressen sollen in einer einzigen Tabelle gespeichert werden.

    Ohne Hilfstabelle werde ich nicht auskommen, aber derzeit habe ich ein Brett vor dem Kopf wie die aussehen könnte (vielleicht ist es auch zu spät heute)

    Email: (Email-UID, Email, Type)
    Person: (...)
    Position (...)
    Organisation (...)
     
  2. ukulele

    ukulele Datenbank-Guru

    Ich habe im wesentlichen die selbe Struktur abgebildet. Ich gehe mal davon aus das sich die Entitäten keine E-Mail Adresse teilen, also jede Entitäten eine 1:n Beziehung zu Email hat. Es geht auch anders aber so sinnvoll dürfte das nicht sein.

    Bei Position würde ich auf eine direkte Beziehung zu Email verzichten. Denn eine Person kann in einer Organisation sicherlich mehrere Positionen einnehmen, wird aber in 99% der Fälle nur eine Emailadresse innerhalb der Organisation haben bzw. verwenden und nach Außen kommunizieren.

    Der einfachste Weg ist definitiv in Email Fremdschlüssel für Personen und Organisation anzulegen. Sind beide vergeben handelt es sich um die Emailadresse der Person innerhalb der Organisation. Sie kann beliebig viele Adressen innerhalb der Organisation haben aber sie wären nicht an eine spezielle Position gebunden. Mit einem 3ten Fremdschlüssel könnte man aber auch das noch abbilden. Nur muss man sich dann irgendwann Fragen ob es nicht "richtiger" wäre, mehrere Email Adresstabellen zu führen denn dann würde man viele Fremdschlüssel führen von denen meist (bzw. immer, je nach Datenmodell) nur einer genutzt wird.

    PS: Wenn du es wirklich als m:n Beziehung abbilden willst brauchst du für jede der 2 bzw. 3 Entitäten eine eigene Zwischentabelle.
     
  3. akretschmer

    akretschmer Datenbank-Guru


    Was spricht gegen dies:

    Code:
    test=# create table emails(id serial primary key, mail text);
    NOTICE:  CREATE TABLE will create implicit sequence "emails_id_seq" for serial column "emails.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "emails_pkey" for table "emails"
    CREATE TABLE
    Time: 24,478 ms
    test=*# create table t_orga (id serial primary key, name text);
    NOTICE:  CREATE TABLE will create implicit sequence "t_orga_id_seq" for serial column "t_orga.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t_orga_pkey" for table "t_orga"
    CREATE TABLE
    Time: 22,516 ms
    test=*# create table t_pos (id serial primary key, name text);
    NOTICE:  CREATE TABLE will create implicit sequence "t_pos_id_seq" for serial column "t_pos.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t_pos_pkey" for table "t_pos"
    CREATE TABLE
    Time: 6,478 ms
    test=*# create table t_pers (id serial primary key, name text);
    NOTICE:  CREATE TABLE will create implicit sequence "t_pers_id_seq" for serial column "t_pers.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t_pers_pkey" for table "t_pers"
    CREATE TABLE
    Time: 11,997 ms
    test=*# create table t_pers_mail(pers_id int references t_pers, mail int references emails, primary key(pers_id, mail));
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t_pers_mail_pkey" for table "t_pers_mail"
    CREATE TABLE
    Time: 121,040 ms
    [/code
    
    Analog zur letzten Tabelle noch t_pos_mail und t_orga_mail. Du wirst also 3 'Hilfstabellen' brauchen, kannst aber alles zuordnen. Eine Mailadresse kann so also auch zu 2 oder 3 Gebieten gehören.
    
    Syntax ist PostgreSQL, wie üblich ;-)
     

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