Aufgabe 19 - Datenintegrität
Aufgabe 19 - Datenintegrität
Abschnitt betitelt „Aufgabe 19 - Datenintegrität“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung wird dafür gesorgt, dass nur korrekte Daten in die Datenbank gelangen (siehe Kapitel 11 - Datenintegrität). Integritätsbedingungen werden gesetzt, referenzielle Aktionen passend gewählt und das Verhalten bei Verletzungen beobachtet. Im Expertenteil stößt der CHECK-Constraint an seine Grenze.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 11 - Datenintegrität.
- Ein PostgreSQL-Server und ein SQL-Editor.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie unterscheiden die vier Integritätskategorien.
- Sie setzen
NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK,DEFAULTkorrekt ein. - Sie wählen referenzielle Aktionen (
CASCADE,RESTRICT,SET NULL) begründet. - Sie erkennen, welche Regeln ein
CHECK-Constraint nicht abbilden kann.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Kategorien zuordnen und Constraints setzen (Teil A).
- Reorganisation und Transfer: Fremdschlüssel und Geschäftsregeln umsetzen (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: ein vollständiges Schema entwerfen und die Grenze von CHECK beurteilen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Ausgangsdaten (Ticketsystem, absichtlich ohne Constraints)
Abschnitt betitelt „Ausgangsdaten (Ticketsystem, absichtlich ohne Constraints)“CREATE TABLE venues (venue_id INT, name TEXT, city TEXT, capacity INT);CREATE TABLE events (event_id INT, venue_id INT, title TEXT, event_date DATE, price NUMERIC(8,2), status TEXT);CREATE TABLE customers (customer_id INT, email TEXT, first_name TEXT, last_name TEXT, created_at TIMESTAMP);CREATE TABLE orders (order_id INT, customer_id INT, event_id INT, quantity INT, total NUMERIC(10,2), ordered_at TIMESTAMP);
INSERT INTO venues VALUES (1,'Villach City Hall','Villach',5000),(2,'Vienna Concert Hall','Vienna',1200),(3,'Castle Open-Air Stage','Klagenfurt',800);INSERT INTO events VALUES (101,1,'Rock by the Lake','2027-07-15',49.90,'ACTIVE'),(102,2,'Classical Night','2027-09-20',89.00,'ACTIVE'),(103,3,'Open-Air Cabaret','2027-08-10',29.50,'CANCELLED'),(104,2,'Jazz at the Concert Hall','2027-11-05',65.00,'ACTIVE');INSERT INTO customers VALUES (1,'[email protected]','Max','Doe','2024-01-10 09:00'),(2,'[email protected]','Anna','Sample','2024-03-22 14:30'),(3,'[email protected]','Chris','Test','2025-01-05 11:15');INSERT INTO orders VALUES (1001,1,101,2,99.80,'2025-02-01 10:00'),(1002,2,102,1,89.00,'2025-02-15 16:45'),(1003,1,104,3,195.00,'2025-03-10 08:30');Teil A - Kategorien und Basis-Constraints
Abschnitt betitelt „Teil A - Kategorien und Basis-Constraints“- Ordnen Sie jede Situation einer Kategorie zu (Entitäts-, referenzielle, Domänen-, benutzerdefinierte Integrität): (a) Bestellung verweist auf nicht existierende
event_id; (b) Event ohne Titel; (c) zwei Kunden mit gleichercustomer_id; (d) Preis-15.00; (e)quantity = 0; (f)status = 'VIELLEICHT'. - Legen Sie
customersneu an, mitcustomer_idals automatisch vergebenem Primärschlüssel,emailNOT NULL UNIQUE,first_name/last_nameNOT NULL,created_atmit DefaultCURRENT_TIMESTAMP. Testen Sie den doppelten E-Mail-Fall.
Teil B - Fremdschlüssel und referenzielle Aktionen
Abschnitt betitelt „Teil B - Fremdschlüssel und referenzielle Aktionen“- Legen Sie
eventsneu an, mit einem benannten Fremdschlüsselfk_events_venuesaufvenues. - Entscheiden und begründen Sie: Was passiert beim Löschen einer
venuemit noch zugeordneten Events (RESTRICToderCASCADE)? Setzen Sie die gewählte Aktion um.
Teil C - CHECK-Constraints und nachträgliche Änderungen
Abschnitt betitelt „Teil C - CHECK-Constraints und nachträgliche Änderungen“- Setzen Sie für
events: Preis > 0;status IN ('ACTIVE','CANCELLED','SOLD_OUT'); Datum in der Zukunft. Fürorders:quantity BETWEEN 1 AND 10;total > 0. Vergeben Sie Namen nachchk_<tabelle>_<spalte>. - Fügen Sie per
ALTER TABLEnachträglich hinzu:venues.capacityNOT NULLund> 0;orders.quantity BETWEEN 1 AND 10. Fügen Sie danach bewusst eine ungültige Zeile ein und beobachten Sie die Fehlermeldung. Entfernen Sie den Constraint auforders.quantitywieder.
Teil D - Expertenteil: Vollständiges Schema und die Grenze von CHECK
Abschnitt betitelt „Teil D - Expertenteil: Vollständiges Schema und die Grenze von CHECK“- Schema von Grund auf: Entwerfen Sie alle vier Tabellen neu, mit automatischen Primärschlüsseln, benannten Fremdschlüsseln samt begründeten referenziellen Aktionen, allen
NOT NULL/UNIQUE/DEFAULTund den Geschäftsregeln aus Teil C. - Constraint auf befüllter Tabelle: Angenommen,
venuesenthält bereits eine Zeile mitcapacity = -50. Zeigen Sie, dassADD CONSTRAINT ... CHECK (capacity > 0)daran scheitert, und lösen Sie es sauber: entweder die Daten korrigieren oder den Constraint mitNOT VALIDhinzufügen und später mitVALIDATE CONSTRAINTprüfen. Erklären Sie den Unterschied in zwei Sätzen. - Grenze von CHECK - tabellenübergreifende Regel: Die Firma will erzwingen, dass
orders.totalimmerquantity * pricedes zugehörigen Events entspricht. Erklären Sie in drei bis vier Sätzen, warum ein gewöhnlicherCHECK-Constraint das nicht kann (er darf nur Spalten derselben Zeile prüfen, keine andere Tabelle), und nennen Sie zwei mögliche Umsetzungen (ein Trigger, odertotalgar nicht speichern und stattdessen berechnen bzw. als generierte Spalte je nach Datenlage). - Grenze von CHECK - zeilenübergreifende Regel: Ebenso soll die Summe der bestellten Tickets pro Event die
capacitydes Veranstaltungsorts nicht überschreiten. Erklären Sie, warum auch das keinCHECKleisten kann (es müsste über mehrere Zeilen aggregieren) und auf welcher Ebene diese Regel gehört.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Worin unterscheiden sich
UNIQUEundPRIMARY KEY(zwei Punkte)? - Verletzt ein
CHECK (discount BETWEEN 0 AND 100)den Constraint, wenndiscountNULList? - Was meint ein Kollege mit „stillen Kettenreaktionen” bei
ON DELETE CASCADE, und wann istRESTRICTbesser? - Warum kann ein
CHECK-Constraint keine Regel über zwei Tabellen erzwingen? - Wozu dient
ADD CONSTRAINT ... NOT VALIDund das spätereVALIDATE CONSTRAINT?
- Die Datei
aufgabe19_integritaet.sqlmit allenCREATE/ALTER/Test-Anweisungen. - Kurze schriftliche Antworten zur Kategorien-Zuordnung und zu den Begründungen aus Teil D.
HTL Villach, Schuljahr 2025-2026,
https://www.htl-villach.at