Weiter Zurück Inhalt

1. Referenzielle Integrität

In der Welt relationaler Datenbanken haben wir es mit Objekten zu tun, die untereinander in Beziehungen stehen und auf der Relationenalgebra beruhen.

In unserem Beispiel wollen wir die Stammdaten unserer Bank (unsere Kunden mit deren Anschrift etc.) von den Bewegungsdaten (Buchungen) trennen. Wir werden also 2 Tabellen anlegen und dabei gleich sagen, daß zu jedem Buchungssatz in der Buchungstabelle zwingend ein Datensatz in der Stammdatentabelle gehören muß. Dies wird als referentielle Integrität bezeichnet und garantiert uns die logische Korrektheit der Daten in unserer Datenbank.

Die Verknüpfung der beiden Tabellen erfolgt in Zeile 27.

001 --
002 -- Die Kontonummern sollen automatisch vergeben werden und ab 100000 anfangen
003 --
004 CREATE SEQUENCE seq_kontonr START WITH 100000 INCREMENT BY 1;
005 
006 
007 --
008 -- Diese Tabelle enthält unsere Stammdaten, also die Daten der Kontoinhaber
009 --
010 
011 CREATE TABLE kunden (
012         kontonr      BIGINT       NOT NULL
013                                   PRIMARY KEY
014                                   DEFAULT NEXTVAL('seq_kontonr'),
015         kundenname   VARCHAR      NOT NULL,
016         plz          CHAR(5)      NOT NULL,
017         ort          VARCHAR      NOT NULL
018 );
019 
020 
021 --
022 -- Diese Tabelle enthält die einzelnen Buchungen.
023 --
024 
025 CREATE TABLE buchungen (
026         kontonr      BIGINT       NOT NULL
027                                   REFERENCES kunden(kontonr),
028         ts           TIMESTAMPTZ  DEFAULT NOW(),
029         typ          CHAR(1),
030         wert         DECIMAL(10,2),
031         text         VARCHAR
032 );
033 
034 
035 --
036 -- Indexe sind ein wichtiges Mittel zur Leistungssteigerung bei Abfragen der DB
037 -- sie beschleunigen erheblich Such- und Sortierfunktionen
038 --
039 
040 CREATE UNIQUE INDEX idx_buchungen ON buchungen(kontonr,ts);
041 CREATE INDEX idx_buchungen_kontonr ON buchungen(kontonr);
042 CREATE INDEX idx_buchungen_ts ON buchungen(ts);
043 
044 
045 -- Demo Daten:
046 INSERT INTO kunden (kundenname, plz, ort) VALUES ('Kunde 1', 12345, 'Ort 1');
047 INSERT INTO kunden (kundenname, plz, ort) VALUES ('Kunde 2', 23456, 'Ort 2');
048 INSERT INTO kunden (kundenname, plz, ort) VALUES ('Kunde 3', 34567, 'Ort 3');
049 INSERT INTO kunden (kundenname, plz, ort) VALUES ('Kunde 4', 45678, 'Ort 4');
050 INSERT INTO kunden (kundenname, plz, ort) VALUES ('Kunde 5', 56789, 'Ort 5');
Download create.sql

Links

CREATE TABLE CREATE INDEX Foreign keys


Weiter Zurück Inhalt