Aufgabe 11 - Schemaänderungen mit ALTER TABLE und DROP TABLE
Aufgabe 11 - Schemaänderungen mit ALTER TABLE und DROP TABLE (PostgreSQL)
Abschnitt betitelt „Aufgabe 11 - Schemaänderungen mit ALTER TABLE und DROP TABLE (PostgreSQL)“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung wird ein bestehendes Datenbankschema gezielt mit ALTER TABLE und DROP TABLE verändert (siehe Kapitel 5 - SQL-Grundlagen). Spalten und Constraints werden hinzugefügt, geändert und entfernt, immer unter Beachtung der Abhängigkeiten. Im Expertenteil entsteht eine sichere, mehrfach ausführbare Migration.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 5 - SQL-Grundlagen, Abschnitt DDL.
- Ein PostgreSQL-Server und ein SQL-Editor (
psql, pgAdmin, DBeaver). - Eine Datei
aufgabe11.sql, in der alle Befehle in Reihenfolge gesammelt werden.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie ändern Spalten und Datentypen mit
ALTER TABLE. - Sie bauen Constraints (CHECK, FOREIGN KEY, UNIQUE) durch Drop und Add um.
- Sie beachten Abhängigkeiten beim
DROP TABLEund beimCASCADE. - Sie schreiben eine sichere, idempotente Migration ohne Datenverlust.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: das Ausgangsschema anlegen und testen (Teil A).
- Reorganisation und Transfer: Spalten und Constraints ändern (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: eine sichere, wiederholbare Migration entwickeln (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Ausgangsschema (Kursverwaltung)
Abschnitt betitelt „Ausgangsschema (Kursverwaltung)“CREATE TABLE course ( course_id SERIAL PRIMARY KEY, title VARCHAR(120) NOT NULL, start_date DATE NOT NULL, max_participants INTEGER NOT NULL CHECK (max_participants > 0));
CREATE TABLE participant ( participant_id SERIAL PRIMARY KEY, student_number VARCHAR(20) NOT NULL UNIQUE, first_name VARCHAR(60) NOT NULL, last_name VARCHAR(60) NOT NULL, birth_date DATE);
CREATE TABLE registration ( registration_id SERIAL PRIMARY KEY, course_id INTEGER NOT NULL REFERENCES course(course_id), participant_id INTEGER NOT NULL REFERENCES participant(participant_id), registration_date DATE NOT NULL DEFAULT CURRENT_DATE, status VARCHAR(15) NOT NULL CHECK (status IN ('registered', 'waitlisted', 'cancelled')), CONSTRAINT uq_registration UNIQUE (course_id, participant_id));Teil A - Schema anlegen und testen
Abschnitt betitelt „Teil A - Schema anlegen und testen“- Die drei Tabellen exakt anlegen und mit
\d courseusw. kontrollieren. - Je Tabelle einige Testdaten einfügen (2 Kurse, 3 Teilnehmende, 4 Anmeldungen).
- Bewusst mindestens einen fehlerhaften Insert testen (negativer
max_participants, ungültigerstatus, doppelte Anmeldung) und die Fehlermeldung notieren.
Ab hier erfolgen alle Änderungen ausschließlich über ALTER TABLE und DROP TABLE.
Teil B - Spaltenänderungen
Abschnitt betitelt „Teil B - Spaltenänderungen“- In
participanteine Spalteemail VARCHAR(120)ergänzen (zunächst NULL-fähig) und anschließendUNIQUEsetzen. - Für alle bestehenden Teilnehmenden per
UPDATEeineemaileintragen, dannemailaufNOT NULLsetzen. - Die Spalte
student_numberinstudent_noumbenennen. - In
courseden Typ vontitleaufVARCHAR(160)ändern. - In
participantdie Spaltebirth_dateentfernen.
Teil C - Constraints und DROP TABLE
Abschnitt betitelt „Teil C - Constraints und DROP TABLE“- Den
CHECKaufregistration.statusum den Wertcompletederweitern: bestehenden Constraint identifizieren,DROP CONSTRAINT, neuenCHECKhinzufügen. - Die Fremdschlüssel in
registrationaufON DELETE CASCADEumstellen (Constraint droppen und neu anlegen). - Den Constraint
uq_registrationentfernen und mit einem Insert zeigen, dass nun doppelte Anmeldungen möglich wären. - Die drei Tabellen in korrekter Reihenfolge löschen und begründen, warum die Reihenfolge zählt. Danach das Schema neu anlegen und nur
coursemitDROP TABLE ... CASCADElöschen; dokumentieren, welche abhängigen Objekte mitentfernt werden.
Teil D - Expertenteil: Eine sichere, idempotente Migration
Abschnitt betitelt „Teil D - Expertenteil: Eine sichere, idempotente Migration“Das Schema soll um eine E-Mail-Pflicht und eine schärfere Statusregel erweitert werden, und zwar so, dass die Migration mehrfach ausführbar ist, ohne beim zweiten Lauf Fehler zu werfen, und ohne bestehende Daten zu zerstören.
-
Datensichere Spalteneinführung:
emailin drei Schritten einführen (nullable hinzufügen → perUPDATEbefüllen →NOT NULLsetzen). Erklären, warum das direkte Hinzufügen einerNOT NULL-Spalte ohne Default an bestehenden Zeilen scheitern würde. -
Partielle Eindeutigkeit: Eine Regel erzwingen, dass ein Teilnehmer pro Kurs höchstens eine nicht stornierte Anmeldung hat, mit einem partiellen Unique-Index:
CREATE UNIQUE INDEX IF NOT EXISTS uq_active_registrationON registration (course_id, participant_id)WHERE status <> 'cancelled'; -
Idempotenz: Die gesamte Migration mit
IF EXISTS/IF NOT EXISTSbzw. Prüfabfragen so schreiben, dass ein zweiter Lauf fehlerfrei durchläuft (z. B.ALTER TABLE ... ADD COLUMN IF NOT EXISTS,DROP CONSTRAINT IF EXISTS,CREATE INDEX IF NOT EXISTS). Die Migration zweimal hintereinander ausführen und zeigen, dass der zweite Lauf ohne Fehler bleibt. -
Begründen: In vier bis fünf Sätzen erklären, warum Idempotenz und Datensicherheit bei Migrationen im Team und in der Produktion wichtig sind und warum manche Constraints in PostgreSQL nur über Drop und Add geändert werden können.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum muss ein
CHECK- oderFOREIGN KEY-Constraint meist gelöscht und neu angelegt werden? - Was bewirkt
ON DELETE CASCADE? - Warum ist die Reihenfolge beim
DROP TABLEwichtig, und wie umgehtCASCADEdas Problem? - Warum scheitert das Hinzufügen einer
NOT NULL-Spalte ohne Default an einer befüllten Tabelle? - Was macht eine Migration idempotent, und warum ist das wertvoll?
- Die Datei
aufgabe11.sqlmit allen Befehlen in Reihenfolge, kommentiert je Schritt, inklusive der idempotenten Migration aus Teil D (zweimal lauffähig). - Ein kurzes Protokoll (max. 1 Seite): welche Änderungen waren fehleranfällig, welche Constraints mussten gedroppt und neu angelegt werden, und was der zweite Migrationslauf gezeigt hat.
HTL Villach, Schuljahr 2025-2026,
https://www.htl-villach.at