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
- Nach dem Download starten Sie das Installerprogramm.
- Festlegen des Administrators postgres und seines Passworts.
- Unter Linux gibt es einen eigenen Linux-User postgres.
Einstieg unter Linux:
sudo -s # Anmelden als root, manchmal auch: su - su - postgres # Wechsel zu Benutzer postgres psql # Start der PostgreSQL SQL-Kommondozeile
Datenbank und Benutzer anlegen
In der Kommandozeile von PostgreSQL wird eine Datenbank und ein Benutzer für diese Datenbank angelegt.- Datenbank-Benutzer für eine eigene Datenbank anlegen
create user fewoadmin password 'geheim' login; create database fewo; grant all on database fewo to fewoadmin;
- Damit gibt es einen Datenbankuser fewoadmin und eine Datenbank fewo, die ihm gehört.
- Verlasse Postgres: \q (Mac-Tastatur: Alt-Shift-7)
- Abmelden und in Zukunft nur auf dieser Datenbank und ihrem Benutzer arbeiten. Arbeiten Sie nie als Administrator!
psql -h localhost -d fewo -U fewoadmin -WTabelle gast anlegen als fewoadmin
create table gast ( id bigserial not null primary key, name varchar, adresse varchar, telefon varchar );
- Spaltenname vor dem Typ. varchar ist eine Zeichenkette.
- Das Feld id
- ist ein sogenannter Autoinkrement: bigserial
- darf nicht leer sein: not null
- muss für die Tabelle eindeutig sein: primary key
- Tabellenstruktur anschauen: \d gast
Die SQL-Befehle
- SELECT felder FROM table WHERE bedingung;
- INSERT INTO table (felder) VALUES (werte);
- UPDATE table SET feld=wert, f=w WHERE bedingung;
- DELETE FROM table WHERE bedingung;
- Einfügen:
insert into gast (name,adresse,telefon) values ('Donald Duck','Holzweg','0815'); insert into gast (name,adresse,telefon) values ('Bettman','Gotham','112'); insert into gast (name,adresse,telefon) values ('Barbie','Bei Ken','4711');
- Ändern
update gast set telefon='110' where name='Armin';
- Auslesen
select * from gast where telefon='110'; select name,adresse from gast where telefon='110';
- Löschen
delete from gast where id=28;
- Buchung nimmt Gast über dessen id auf
create table buchung ( id bigserial not null primary key, von date, bis date, gastid integer references gast(id), wohnung varchar );
- Ein Gast kann nicht gelöscht werden, wenn er in einer Buchung verwendet wird.
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.
- Hinter from werden die beteiligten Tabellen aufgeführt.
- Spaltennamen, die in mehreren Tabellen auftreten, müssen durch Voranstellen des Tabellennamens eindeutig gemacht werden.
- In der where-Klausel wird festgelegt, dass die Zeilen der Tabellen verwendet werden, auf die die Tabelle buchung über den Fremdschlüssel referenziert.
select name, bez,buchung.preis from buchung,gast,wohnung where gast.id=gastid AND wohnung.id=wohnid;