Relationale Datenbank am Beispiel
Willemers Informatik-Ecke
Das hier besprochene Beispiel zeigt anhand der Datenbank PostgreSQL, den Einstieg in den Umgang mit einer relationalen Datenbank.

In dem Beispiel werden drei Tabellen verwendet, eine für den Gast, eine für die Wohnung und die Tabelle Buchung bildet eine Relation zwischen beiden.

PostgreSQL installieren

Die Datenbank PostgreSQL lässt sich kostenfrei aus dem Internet herunterladen. i

Datenbank und Benutzer anlegen

In der Kommandozeile von PostgreSQL wird eine Datenbank und ein Benutzer für diese Datenbank angelegt. Erneutes Anmelden über die Konsole von Linux:
psql -h localhost -d fewo -U fewoadmin -W
Tabelle gast anlegen als fewoadmin
create table gast (
   id bigserial not null primary key,
   name varchar,
   adresse varchar,
   telefon varchar
);

Die SQL-Befehle

Die Kommandos, um die Tabelle zu bearbeiten: Tabelle mit Referenz Tabelle wohnung Die Tabelle wohnung hat neben Zeichenkette auch Fließkomma- und ganzzahlige Werte.
create table wohnung (
   id bigserial not null primary key,
   bez varchar,
   preis float,
   qm integer
);
Ein paar Werte hinein:
insert into wohnung (bez,preis,qm) values ('DG links',50.0,50);
insert into wohnung (bez,preis,qm) values ('DG rechts',50.0,50);
insert into wohnung (bez,preis,qm) values ('EG rechts',65.0,70);
insert into wohnung (bez,preis,qm) values ('EG links',75.0,80);

Buchungstabelle mit doppelter Referenz

Die Buchung nimmt nun den Gast und die Wohnung über dessen id auf.
create table buchung (
   id bigserial not null primary key,
   von date, bis date,
   gastid bigint references gast(id),
   wohnid bigint references wohnung(id),
   preis float,
   anmerkung varchar
);
Wozu dann noch einmal der Preis? Es ist der Preis, der bei der Buchung vereinbart wurde. Das kann ein Sonderangebot sein. Außerdem sollte sich der Preis der Buchung nicht bei jeder Preiserhöhung der Wohnung verteuern.

Buchung erfassen

Tatsächlich kann eine Buchung ohne Wohnung angelegt werden. Sollte das verhindert werden, müssten die Fremdschlüssel in der Tabellendefinition auf not null geändert werden.
insert into buchung (gastid,anmerkung) values (29,'doof');
Der folgende Eintrag belegt Gast Nummer 30 mit der Wohnung Nummer 2 zu einem Preis von 20.0.
insert into buchung (gastid,wohnid,preis) values(30,2,20.0);

Datumsfeld

Das Datumsfeld wird normalerweise durch eine Zeichenkette übergeben, die zum Datumstyp konvertiert wird. Das Format des Strings ist 'YYYY-MM-DD'.
insert into buchung (gastid,wohnid,preis,von)
                             values(30,2,20.0,'2020-08-12');
Der Typ DATE kann aber auch die Uhrzeit aufnehmen. Um ein Datum mit Uhrzeit anzugeben, verwenden Sie das Format 'YYYY-MM-DD HH:MM:SS'.

Buchung auslesen

Das Auslesen der Tabelle buchung zeigt nur die IDs von Gast und Wohnung.
select * from buchung;
Interessanter wäre es, für den Gast den Namen und die Wohnung die Bezeichnung anzuzeigen. Dazu werden die Tabellen miteinander gekoppelt.
select name, bez,buchung.preis from buchung,gast,wohnung
        where gast.id=gastid AND wohnung.id=wohnid;