In den ersten Vorlesungen haben wir die Basics zu relationalen Datenbanken und PostgreSQL gelegt, gelernt, wie man mit psql und pgAdmin arbeitet und wie man Datenbanken erstellt und verwaltet. Jetzt ist es Zeit, zum eigentlichen "Baumaterial" von relationalen Datenbanken überzugehen – den Tabellen. Genau in den Tabellen wird die ganze Info gespeichert, die wir später filtern, sortieren oder joinen können.
Tabellen in PostgreSQL erstellst du mit dem Befehl CREATE TABLE. Der Befehl beschreibt die Struktur der Tabelle: ihren Namen, die Spalten und deren Datentypen.
Allgemeiner Aufbau des Befehls
So sieht das Grund-Syntax aus:
CREATE TABLE tabelle (
spalte1 datentyp constraints,
spalte2 datentyp constraints,
...
);
Schauen wir uns die Teile an:
tabelle– Name der Tabelle (zum Beispielstudents).spalte1– Name der Spalte (zum Beispielid,name).datentyp– Datentyp der Spalte (zum BeispielINTEGER,VARCHAR).constraints– Einschränkungen für die Daten (zum BeispielNOT NULL,PRIMARY KEY).
Jetzt erstellen wir unsere erste Tabelle.
Beispiel für die Tabellenerstellung
Szenario: In einer Übungsdatenbank sollen Infos über Studierende gespeichert werden. Dafür erstellen wir die Tabelle students mit folgenden Feldern:
id: eindeutige ID des Studenten (wird automatisch hochgezählt);name: Name des Studenten (String bis zu 100 Zeichen);age: Alter des Studenten (positive ganze Zahl).
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- eindeutige ID des Studenten
name VARCHAR(100), -- Name
age INTEGER -- Alter
);
Was passiert hier:
id SERIAL PRIMARY KEY: Erstellt die Spalteid, die automatisch eindeutige Zahlen (1, 2, 3...) für jede Zeile generiert. Sie ist auch der Primärschlüssel der Tabelle.name VARCHAR(100): Erstellt eine Textspalte, wobeiVARCHAR(100)bedeutet, dass der String bis zu 100 Zeichen lang sein darf.age INTEGER: Erstellt eine Zahlenspalte für das Alter.
Wenn du diesen Befehl in psql oder pgAdmin ausführst, wird die Tabelle students erstellt.
Datentypen für Spalten
Beim Erstellen einer Tabelle ist es wichtig, für jede Spalte den richtigen Datentyp zu wählen. PostgreSQL bietet viele Typen, aber wir starten mit den beliebtesten.
| Datentyp | Beschreibung | Beispielwerte |
|---|---|---|
INTEGER |
Ganze Zahlen. Perfekt für Alter, Mengen, IDs. | 1, 42, 100 |
VARCHAR(n) |
String bis zu n Zeichen. Ideal für Texte mit bekannter Längenbegrenzung. |
'Alice', 'Bob' |
TEXT |
Unbegrenzte Strings. Für lange Texte (z.B. Produktbeschreibung). | 'Sehr langer Text...' |
DATE |
Datum ohne Uhrzeit. Für Geburtsdaten, Events usw. | 2023-10-12 |
BOOLEAN |
Boolescher Typ: TRUE oder FALSE. Für Flags (z.B. erledigt/nicht erledigt). |
TRUE, FALSE |
Den passenden Datentyp wählen
- Wenn du Zahlen speicherst – nimm
INTEGER. - Für Strings mit bekannter Längenbegrenzung – am besten
VARCHAR(n). - Für unbegrenzten Text – nimm
TEXT. - Datum und Zeit speicherst du in
DATEoderTIMESTAMP.
Beispiel: Wir erstellen die Tabelle courses
Angenommen, wir wollen in unserer Datenbank auch Infos zu Kursen speichern. Jeder Kurs hat:
id: eindeutige ID;name: Name des Kurses (String bis zu 100 Zeichen);description: Beschreibung des Kurses (langer Text);start_date: Startdatum des Kurses.
SQL-Code:
CREATE TABLE courses (
id SERIAL PRIMARY KEY, -- eindeutige ID des Kurses
name VARCHAR(100), -- Name des Kurses
description TEXT, -- Beschreibung
start_date DATE -- Startdatum
);
Praxisaufgabe
Jetzt bist du dran, eine Tabelle zu erstellen! Hier die Aufgabe:
- Erstelle die Tabelle
teachersmit folgenden Feldern:id: eindeutige ID.name: Name des Lehrers (String bis zu 50 Zeichen).subject: Fach, das er/sie unterrichtet (String bis zu 50 Zeichen).hire_date: Einstellungsdatum.
Beispielcode zum Ausführen:
CREATE TABLE teachers (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
hire_date DATE
);
Nach dem Ausführen kannst du mit dem Befehl \d teachers in psql checken, ob die Tabelle erstellt wurde.
Typische Fehler beim Erstellen von Tabellen
Gerade am Anfang passieren beim Arbeiten mit Tabellen oft Fehler. Hier ein paar typische Situationen:
Fehler im Namen der Tabelle oder Spalte. In PostgreSQL sind Namen eigentlich nicht case-sensitiv, aber wenn du Anführungszeichen " um Namen benutzt, musst du aufpassen. Zum Beispiel erstellt CREATE TABLE "MyTable" die Tabelle "MyTable", aber mytable wird dann nicht als deren Name erkannt.
Falscher Datentyp. Wenn du einen nicht existierenden Datentyp angibst, gibt es einen Fehler.
CREATE TABLE beispiel (
spalte1 KOMISCHER_TYP
);
Dieser Befehl wird nicht ausgeführt, weil KOMISCHER_TYP nicht existiert.
PRIMARY KEY vergessen. Wenn du den Primärschlüssel vergisst, wird die Tabelle zwar erstellt, aber es wird schwieriger, Zeilen eindeutig zu identifizieren.
GO TO FULL VERSION