SQL Foreign Key bei diesen 2 Tabellen

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
621
Hallo,

Ich habe zwei Tabellen. Die 1. "Entries" mit den Spalten "id" (PK und AI) "sowie "Level". Dann die 2. "Levels" mit den Spalten "level_id" (PK und AI) und "levelname".

Jetzt möchte ich bei Entries die Spalte Level als FK hinterlegen, doch das geht ja nicht, da level_id nicht identisch formatiert ist wegen dem AI... Wie löse ich das Problem ? Muss ich bei "Levels" auch eine id Spalte machen mit AI und dann "level_id" ohne AI, so dass id und level_id die gleiche Zahl immer sind ?
 
AI = Auto Increment?
Wo soll denn da dann ein Problem sein?

Levels als FK mit Auto-Increment ergibt doch wohl keinen Sinn, oder?
 
  • Gefällt mir
Reaktionen: Raijin und madmax2010
Hm? Natürlich geht das, auto_increment hat nix mit dem Format der Spalte zu tun, soweit es PK/FK Beziehungen angeht.

Die FK Spalte kann niemals AI sein. NULL ja, AI nein.
Zwei Möglichkeiten.
1. Du weißt die Levels vorher schon.
Dann erst die Level-Tabelle füllen und für die Entries per JOIN den Wert level.id über seinen Namen beschaffen und in entries.level_id eintragen.

2. Du weißt den jeweiligen Level vorher noch nicht, dh du schreibst bei Bedarf den Level erst in die level-Tabelle rein. Sicherlich per UPSERT oder sowas.
In diesem Fall mußt du das Ganze in eine Transaktion kapseln und dann erst den Level einfügen (on conflict do nothing) dir die zugehörige level.ID holen und die dann in entries.level_id stecken. Danach commit, außer es gab Fehler.

Es ist "empfehlenswert", unter solchen Umständen sein Schema um
SQL:
ALTER TABLE levels ADD CONSTRAINT uq_levelname UNIQUE ON levels(name);
zu erweitern, damit man sicher sein kann, für einen konkreten Level auch wirklich eine konkrete ID zu bekommen.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Raijin und tollertyp
Zurück
Oben