Fork me on GitHub

Web Development

Ein Lehrbuch für das Informatik oder Medien-Informatik Studium.

“Constraints” sind absichtliche Einschränkungn die man den Daten auferlegen kann.

Ein Constraint kennen Sie schon: Wenn man einen Primäreschlüssel definiert, dann soll dieser ja jeden Datensatz eindeutig identifizieren. Das heisst: der Primärschlüssel muss eindeutig sein. Das ist ein unique constraint.

sql> CREATE TABLE departments ( dep_name VARCHAR(20) PRIMARY KEY, … );
completed in 23ms
sql> INSERT INTO departments VALUES('Marketing')
1 row(s) affected in 16ms
sql> INSERT INTO departments VALUES('Engineering')
1 row(s) affected in 7ms
sql> INSERT INTO departments VALUES('Marketing')
[23505] ERROR: 
  duplicate key value violates unique constraint "departments_pkey"
  Detail: Key (name)=(Marketing) already exists.

Ein unique constraint kann man auch einer anderen Spalte, oder einer kombination von Spalten auferlegen.

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(20) UNIQUE,
  email VARCHAR(220) UNIQUE
);

Referenzielle Integrität

Bei einer Beziehung macht es Sinn, die existenz des Fremdschlüssels in der anderen Tabelle mit einem foreign key constraint sicher zu stellen.

CREATE TABLE departments (
  dep_id SERIAL PRIMARY KEY,
  dep_name VARCHAR(20)
);
CREATE TABLE employees (
  name VARCHAR(20),
  dep_id integer NULL REFERENCES departments(dep_id)
);
INSERT INTO employees VALUES('Brigitte Jellinek', 99)
[23503] ERROR: insert or update on table "employees" 
  violates foreign key constraint "employees_dep_id_fkey"
  Detail: Key (dep_id)=(99) is not present in table "departments".