Zwischentabelle erstellen? m zu n Beziehung

Hallo,

Gehe ich richtig vor?

Ich erstelle mir 2 Tabellen. Diese Tabellen haben eine “m zu n” Beziehung.
Somit erstelle ich eine Zwischentabelle mit 2 gleichnamigen Spalten, wie man sie in Tabelle A und B findet.

Tabelle A
A_ID : serial NOT NULL

Tabelle B
B_ID : serial NOT NULL

Tabelle AB (zur Veranschaulichung noch ein AB_ vor der ID)
AB_A_ID : integer (muss es hier auch NOT NULL sein? serial ja auch nicht oder?)
AB_B_ID : integer (muss es hier auch NOT NULL sein? serial ja auch nicht oder?)

Dann gehe ich auch Constraints, Fremdschlüssel hinzufügen und sage, dass die lokale Spalte AB_A_ID auf A_ID der Tabelle A referenziert werden soll.
Das mache ich dann nochmal mit lokale Spalte AB_B_ID auf B_ID der Tabelle B.

Das sind doch dann 2 Fremdschlüssel? Bei einer m zu n Beziehung kann man doch ein Primary Key aus 2 Foreign Keys zusammsetzen. Aber PGAdmin sagt mir immer, dass ich ein Primary Key erstellen soll…

Struktur stimmt, aber da beide IDs auf bereits existierende IDs aus den anderen Tabellen referenzieren ist serial vollkommen überflüssig bzw. sogar falsch (weil hier ja nie IDs generiert werden müssen)


Dann gehe ich auch Constraints, Fremdschlüssel hinzufügen und sage, dass die lokale Spalte AB_A_ID auf A_ID der Tabelle A referenziert werden soll.
Das mache ich dann nochmal mit lokale Spalte AB_B_ID auf B_ID der Tabelle B.

Korrekt.


Das sind doch dann 2 Fremdschlüssel?

Ja und?


Bei einer m zu n Beziehung kann man doch ein Primary Key aus 2 Foreign Keys zusammsetzen.

Ich glaube Du verwechselst hier foreign key und primary key. Jede Spalte der Tabelle AB hat einen Foreign Key zu der entsprechenden anderen Tabelle. Beide spalten zusammen bilden den Primary Key der Tabelle AB.
Der Primary Key setzt sich aus Spalten zusammen, nicht aus “foreign keys”.

Also ist es richtig mit 2 Fremdschlüsseln zu arbeiten und ich kann die pgAdmin Meldung, dass ich doch noch einen Primary Key erstellen soll ignorieren?

Ja

und ich kann die pgAdmin Meldung, dass ich doch noch einen Primary Key erstellen soll ignorieren?

Nein.
Wenn Du sicherstellen willst, dass eine Zuweisung nur einmal erfolgt, dann brauchst Du einen Primary Key über (AB_A_ID, AB_B_ID).