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