Hilfstabelle für m:n

drdownload

Neuer Benutzer
Beiträge
1
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 (...)
 
Werbung:
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.
 
Werbung:
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 (...)


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 ;-)
 
Zurück
Oben