Tabelle Telefon für zwei Tabelle

Paul66

Neuer Benutzer
Beiträge
4
Ich habe eine Tabelle Kunde und eine Tabelle Kontakte. Die Tabelle Kontakte steht in einer M zu N Beziehung mit der Tabelle Kunde. Jeder Kunde und auch jeder Kontakt können mehrere Telefonnummern haben. Kann ich für beide Tabellen (Kunde, Kontakt) eine Tabelle Telefon erzeugen oder brauche ich zwei Tabellen/Telefon. Wie geht das?
 
Werbung:
Ich habe eine Tabelle Kunde und eine Tabelle Kontakte.

So?

Code:
postgres=# create table kunde(id int generated always as identity primary key, name text);
CREATE TABLE
postgres=# create table kontakte(id int generated always as identity primary key, name text);
CREATE TABLE
postgres=#


Kan ein Kunde auch Kontakt sein? Kann ein Kontakt auch Kunde sein? Falls 2 mal ja: warum 2 Tabellen? Oder sehen diese ganz anders aus?

Die Tabelle Kontakte steht in einer M zu N Beziehung mit der Tabelle Kunde.

Wie?


Jeder Kunde und auch jeder Kontakt können mehrere Telefonnummern haben. Kann ich für beide Tabellen (Kunde, Kontakt) eine Tabelle Telefon erzeugen oder brauche ich zwei Tabellen/Telefon. Wie geht das?

Mit den oben zeigten 2 Tabellen wohl eher nicht mit einer Tabelle, da nicht klar ist, worauf sich ein Fremdschlüssel beziehen soll.
 
Also Tabelle Kunde kann mehrere Beziehungen zur Tabelle Kontakte haben. Also z.B Kunde A zu Kontakt B, C und D.
Der Kontakt B kann Beziehungen zu verschiedenen Kunden unterhalten. Daher handelt es sich um eine M:N Beziehung. Nun können Kunde A und Kunde B z.B jeweils zwei Telefonnummern besitzen. Genauso können die Kontakte B und C usw. jeweils mehr als eine Telefonnummer besitzen. Die Telefonnummern von Kunde und Kontakte würde ich gerne in eine Tabelle packen.
Der Primärschlüssel wäre kein Problem. Per Fremdschlüssel müsste ich entweder zur Tabelle Kunde oder Kontakte eine Beziehung erstellen. Falls es eine Lösung gibt, bitte per Tabelle oder ERM.
 
Code:
postgres=# create table kunden (id int primary key, name text);
CREATE TABLE
postgres=# create table kontakte (id int primary key, name text);
CREATE TABLE
postgres=# create table telefon(kunde int references kunden, kontakte int references kontakte, nummer text);
CREATE TABLE
postgres=# insert into kunden values (1, 'kunde1');
INSERT 0 1
postgres=# insert into kontakte values (1, 'kontakt1');
INSERT 0 1
postgres=# insert into telefon values (1, null, '123');
INSERT 0 1
postgres=# insert into telefon values (null, 1, '456');
INSERT 0 1
postgres=# create table telefon(kunde int references kunden, kontakte int references kontakte, nummer text, check(case when kunde is null then 1 else 0 end + case when kontakte is null then 1 else 0 end = 1));
CREATE TABLE
postgres=# insert into telefon values (1, null, '123');
INSERT 0 1
postgres=# insert into telefon values (null, 1, '456');
INSERT 0 1
postgres=# insert into telefon values (null, null, '456');
ERROR:  new row for relation "telefon" violates check constraint "telefon_check"
DETAIL:  Failing row contains (null, null, 456).
postgres=# insert into telefon values (1, 1, '456');
ERROR:  new row for relation "telefon" violates check constraint "telefon_check"
DETAIL:  Failing row contains (1, 1, 456).
postgres=#

Leider hast Du meine Fragen in #2 nicht beantwortet.
 
Welche Sprache verwendest Du? Ich will die Tabellen zur Zeit in Access umsetzen. Meine Tabellen könnte ich vielleicht so besser erklären. Zwei Tabellen Hersteller und Lieferant. Der Hersteller greift auf verschiedene Lieferanten zu und der Lieferant arbeitet mit mehreren Herstellern zusammen. Diese beiden Tabellen könnte man auch nicht in eine Tabelle packen?
 
Werbung:
Zurück
Oben