Weiter Zurück Inhalt

1. Referenzielle Integrität

In der Welt relationaler Datenbanken haben wir es mit Objekten zu tun, die untereinander in Beziehungen, sogenannten Relationen, stehen.

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 16.

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 -- Diese Tabelle enthält unsere Stammdaten, also die Daten der Kontoinhaber
008 --
009 
010 create table kunden (
011         kontonr bigint default nextval('seq_kontonr') not null primary key,
012         name    varchar not null,
013         plz     char(5) not null,
014         ort     varchar not null
015 );
016 
017 --
018 -- Diese Tabelle enthält die einzelnen Buchungen.
019 --
020 
021 create table buchungen (
022         kontonr	bigint references kunden not null,
023         ts	timestamptz default now(),
024         typ     char(1),
025         wert    decimal(10,2),
026         text    varchar
027 );
028 
029 --
030 -- Indexe sind ein wichtiges Mittel zur Leistungssteigerung bei Abfragen der DB
031 -- sie beschleunigen erheblich Such- und Sortierfunktionen
032 --
033 
034 create unique index idx_buchungen on buchungen(kontonr,ts);
035 create index idx_buchungen_kontonr on buchungen(kontonr);
036 create index idx_buchungen_ts on buchungen(ts);
037 
038 
Download create.sql

Links

Foreign keys


Weiter Zurück Inhalt