![]() |
|||
| HSG |
|
Wir wollen eine Mädchen-Tabelle maedchen und eine Jungen-Tabelle jungen erstellen, um daran Beziehungen zwischen Tabellen zu testen. Da zwei Mädchen den gleichen Namen haben können, dient die Spalte (Attribut, Feld) nr als sogenannter Primärschlüssel.
Quelle: wikipedia
| nr | name | jnr |
|---|---|---|
| 1 | Lisa | null |
| 2 | Eva | null |
| 3 | Maria | null |
| 4 | Lisa | null |
CREATE TABLE maedchen (nr int, name varchar(30), jnr int);
Für die Spalten nr und jnr wurde der Datentyp int (ganze Zahl), für die Spalte name varchar(30) (String der Länge bis zu 30) gewählt.
Mit Anweisungen der Art
INSERT INTO maedchen (nr,name) VALUES (1,'Lisa');
kann man die Tabelle füllen. Man kann auch völlig identische Datensätze eingeben, was dem Sinn eines Primärschlüssels widerspricht. Man kann einen Primärschlüssel auch nachträglich hinzufügen.
SQL-Fehler: ERROR: could not create unique index "maedchen_pkey" DETAIL: Table contains duplicated values. In der Anweisung: alter table maedchen add primary key (nr);
Ist die bestehende Tabelle nicht in Ordnung, so bekommt man bei postgres obige Meldung. Ist die Tabelle in Ordnung und hat man einen Primärschlüssel definiert, so quittiert das System den Versuch, einen Datensatz doppelt einzufügen, so:
SQL-Fehler: ERROR: duplicate key value violates unique constraint "maedchen_pkey" In der Anweisung: INSERT INTO maedchen (nr,name) VALUES (1,'Lisa');
Beim Erstellen der Jungentabelle machen wir das besser und bauen den Constraint gleich ein.
CREATE TABLE jungen (nr int primary key, name varchar(30), jnr int);