Lass uns kurz Zeit nehmen und das bereits Gelernte nochmal durchgehen. Schritt für Schritt schauen wir uns alles an, was passiert. Es kommt noch viel, das auf diesem Stoff aufbaut. Es wäre also echt gut, wenn du wirklich verstehst, was bei jedem Befehl abgeht.
Gehen wir nochmal unser Beispiel mit den Studenten und Kursen von Anfang an durch. Vom Erstellen der Tabellen bis zum Verstehen, was in jedem Schritt passiert. Bereit?
Jetzt erstellen wir die Tabelle students, die Infos über Studenten speichert, und verbinden sie mit der Tabelle courses über einen Fremdschlüssel. Dabei siehst du, wie Fremdschlüssel genutzt werden, um Beziehungen zwischen Entitäten zu modellieren.
Erstellen der Tabelle students
Die Tabelle students speichert Infos über Studenten: ihre eindeutige ID, den Namen und das Geburtsdatum. Wir erstellen sie mit dem Befehl CREATE TABLE.
CREATE TABLE students (
student_id SERIAL PRIMARY KEY, -- Eindeutiger Schlüssel für jeden Eintrag
name TEXT NOT NULL, -- Name des Studenten (Pflichtfeld)
birth_date DATE -- Geburtsdatum des Studenten
);
Was passiert hier?
student_id SERIAL PRIMARY KEY: Das ist die eindeutige ID für jeden Studenten. Der TypSERIALerstellt ein automatisch hochzählendes Feld, undPRIMARY KEYsorgt dafür, dass die ID für jede Zeile einzigartig ist.name TEXT NOT NULL: Feld für den Namen des Studenten. MitNOT NULLstellen wir sicher, dass kein Eintrag ohne Namen eingefügt werden kann.birth_date DATE: Feld für das Geburtsdatum. Der DatentypDATEhilft uns, mit Datumswerten zu arbeiten.
Wenn die Tabelle ein Mensch wäre, wäre student_id ihr Ausweis, name der offensichtliche Name und birth_date das, was wir manchmal lieber verstecken, aber für die Datenbank ist das wichtig.
Erstellen der Tabelle courses
Jetzt erstellen wir eine Tabelle, die Infos über Kurse speichert. Sie enthält die Kurs-ID, den Titel und eine Beschreibung.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- Eindeutige Kurs-ID
title TEXT NOT NULL, -- Kurstitel (Pflichtfeld)
description TEXT -- Kursbeschreibung
);
Was passiert hier?
course_id SERIAL PRIMARY KEY: Genauso, ein automatisch hochzählendes Feld, das eine eindeutige ID für jeden Kurs erstellt.title TEXT NOT NULL: Feld für den Kurstitel. MitNOT NULL, weil jeder Kurs natürlich einen Namen haben muss.description TEXT: Feld für eine kurze Kursbeschreibung. Das ist ein optionales Feld, das leer bleiben kann (keinNOT NULL).
Ein Kurs ohne Namen ist wie ein Buch ohne Umschlag. Aber die Datenbank lässt das nicht zu!
Verknüpfung der Tabelle students mit der Tabelle courses
Stellen wir uns jetzt vor, dass jeder Student nur in einem Kurs eingeschrieben sein kann. Dafür fügen wir in der Tabelle courses einen Fremdschlüssel ein, der auf die student_id aus der Tabelle students verweist.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- Eindeutige Kurs-ID
title TEXT NOT NULL, -- Kurstitel (Pflichtfeld)
description TEXT, -- Kursbeschreibung
student_id INT REFERENCES students(student_id) -- Fremdschlüssel, der mit der Tabelle students verknüpft
);
Was macht student_id INT REFERENCES students(student_id)?
- Wir erstellen das Feld
student_id, das auf die eindeutige ID des Studenten (student_id) aus der Tabellestudentsverweist. - Die Verbindung zwischen den Tabellen wird durch das Schlüsselwort
REFERENCEShergestellt. - Das bedeutet, dass beim Einfügen von Daten in
coursesder Wert vonstudent_idin der Tabellestudentsexistieren muss. Wenn du zum Beispiel versuchst, einen Studenten mit einer nicht existierendenstudent_idin einen Kurs einzutragen, bekommst du einen Fehler.
Daten in die Tabellen einfügen
Wenn die Tabellen erstellt sind, lass uns ein paar Studenten und Kurse hinzufügen. Denn in einem leeren Hörsaal zu sitzen ist doch langweilig, oder?
Studenten hinzufügen
INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');
Kurse hinzufügen
INSERT INTO courses (title, description, student_id) VALUES
('SQL Grundlagen', 'Lernen der grundlegenden SQL-Syntax', 1),
('Relationale Datenbanken', 'Verständnis relationaler Modelle', 2),
('PostgreSQL für Einsteiger', 'Installation und Einrichtung von PostgreSQL', 3);
Wir haben für jeden Kurs die student_id angegeben und ihn so mit der ID eines Studenten in der Tabelle students verknüpft.
Verbindung zwischen den Tabellen prüfen
Jetzt lass uns sicherstellen, dass unsere Tabellen wirklich verbunden sind. Dafür erstellen wir eine Abfrage, die Infos über die Kurse zusammen mit den Namen der Studenten ausgibt.
SELECT
courses.title AS course_title,
courses.description AS course_description,
students.name AS student_name
FROM
courses
JOIN
students ON courses.student_id = students.student_id;
Beispielergebnis: Ergebnis der Abfrage:
| course_title | course_description | student_name |
|---|---|---|
| SQL Grundlagen | Lernen der grundlegenden SQL-Syntax | Alex Lin |
| Relationale Datenbanken | Verständnis relationaler Modelle | Maria Chi |
| PostgreSQL für Einsteiger | Installation und Einrichtung von PostgreSQL | Otto Song |
Wir haben die Kurse mit den Studenten über den Fremdschlüssel verbunden – und können jetzt zusammengehörige Daten mit einer einzigen Abfrage holen. So funktioniert das relationale Modell!
Zusammenfassung
Ich hoffe, alles, was wir gerade durchgegangen sind, war für dich verständlich und klar. Denn bald geht's weiter, und es wäre super, wenn du dir bei deinem Wissen sicher bist.
GO TO FULL VERSION