Hilfe bei Primär/Fremdschlüssel

Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Kann mir jemand sagen, was bei diesen Tabellen die Primär und Fremdschlüssel sind

Bitte anstatt Bilder lieber den Code direkt hier reinwerfen, dazu passende Code-Tags nutzen. Bei Fragen: die Online-Hilfe fragen.

Primary Keys sind Spalten, die jeden Datensatz eindeutig kennzeichnen. Eine personalnummer z.B. oder eine Auftragsnummer. Fremdschlüssel sind Felder, die faktisch einen Zeiger auf eine andere Tabelle darstellen, bei Dir möglicherweise in der dritten Tabelle die Spalten Kundennr und Persnr. Dazu muß man aber bei der Tabellendefinition das auch sagen, daß es ein Fremdschlüssel ist. Nachfolgend eine Tabelle Kunden und 2 Tabellen für Aufträge, einmal falsch und einmal richtig:

Code:
test=# create table kunden (nr int primary key, name text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "kunden_pkey" for table "kunden"
CREATE TABLE
Time: 31,994 ms
test=*# create table auftraege_falsch (ab_nr int primary key, kunde int );
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "auftraege_falsch_pkey" for table "auftraege_falsch"
CREATE TABLE
Time: 24,383 ms
test=*# create table auftraege_richtig (ab_nr int primary key, kunde int references kunden);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "auftraege_richtig_pkey" for table "auftraege_richtig"
CREATE TABLE
Time: 28,668 ms
test=*#

Um das nun mal zu zeigen, die Tabelle kunden hat keine Einträge:

Code:
test=*# insert into auftraege_falsch values (1, 1);
INSERT 0 1
Time: 0,519 ms
test=*# insert into auftraege_richtig values (1, 1);
ERROR:  insert or update on table "auftraege_richtig" violates foreign key constraint "auftraege_richtig_kunde_fkey"
DETAIL:  Key (kunde)=(1) is not present in table "kunden".
Time: 10,151 ms


Fragen? Fragen!


Andreas
 
Oben