Wieso funktioniert meine Base-Datenbank mit einem aus 2 Attributen zusammengesetzten Primärschlüssel nicht?
Also, ich mache einen ITA Bildungsgang und muss in Datenbanken eine Base-Datenbank erstellen.
Man nehme 3 Tabellen. Einmal Schülerliste, dann Notenliste und Fächerliste In Schülerliste ist Schüler_ID der Primärschlüssel, in Notenliste ist es ein zusammengesetzter Schlüssel aus Schüler_ID und Fachkürzel und in Fächerliste ist es Fachkürzel.
Jetzt will ich Beziehungen zwischen den Tabellen erstelle, jedoch funktioniert das nicht. Bei der Beziehung zwischen Fachkürzel in Fächerliste und Fachkürzel in Notenliste hat scheinbar keine Kardinalität und von Schüler_ID in Notenliste zu Schüler_ID in Schülerliste will er nicht mal zulassen
Bilder dazu sind angehängt.
Was soll ich tun?


2 Antworten
Du musst als Fremdschlüssel einen Primärschlüssel einer anderen Tabelle angeben. Wenn diese andere Tabelle, auf die Du Dich beziehst, einen Verbundschlüssel hat, musst Du als Fremdschlüssel auch diesen Verbundschlüssel angeben und nicht nur einen Teil davon, wie Du es gemacht hast. Syntaktisch wird ein Verbundschlüssel in runden Klammern mit den durch Komma getrennten Einzelfeldern angegeben.
Beispiele dazu:
PRIMARY KEY Id
PRIMARY KEY (Id, Fachkürzel)
FOREIGN KEY Id
FOREIGN KEY (Id, Fachkürzel)
Wenn Du für eine Abfrage eine teilweise Verknüpfung brauchst, lass den Fremdschlüssel weg und verknüpfe mit WHERE. Das geht immer und da wird auch immer so verknüpft wie man es hingeschrieben hat.
Hast Du wirklich einen Verbundschlüssel als Primärschlüssel? Oder denkste Dir das nur? Ich habe nämlich Zweifel, ob Du das hinbekommen hast.
Irgendwie geht das jetzt, aufeinmal. Da kann doch etwas nicht stimmen
Von welchem Datentyp ist denn Schüler_ID in Notenliste und Schüler_ID in Schülerliste?
Einfach so? Dann war das Wohl n bug von libre Office xD. Trotzdem würde ich keine numerics als primary key und foreign key Verknüpfungen verwenden.
Und warum numeric ich hätte da einfach nen integer mit autoincrement vergeben. Numeric sind gleitpunktzahlen.