Übungsaufgaben zum Relationenmodell
https://bildung.social/deck/@oerinformatik/114409653813500714
https://oer-informatik.de/relationenmodell-uebungsaufgaben
Relationenmodell, Datenbankentwurf, Normalisierung, dritte Normalform, Primärschlüssel, Fremdschlüssel, Kardinalität, ER-Modell, Übungsaufgaben, Prüfungsvorbereitung
tl/dr; (Bearbeitungszeit insgesamt 236 min, mehrere Aufgaben): Sieben Übungsaufgaben zum logischen Datenbankentwurf: Grundbegriffe wie Primär- und Fremdschlüssel, Redundanz, Datensatz sowie Stamm- und Bewegungsdaten, ein Relationenmodell aus einem Beleg ableiten, ein vorgegebenes Modell erweitern, ein ER-Modell überführen, einen fehlerhaften Entwurf korrigieren, einen unbereinigten CSV-Export übernehmen und eine Prozessbeschreibung samt Statusprotokoll und Standorthistorie modellieren – jeweils in der dritten Normalform mit Schlüsseln und Kardinalitäten. Alle Lösungen sind ausgeblendet und mit Punkteverteilung versehen [AI-Assisted]. (Zuletzt geändert am 26.10.2026)
Diese Übungsaufgaben gehören zum Artikel Der logische Datenbankentwurf mit dem Relationenmodell. Sie bauen auf dem Entity-Relationship-Modell auf; die Normalformen werden im Artikel Normalisierung ausführlich erklärt.
Hinweise zur Bearbeitung: Die Aufgaben sind bewusst umfangreich, damit alle typischen Fragestellungen zum Thema vorkommen; die Angabe hinter dem Aufgabentitel nennt die Kompetenzstufe (Stufe 1 Basiskompetenz bis Stufe 4 Expertise). Zeichne Deine Modelle auf Papier oder mit einem Werkzeug Deiner Wahl, bevor Du die Beispiellösung aufklappst. Es genügt eine Darstellung als Tabellenkästen mit Kennzeichnung PK/FK und Verbindungslinien, an denen die Kardinalitäten (1, n) stehen. Tabellen- und Attributnamen dürfen von der Beispiellösung abweichen, wenn sie selbsterklärend sind; andere fachlich richtige Lösungen sind ebenfalls richtig. Grau dargestellte Tabellen sind bereits vorhanden und müssen nur verknüpft werden.
Aufgabe 1: Grundbegriffe am Beispiel einer Mitfahr-App (Stufe 1 – Basiskompetenz)
(ca. 28 min Bearbeitungszeit)
Du bist Auszubildende*r im Projektteam der Mitfahr-App „RatzFahrt“ des Ratz und Rübe Berufskollegs in Bielefeld. Bevor das Team die Datenbank erweitert, sollst Du die Grundlagen relationaler Datenbanken für die neuen Teammitglieder zusammenfassen.
a) Für die Einarbeitung hat Thomas Becker einen kurzen englischen Text aus einem Datenbank-Handbuch herausgesucht:
A relational database stores data in tables. Each row of a table is called a record, each column is an attribute. Every table has a primary key: a column or a combination of columns whose value identifies each record unambiguously and must never be empty. To connect two tables, the primary key of one table is stored as a foreign key in the other table. The database can then check that every foreign key refers to an existing record. Thanks to these links, information such as a driver’s phone number is stored only once and can still be combined with all of their rides in a single query.
Beantworte die folgenden Fragen auf Deutsch mit Bezug zum Text.
aa) Beschreibe die Funktion eines Primärschlüssels. (2 Punkte)
Der Primärschlüssel (primary key) ist eine Spalte oder Spaltenkombination, deren Wert jeden Datensatz einer Tabelle eindeutig kennzeichnet (1 Punkt). Er darf nie leer sein und in der Tabelle nicht doppelt vorkommen (1 Punkt).
ab) Beschreibe den Zweck eines Fremdschlüssels. (2 Punkte)
Ein Fremdschlüssel (foreign key) verknüpft zwei Tabellen: In einer Tabelle wird der Primärschlüssel eines Datensatzes einer anderen Tabelle gespeichert (1 Punkt). Die Datenbank kann so prüfen, dass jeder Verweis auf einen vorhandenen Datensatz zeigt (referentielle Integrität) (1 Punkt).
ac) Beschreibe einen Vorteil, wenn Tabellen über Schlüssel miteinander verknüpft werden. (2 Punkte)
Vorteil (1 Punkt) mit Erläuterung am Beispiel (1 Punkt), z. B.: Jede Information wird nur einmal gespeichert, Redundanz wird vermieden – die Handynummer einer Fahrerin steht nur in nutzer und lässt sich trotzdem in einer Abfrage mit allen ihren Fahrten zusammen ausgeben. Auch richtig: Änderungen sind nur an einer Stelle nötig, die Daten bleiben widerspruchsfrei.
b) Im letzten Schuljahr hat die Schülervertretung die Fahrgemeinschaften in einer gemeinsamen Liste gesammelt. Ein Ausschnitt:
| Datum | Fahrer*in | Handy Fahrer*in | Treffpunkt | Ort | Mitfahrer*in |
|---|---|---|---|---|---|
| 08.06.2026 | Ben Richter | 0176 04069011 | Hauptbahnhof, ZOB Steig 3 | Gütersloh | Lukas Hofmann |
| 08.06.2026 | Ben Richter | 0176 04069011 | Hbf, ZOB | Gütersloh | Aylin Kaya |
| 15.06.2026 | Ben Richter | 0176 04069111 | Hauptbahnhof, ZOB Steig 3 | Gütersloh | Lukas Hofmann |
ba) Erkläre den Begriff Redundanz an einem Beispiel aus der Liste. (2 Punkte)
Redundanz bedeutet, dass dieselbe Information mehrfach gespeichert ist (1 Punkt). Beispiel: Name und Handynummer von Ben Richter oder der Treffpunkt stehen in jeder Zeile erneut (1 Punkt).
bb) Beschreibe ein Problem, das durch diese Redundanz entstehen kann, und zeige es an der Liste. (2 Punkte)
Mehrfach gespeicherte Daten müssen bei einer Änderung an allen Stellen geändert werden; wird eine Stelle vergessen oder vertippt, widersprechen sich die Daten (Inkonsistenz) (1 Punkt). In der Liste steht für Ben Richter einmal 0176 04069011 und einmal 0176 04069111, und der Treffpunkt ist unterschiedlich geschrieben – welche Angabe richtig ist, lässt sich nicht erkennen (1 Punkt). Auch richtig: höherer Speicher- und Pflegeaufwand, Einfüge- oder Löschanomalien (z. B. verschwindet ein Treffpunkt aus der Liste, wenn die letzte Fahrt dort gelöscht wird).
c) In der App sind die Angebote in der Tabelle angebot gespeichert. Ein Ausschnitt:
| angebot_id | fahrer_id | haltepunkt_id | datum | abfahrt | freie_plaetze |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 2026-10-19 | 07:00 | 2 |
| 4 | 7 | 2 | 2026-10-20 | 06:50 | 3 |
Ordne die Fachbegriffe den Stellen (1) bis (6) zu: Attribut, Attributwert, Datensatz, Fremdschlüssel, Primärschlüssel, Relation. (3 Punkte)
- die gesamte Tabelle
angebot· (2) die Zeile mitangebot_id4 · (3) die Spalteabfahrt· (4) der Eintrag06:50· (5) die Spalteangebot_id· (6) die Spaltefahrer_id, die auf die Tabellenutzerverweist
- Relation (Tabelle), (2) Datensatz (Tupel, Zeile), (3) Attribut (Spalte), (4) Attributwert, (5) Primärschlüssel, (6) Fremdschlüssel – je 0,5 Punkte.
d) Welche zwei Aussagen kennzeichnen eine relationale Datenbank? (2 Punkte)
Die Daten werden in Tabellen gespeichert, die über Schlüssel miteinander in Beziehung stehen.
Jeder Datensatz hat genau einen übergeordneten Datensatz, so wie Ordner in einem Dateisystem.
Alle Datensätze einer Tabelle haben dieselben Spalten mit festgelegtem Datentyp.
Jeder Datensatz kann eine eigene Struktur haben und wird als JSON-Dokument gespeichert.
Die Daten werden nur im Arbeitsspeicher gehalten und beim Ausschalten gelöscht.
Richtig sind 1 und 3 (je 1 Punkt). Aussage 2 beschreibt eine hierarchische Datenbank, Aussage 4 eine dokumentenorientierte (NoSQL-)Datenbank, Aussage 5 trifft auf keine dauerhafte Datenbank zu.
e) Beantworte kurz:
ea) Nenne die Sprache, mit der relationale Datenbanken standardmäßig abgefragt und verändert werden. (1 Punkt)
eb) Nenne zwei weitere Datenbanktypen außer relationalen Datenbanken. (2 Punkte)
ea) SQL (Structured Query Language) (1 Punkt).
eb) je 1 Punkt, z. B. dokumentenorientierte Datenbank, Key-Value-Store, Graphdatenbank, spaltenorientierte Datenbank (Wide Column Store), objektorientierte Datenbank, hierarchische Datenbank, Netzwerkdatenbank, Zeitreihendatenbank. „NoSQL-Datenbank“ allein zählt als ein Typ.
f) Die Schülervertretung fragt, warum die Liste nicht einfach in der Tabellenkalkulation bleiben kann. Nenne zwei Vorteile eines Datenbanksystems gegenüber einer Tabellenkalkulationsdatei. (2 Punkte)
Je 1 Punkt, z. B.: mehrere Personen bzw. die App können gleichzeitig lesen und schreiben (Mehrbenutzerbetrieb); Datentypen, Schlüssel und Fremdschlüssel sichern die Widerspruchsfreiheit (Konsistenz); Zugriffsrechte lassen sich je Benutzer*in festlegen (wichtig bei Daten Minderjähriger); große Datenmengen werden schnell durchsucht; Anwendungen wie die App greifen über Schnittstellen zu; Sicherung und Wiederherstellung sind zentral geregelt.
g) Ordne die folgenden Daten der App den Stammdaten oder den Bewegungsdaten zu und begründe eine Deiner Zuordnungen. (3 Punkte)
Name, Ort und Entfernung des Haltepunkts „Busbahnhof Bad Salzuflen“
das Angebot von Ben Richter für Montag, 19.10.2026, 07:00 Uhr
die Buchung von Lukas Hofmann für dieses Angebot
das Pseudonym und die Klasse von Aylin Kaya
Stammdaten: 1 und 4; Bewegungsdaten: 2 und 3 (je 0,5 Punkte). Begründung (1 Punkt), z. B.: Stammdaten beschreiben dauerhafte Grunddaten (Personen, Orte) und ändern sich selten. Bewegungsdaten entstehen laufend im Tagesgeschäft, beziehen sich auf einen Zeitpunkt oder Vorgang (Fahrt am 19.10.) und verweisen auf Stammdaten.
h) Das Team hat die wichtigsten Tabellen der App skizziert. Die Beziehungslinien sind schon eingezeichnet. Kennzeichne in jeder Tabelle den Primärschlüssel und ergänze an den Linien die Kardinalitäten. (6 Punkte)


Primärschlüssel (je 0,5 Punkte): nutzer_id, haltepunkt_id, angebot_id, buchung_id. Kardinalitäten (je 1 Punkt): nutzer 1 : n angebot (als Fahrer*in), haltepunkt 1 : n angebot, angebot 1 : n buchung, nutzer 1 : n buchung (als Mitfahrer*in). Die „1“ steht jeweils an der Tabelle, deren Primärschlüssel als Fremdschlüssel in der anderen Tabelle steht; die „n“ steht an der Tabelle mit dem Fremdschlüssel.
i) Ein Mitschüler schlägt vor, die Spalte angebot_id zu streichen und stattdessen haltepunkt_id, datum und abfahrt gemeinsam als Primärschlüssel zu verwenden. Begründe, warum dieser Schlüssel ungeeignet ist. (2 Punkte)
Die Kombination ist nicht eindeutig: Zwei Fahrer*innen können am selben Tag zur selben Zeit am selben Haltepunkt abfahren (1 Punkt). Außerdem ändern sich Abfahrtszeit oder Treffpunkt, wenn eine Fahrt verschoben wird; ein Primärschlüssel soll aber stabil bleiben, weil sonst alle Verweise in buchung mitgeändert werden müssten (1 Punkt).
Aufgabe 2: Werkstattaufträge im Fahrradshop (Stufe 2 – Kernkompetenz)
(ca. 37 min Bearbeitungszeit)
Du bist Auszubildende*r im Entwicklungsteam der CSB-Rad GmbH in Bielefeld. Ab Januar 2027 soll die Werkstatt in Sennestadt Inspektionen und Reparaturen über das Shopsystem abwickeln. Bisher schreibt Werkstattleiter Bastian Ludwig die Aufträge in einer Textverarbeitung. Er gibt Dir den folgenden Auftrag als Beispiel:
CSB-Rad GmbH · Werkstatt Sennestadt
WERKSTATTAUFTRAG W-2026-0147
Annahme: 14.10.2026, 08:40 Uhr angenommen von: Bastian Ludwig
Fertig bis: 16.10.2026
Kunde: Hans-Jürgen Kühn (Kd.-Nr. 2), Tel. 0521 0100202
Fahrrad: CSB-Rad E-Bike „Kanal“ Mittelmotor 500 Wh, Farbe moosgrün
Rahmennummer CSB2608EB0213, Kilometerstand bei Annahme: 1.412 km
Arbeiten
Pos Leistung Leistungsart ausgeführt von Std. €/Std. Betrag
1 Erstinspektion E-Bike Inspektion Selin Arslan 1,50 68,00 102,00
2 Bremsbeläge und Kette erneuert Reparatur Selin Arslan 0,50 68,00 34,00
3 Software-Update Motorsteuerung Elektronik Paul Neubauer 0,25 78,00 19,50
Material
Art.-Nr. Bezeichnung Menge Einzelpreis Betrag
BRE-BEL-02 Bremsbelag-Satz Scheibenbremse 2 18,40 36,80
KET-11-E Kette 11-fach E-Bike 1 32,90 32,90
Summe netto 225,20 € · zzgl. 19 % MwSt. 42,79 € · Gesamtbetrag 267,99 €
Weitere Informationen aus dem Gespräch mit Bastian Ludwig:
Kund*innen und Artikel (also auch Ersatzteile) sind bereits in den Tabellen
kunde (kunde_id (PK), …)undartikel (artikel_id (PK), artikelnr, bezeichnung, netto_preis, mwst_satz, …)gespeichert.Ein Fahrrad gehört genau einer Kundin bzw. einem Kunden; viele Kund*innen bringen mehrere Räder (auch von anderen Herstellern). Für jedes Rad werden Hersteller, Modell, Farbe und Rahmennummer erfasst.
Der Stundensatz hängt von der Leistungsart ab. Er wird regelmäßig angepasst; auf einem Auftrag muss aber der Stundensatz stehen bleiben, der zum Zeitpunkt der Arbeit galt. Dasselbe gilt für die Einzelpreise der Ersatzteile.
Beträge, Summen und Mehrwertsteuer werden beim Drucken berechnet und sollen nicht gespeichert werden.
a) Erstelle aus dem Beispielauftrag und den Informationen ein relationales Datenmodell in der dritten Normalform. Binde die vorhandenen Tabellen kunde und artikel ein. Kennzeichne Primärschlüssel mit PK und Fremdschlüssel mit FK und zeichne alle Beziehungen mit ihren Kardinalitäten ein. Gib den Tabellen und Attributen selbsterklärende Namen. (25 Punkte)

In Textform:
mitarbeiter (mitarbeiter_id (PK), vorname, nachname)
fahrradmodell (modell_id (PK), hersteller, bezeichnung)
fahrrad (fahrrad_id (PK), rahmennummer (UNIQUE, NULL erlaubt), farbe, modell_id (FK), kunde_id (FK))
werkstattauftrag (auftrag_id (PK), auftragsnr (UNIQUE), annahme_am, fertig_bis, km_stand,
fahrrad_id (FK), annahme_mitarbeiter_id (FK))
leistungsart (leistungsart_id (PK), bezeichnung, stundensatz)
arbeitsposition (auftrag_id (PK, FK), pos_nr (PK), beschreibung, leistungsart_id (FK),
mitarbeiter_id (FK), stunden, stundensatz)
materialposition (auftrag_id (PK, FK), artikel_id (PK, FK), menge, einzelpreis)
Beziehungen: kunde 1:n fahrrad, fahrradmodell 1:n fahrrad, fahrrad 1:n werkstattauftrag, mitarbeiter 1:n werkstattauftrag (Annahme), werkstattauftrag 1:n arbeitsposition, leistungsart 1:n arbeitsposition, mitarbeiter 1:n arbeitsposition (Ausführung), werkstattauftrag 1:n materialposition, artikel 1:n materialposition.
Bewertung: je neue Tabelle mit Primärschlüssel und passenden Attributen 1 Punkt (7 Punkte), je Fremdschlüssel 1 Punkt (9 Punkte), je Beziehung mit Kardinalität 1 Punkt (9 Punkte).
Worauf es ankommt:
materialpositionlöst die m:n-Beziehung zwischen Auftrag und Artikel auf;mengeundeinzelpreissind Attribute der Beziehung.arbeitspositionist ein schwacher Entitätstyp: die Positionsnummer ist nur zusammen mit der Auftragsnummer eindeutig.mitarbeitersteht in zwei Beziehungen: zum Werkstattauftrag (Annahme) und zur Arbeitsposition (Ausführung) – deshalb Fremdschlüssel mit unterschiedlichen, sprechenden Namen.stundensatzsteht sowohl inleistungsart(aktueller Satz) als auch inarbeitsposition(Satz zum Zeitpunkt der Arbeit). Das ist keine Redundanz im Sinne der Normalisierung, denn die beiden Werte dürfen sich unterscheiden. Ebensoeinzelpreisgegenüberartikel.netto_preis.kunde_idgehört nicht inwerkstattauftrag: Sie ergibt sich über das Fahrrad (transitive Abhängigkeit). Wer begründet, dass Räder den Besitz wechseln können und der Auftrag den damaligen Auftraggeber festhalten muss, darfkunde_idzusätzlich im Auftrag speichern.Hersteller und Modellbezeichnung stehen in einer eigenen Tabelle, weil viele Räder desselben Modells in die Werkstatt kommen und Hersteller und Modell sonst bei jedem Rad erneut (und in wechselnder Schreibweise) erfasst würden. Weil dieselbe Modellbezeichnung bei verschiedenen Herstellern vorkommen kann, ist eine Lösung mit
herstellerundmodelldirekt infahrradebenfalls richtig.Beträge, Summen und Mehrwertsteuer werden nicht gespeichert (sie lassen sich aus
stunden * stundensatzbzw.menge * einzelpreisund dem Steuersatz berechnen). Hier gilt einheitlich 19 %; müssen auch Änderungen des Steuersatzes nachvollziehbar bleiben, wird der Satz – wie der Preis – zusätzlich in den Positionen festgehalten.Für
materialpositionist auch ein zusammengesetzter Schlüssel(auftrag_id, pos_nr)richtig – dann darf dasselbe Ersatzteil in zwei Positionen auftauchen.
b) Lege für die folgenden Attribute sinnvolle MariaDB-Datentypen fest. Übertrage dazu die Tabelle und fülle sie aus. (4 Punkte)
| Attribut | Datentyp | kurze Begründung |
|---|---|---|
fahrrad.rahmennummer |
||
werkstattauftrag.km_stand |
||
arbeitsposition.stunden |
||
adresse.plz (Liefer- und Rechnungsadressen, auch Österreich) |
| Attribut | Datentyp | kurze Begründung |
|---|---|---|
fahrrad.rahmennummer |
VARCHAR(20) |
enthält Buchstaben und Ziffern, Länge je Hersteller unterschiedlich; wird nicht gerechnet |
werkstattauftrag.km_stand |
INT UNSIGNED (oder MEDIUMINT UNSIGNED) |
ganze, nicht negative Zahl; SMALLINT UNSIGNED (bis 65.535) reicht bei Vielfahrenden nicht |
arbeitsposition.stunden |
DECIMAL(4,2) |
Viertelstunden (0,25) exakt speichern; FLOAT ist für Abrechnungen ungeeignet (Rundungsfehler) |
adresse.plz |
VARCHAR(10) (in Deutschland allein CHAR(5)) |
Postleitzahlen sind Zeichenketten: führende Nullen (01129) gingen bei Zahltypen verloren, mit PLZ wird nicht gerechnet; Österreich hat vier Stellen, andere Länder Buchstaben |
Je Zeile 1 Punkt (Datentyp passend und begründet).
c) Bastian Ludwig schlägt vor, statt fahrrad_id die Rahmennummer als Primärschlüssel der Tabelle fahrrad zu verwenden. Nenne zwei Anforderungen, die ein Primärschlüssel erfüllen muss, und nimm Stellung zu dem Vorschlag. (4 Punkte)
Anforderungen (je 1 Punkt, zwei verlangt): Der Primärschlüssel muss jeden Datensatz eindeutig identifizieren, er darf nie leer (NULL) sein, er sollte unveränderlich und möglichst kurz (minimal) sein.
Stellungnahme (2 Punkte), z. B.:
dagegen: Die Rahmennummer ist ein natürlicher Schlüssel, den CSB-Rad nicht selbst vergibt. Bei Rädern anderer Hersteller kann sie fehlen oder unleserlich sein – ein Primärschlüssel darf aber nie leer sein; ein Tippfehler bei der Annahme müsste in allen Tabellen mit Fremdschlüssel korrigiert werden. Ein künstlicher Schlüssel (
fahrrad_id) ist stabil und kurz; die Rahmennummer bleibt alsUNIQUE-Attribut erhalten (leere Werte sind dabei erlaubt) und kann trotzdem gesucht werden.dafür (ebenfalls richtig, wenn begründet): Die Rahmennummer ist bereits eindeutig und auf dem Rad eingeschlagen; man spart ein zusätzliches Attribut und kann das Rad bei der Annahme direkt finden.
d) Erstelle die SQL-Anweisung, mit der die Tabelle für die Materialpositionen Deines Modells angelegt wird – mit Primärschlüssel und Fremdschlüsseln. (5 Punkte)
CREATE TABLE materialposition (
auftrag_id INT UNSIGNED NOT NULL,
artikel_id INT UNSIGNED NOT NULL,
menge SMALLINT UNSIGNED NOT NULL,
einzelpreis DECIMAL(10,2) NOT NULL, -- Preis zum Zeitpunkt der Reparatur
PRIMARY KEY (auftrag_id, artikel_id),
CONSTRAINT fk_mp_auftrag FOREIGN KEY (auftrag_id) REFERENCES werkstattauftrag (auftrag_id),
CONSTRAINT fk_mp_artikel FOREIGN KEY (artikel_id) REFERENCES artikel (artikel_id)
);Bewertung: Spalten mit passenden Datentypen 1 Punkt, zusammengesetzter Primärschlüssel 2 Punkte, je Fremdschlüssel 1 Punkt. Die Datentypen der Fremdschlüssel müssen zu den referenzierten Primärschlüsseln passen (hier INT UNSIGNED), sonst lehnt MariaDB den Fremdschlüssel ab.
e) Für einen Test hat Dein Mit-Azubi Datensätze in fahrrad, werkstattauftrag und arbeitsposition angelegt. Beim Versuch, zuerst das Test-Fahrrad zu löschen, meldet MariaDB einen Fehler. Erläutere die Ursache und gib an, in welcher Reihenfolge die Testdaten gelöscht werden müssen. (3 Punkte)
Der Werkstattauftrag verweist über den Fremdschlüssel fahrrad_id auf das Fahrrad. Würde das Fahrrad gelöscht, zeigte der Fremdschlüssel ins Leere – die referentielle Integrität wäre verletzt; deshalb verweigert MariaDB das Löschen (1 Punkt; Fehlermeldung: Cannot delete or update a parent row: a foreign key constraint fails).
Reihenfolge (2 Punkte): zuerst die abhängigen Datensätze, dann die referenzierten – arbeitsposition (und ggf. materialposition) → werkstattauftrag → fahrrad.
Alternative: Die Fremdschlüssel mit ON DELETE CASCADE anlegen. Für Werkstattaufträge ist das aber riskant, weil dann beim Löschen eines Fahrrads die Auftragshistorie verschwindet.
Aufgabe 3: Helfer*innen-Schichten für ein Barcamp (Stufe 2 – Kernkompetenz)
(ca. 32 min Bearbeitungszeit)
Du bist Auszubildende*r und hilfst im Orga-Team des Barcamps „Lernen.Digital.Leben 2027“ am Ratz und Rübe Berufskolleg mit. Für das Barcamp am 13.03.2027 werden rund 40 Schüler*innen und Lehrkräfte als Helfende gebraucht. Dimitrios Papadopoulos möchte die Schichtplanung in die bestehende Barcamp-Datenbank aufnehmen. Emre Aksoy hat mit dem Modell begonnen, musste aber zum Netzwerkaufbau. Aus dem Gespräch mit Dimitrios liegen folgende Anforderungen vor:
Helfende arbeiten in Schichten (z. B. Check-in von 08:30 bis 10:30 Uhr). Jede Schicht gehört zu genau einer Veranstaltung und genau einem Aufgabenbereich.
Aufgabenbereiche sind z. B. Check-in, Technik, Catering, Raumbetreuung und Wegeleitung. Zu jedem Aufgabenbereich werden eine Bezeichnung, eine kurze Beschreibung und die verantwortliche Lehrkraft gespeichert.
Schichten der Raumbetreuung finden in genau einem Raum statt; die übrigen Schichten haben keinen festen Raum.
In eine Schicht können sich mehrere Personen eintragen, und eine Person kann mehrere Schichten übernehmen. Gespeichert werden soll, wann sich die Person eingetragen hat und ob sie erschienen ist. Jede Schicht hat eine Höchstzahl an Helfenden.
Zu Schichtbeginn werden Geräte (z. B. Check-in-Terminals und Badge-Drucker) an eine Person dieser Schicht ausgegeben und später zurückgenommen (Uhrzeiten). Ein Gerät wird je Schicht an höchstens eine Person ausgegeben.
Personen, Veranstaltungen, Räume und Geräte sind in den vorhandenen Tabellen
person,veranstaltung,raumundgeraetgespeichert.
Emres unvollständiger Entwurf (die Zahl der Leerzeilen ist nicht verbindlich):

a) Vervollständige das Datenmodell, sodass es die Anforderungen erfüllt und der dritten Normalform entspricht. Ergänze in den Tabellen die fehlenden Attribute, gib der leeren Tabelle einen sinnvollen Namen und Attribute, kennzeichne alle Primär- und Fremdschlüssel mit PK bzw. FK und zeichne die Beziehungen mit ihren Kardinalitäten ein. (23 Punkte)

In Textform:
aufgabenbereich (aufgabenbereich_id (PK), bezeichnung, beschreibung, verantwortlich_id (FK → person))
schicht (schicht_id (PK), beginn, ende, max_helfende, veranstaltung_id (FK),
aufgabenbereich_id (FK), raum_id (FK, darf NULL sein))
einsatz (schicht_id (PK, FK), person_id (PK, FK), eingetragen_am, erschienen)
geraeteausgabe (geraet_id (PK, FK), schicht_id (PK, FK¹), person_id (FK¹, NOT NULL), ausgegeben_um, zurueck_um)
¹ (schicht_id, person_id) zusammen als Fremdschlüssel auf einsatz
Bewertung:
je Tabelle mit sinnvollem Namen und Nichtschlüsselattributen 1 Punkt (4 Punkte),
je richtiger Primärschlüssel von
aufgabenbereich,einsatzundgeraeteausgabe1 Punkt (3 Punkte),je Fremdschlüssel 1 Punkt (8 Punkte:
verantwortlich_id,veranstaltung_id,aufgabenbereich_id,raum_id,einsatz.schicht_id,einsatz.person_id,geraeteausgabe.geraet_id,geraeteausgabe.(schicht_id, person_id)),je Beziehung mit Kardinalität 1 Punkt (8 Punkte;
1stattcan der Raum-Seite ist ebenfalls richtig).
Worauf es ankommt:
einsatzlöst die m:n-Beziehung zwischenpersonundschichtauf;eingetragen_amunderschienengehören zur Beziehung, nicht zu einer der beiden Tabellen.personsteht zweimal in Beziehung: als verantwortliche Lehrkraft eines Aufgabenbereichs und als Helfende ineinsatz.raum_idist ein optionaler Fremdschlüssel (NULLerlaubt). In Notationen mit Optionalität steht deshalb auf der Seite vonraumeinc(bzw.0..1), die Beziehung lautet c:n. Dass Schichten der Raumbetreuung tatsächlich einen Raum haben, kann das Modell allein nicht erzwingen; das prüft die Anwendung.Dass ein Gerät nur an eine Person der Schicht ausgegeben wird, sichert der zusammengesetzte Fremdschlüssel
(schicht_id, person_id)aufeinsatz– eine Beziehung zu einer Beziehung. Eine Lösung mit zwei getrennten Fremdschlüsseln aufschichtundpersonerfüllt diese Anforderung nicht vollständig (Abzug 1 Punkt). Der Primärschlüssel(geraet_id, schicht_id)verhindert, dass ein Gerät in einer Schicht zweimal ausgegeben wird. Wichtig:person_idmussNOT NULLsein – ist ein Teil eines zusammengesetzten Fremdschlüssels leer, prüft MariaDB den Fremdschlüssel nicht.Die Höchstzahl
max_helfendeist ein Attribut der Schicht; die aktuelle Zahl der Eingetragenen wird nicht gespeichert, sondern gezählt.
b) Erläutere, wie die Beziehung zwischen Personen und Schichten im Relationenmodell abgebildet wird und welche Kardinalitäten dabei im Modell entstehen. (3 Punkte)
Zwischen Person und Schicht besteht eine m:n-Beziehung. Relationale Datenbanken können sie nicht direkt speichern (ein Attribut kann nur einen Wert aufnehmen). Sie wird über eine Zwischentabelle (einsatz) aufgelöst (1 Punkt). Die Zwischentabelle enthält die Primärschlüssel beider Tabellen als Fremdschlüssel; zusammen bilden sie ihren Primärschlüssel (1 Punkt). Aus der m:n-Beziehung werden dadurch zwei 1:n-Beziehungen: person 1:n einsatz und schicht 1:n einsatz (1 Punkt).
c) Laut Aufsichtsregeln der Schule muss jede Schicht mit mindestens zwei Personen besetzt sein. Begründe, warum sich diese Regel nicht allein durch Primär- und Fremdschlüssel im Relationenmodell sicherstellen lässt, und nenne zwei Möglichkeiten, wie sie trotzdem eingehalten werden kann. (3 Punkte)
Begründung (1 Punkt): Kardinalitäten im Relationenmodell unterscheiden nur „einer“ und „viele“ (bzw. optional/verpflichtend). Eine Mindestanzahl größer als eins betrifft mehrere Zeilen von einsatz gleichzeitig; Fremdschlüssel und Primärschlüssel prüfen aber immer nur eine einzelne Zeile.
Möglichkeiten (je 1 Punkt, zwei verlangt):
Prüfung in der Anwendung (z. B. Warnung im Schichtplan, Schicht erst „bestätigt“, wenn zwei Einträge vorliegen),
Abfrage bzw. View, die unterbesetzte Schichten auflistet – auch solche ohne jeden Eintrag (
schicht LEFT JOIN einsatz … GROUP BY s.schicht_id HAVING COUNT(e.person_id) < 2), und regelmäßige Kontrolle durch die Verantwortlichen,Trigger bzw. gespeicherte Prozedur, die das Austragen verhindert, wenn danach weniger als zwei Personen übrig wären.
d) Mia Schröder findet die Tabelle für die Einsätze umständlich. Sie schlägt vor, in der Tabelle schicht eine Spalte helfende VARCHAR(500) anzulegen, in der die Namen der Helfenden kommagetrennt stehen, z. B. 'Mia Schröder, Hannah Klein'. Nimm Stellung zu diesem Vorschlag. (4 Punkte)
Der Vorschlag ist abzulehnen (1 Punkt für eine begründete Entscheidung), z. B. weil (je Argument 1 Punkt, drei verlangt):
die Spalte nicht atomar ist – die Tabelle verletzt schon die erste Normalform,
Namen redundant zur Tabelle
persongespeichert werden: Ändert sich ein Name, muss er in allen Schichten geändert werden (Änderungsanomalie), Schreibweisen weichen ab,es keine Fremdschlüsselbeziehung gibt: Die Datenbank kann nicht prüfen, ob die Person existiert, und Namensgleichheiten sind nicht unterscheidbar,
Auswertungen wie „Welche Schichten übernimmt Hannah Klein?“ oder „Wie viele Helfende hat jede Schicht?“ nur mit fehleranfälliger Textsuche (
LIKE '%Klein%') möglich sind,die Beziehungsattribute (
eingetragen_am,erschienen) und die Geräteausgabe je Person nicht mehr abgebildet werden können.
e) Nenne, wie die Anforderung „Die übrigen Schichten haben keinen festen Raum“ in der Tabelle schicht umgesetzt wird, und wie man dies im Modell kennzeichnen kann. (2 Punkte)
Der Fremdschlüssel raum_id wird ohne Eingabepflicht angelegt, er darf also NULL sein (1 Punkt). Im Modell kann das z. B. durch den Zusatz „NULL erlaubt“ bzw. das Fehlen von NOT NULL, durch eine Kardinalität c/0..1 auf der Raum-Seite oder (in der Krähenfußnotation) durch einen Kreis am Linienende gekennzeichnet werden (1 Punkt).
Aufgabe 4: Interessengruppen in einer Freizeit-App (Stufe 2 – Kernkompetenz)
(ca. 33 min Bearbeitungszeit)
Du bist Auszubildende*r im Entwicklungsteam der Let’s Meet GmbH in Bielefeld. Die App soll um Interessengruppen erweitert werden: Wer regelmäßig wandern, Schach spielen oder Sprachen üben möchte, kann einer Gruppe beitreten. Gruppen können eigene Aktivitäten veranstalten und Umfragen starten (z. B. „Welche Strecke wandern wir im November?“). Außerdem soll die Verifizierung von Konten, die bisher nur als Ja/Nein-Feld verifiziert in benutzer steht, genauer dokumentiert werden. Yusuf Demir hat dazu das folgende ER-Modell in Chen-Notation entworfen (Doppellinien kennzeichnen schwache Entitätstypen und identifizierende Beziehungen; die Verifizierung hat keinen eigenen Schlüssel, sie wird über das Benutzerkonto identifiziert):

Die Tabellen benutzer (benutzer_id (PK), …), hobby (hobby_id (PK), …) und aktivitaet (aktivitaet_id (PK), …) sind bereits vorhanden. Aus der Ist-Analyse ergeben sich zusätzlich folgende Anforderungen:
Jede Gruppe hat genau eine aktuelle Gruppenleitung (ein Benutzerkonto). Frühere Leitungen müssen nicht gespeichert werden.
Wer aus einer Gruppe austritt, bekommt ein Austrittsdatum. Tritt dieselbe Person später erneut bei, wird eine neue Mitgliedschaft erfasst; die alte bleibt erhalten.
Abstimmungen sind anonym: Es darf nicht nachvollziehbar sein, wer welche Antwortoption gewählt hat. Trotzdem darf jedes Mitglied je Umfrage nur einmal abstimmen.
a) Überführe das ER-Modell in ein relationales Datenmodell in der dritten Normalform und erweitere es um die Anforderungen der Ist-Analyse. Kennzeichne Primärschlüssel mit PK und Fremdschlüssel mit FK und zeichne die Beziehungen mit ihren Kardinalitäten ein. (25 Punkte)

In Textform:
gruppe (gruppe_id (PK), name, beschreibung, gegruendet_am, hobby_id (FK), leitung_id (FK → benutzer))
mitgliedschaft (benutzer_id (PK, FK), gruppe_id (PK, FK), beitritt_am (PK), austritt_am, rolle)
verifizierung (benutzer_id (PK, FK), verfahren, geprueft_am, ergebnis)
umfrage (gruppe_id (PK, FK), umfrage_nr (PK), frage, endet_am)
antwortoption (gruppe_id (PK, FK¹), umfrage_nr (PK, FK¹), option_nr (PK), text)
abstimmung (gruppe_id (PK, FK¹), umfrage_nr (PK, FK¹), benutzer_id (PK, FK))
stimme (stimme_id (PK), gruppe_id (FK²), umfrage_nr (FK²), option_nr (FK²))
aktivitaet (aktivitaet_id (PK), …, gruppe_id (FK, NULL erlaubt)) -- vorhandene Tabelle, erweitert
¹ zusammen Fremdschlüssel auf umfrage ² zusammen Fremdschlüssel auf antwortoption
Bewertung: je Tabelle mit Primärschlüssel und Attributen 2 Punkte (7 Tabellen, 14 Punkte), je Beziehung mit Fremdschlüssel und Kardinalität 1 Punkt (11 Punkte). Optionale Seiten (c) müssen nicht gekennzeichnet sein.
Worauf es ankommt:
m:n „ist Mitglied“ → Zwischentabelle
mitgliedschaftmit den Beziehungsattributen. Weil dieselbe Person mehrfach beitreten darf, reicht(benutzer_id, gruppe_id)als Primärschlüssel nicht;beitritt_amgehört dazu (alsDATETIME, falls ein Wiedereintritt am selben Tag möglich sein soll; alternativ: künstlicher Schlüsselmitgliedschaft_id).rolleunterscheidet nur Mitglied und Moderation – die Leitung steht ingruppe.leitung_idund wird nicht doppelt gespeichert.1:n „hat Thema“ und „veranstaltet“ → Fremdschlüssel auf der n-Seite (
gruppe.hobby_id,aktivitaet.gruppe_id). Weil nicht jede Aktivität zu einer Gruppe gehört, istaktivitaet.gruppe_idoptional.Gruppenleitung: Weil nur die aktuelle Leitung zählt, genügt ein Fremdschlüssel
leitung_idingruppe(1:n zwischenbenutzerundgruppe). Müsste die Historie erhalten bleiben, wäre eine eigene Tabelle mit Zeitraum nötig.1:1 „wird geprüft“ →
verifizierungübernimmt den Primärschlüssel vonbenutzerals Primär- und Fremdschlüssel (Kardinalität 1:c, nicht jedes Konto ist verifiziert). Siehe auch Teilaufgabe b.Schwache Entitätstypen:
umfragewird über die Gruppe und die Umfrage-Nummer identifiziert,antwortoptionüber die Umfrage (zwei Attribute) und die Options-Nummer. Der Fremdschlüssel vonantwortoptionaufumfrageist deshalb zusammengesetzt.Anonymität:
abstimmungspeichert nur, dass jemand abgestimmt hat (der Primärschlüssel verhindert eine zweite Abstimmung),stimmenur, was gewählt wurde – ohne Bezug zur Person. Siehe Teilaufgabe c. Zwei Regeln kann das Modell nicht allein sicherstellen: dass nur aktuelle Mitglieder abstimmen (abstimmung.benutzer_idverweist aufbenutzer, nicht auf eine Mitgliedschaft) und dass zu jeder Stimme genau eine Abstimmung gehört. Beides übernimmt die Anwendung, die beide Einträge in einer Transaktion schreibt.
b) Für die 1:1-Beziehung zwischen Benutzer und Verifizierung gibt es mehrere Umsetzungsmöglichkeiten. Entwirf zwei Varianten, indem Du jeweils nur die beteiligten Tabellen mit ihren Schlüsselattributen angibst, und begründe, welche Variante Du für Let’s Meet wählst. (4 Punkte)
Varianten (je 1 Punkt, zwei verlangt):
Zusammenfassen in einer Tabelle:
benutzer (benutzer_id (PK), …, verifizierung_verfahren, verifizierung_geprueft_am, verifizierung_ergebnis)– die Spalten bleiben bei nicht verifizierten Konten leer.Zwei Tabellen mit gemeinsamem Primärschlüssel:
benutzer (benutzer_id (PK), …)undverifizierung (benutzer_id (PK, FK), …).Eigener Primärschlüssel und eindeutiger Fremdschlüssel:
verifizierung (verifizierung_id (PK), benutzer_id (FK, UNIQUE), …)– ohneUNIQUEentstünde versehentlich eine 1:n-Beziehung.
Begründung (2 Punkte), z. B. für Variante 2: Nicht alle Konten sind verifiziert, die Verifizierungsdaten werden selten gebraucht und unterliegen eigenen Löschfristen (Datenminimierung: Nachweise der Prüfung können getrennt gelöscht werden, ohne das Konto anzufassen). Der gemeinsame Schlüssel garantiert die 1:1-Beziehung ohne zusätzliches UNIQUE. Das bisherige Feld benutzer.verifiziert ist dann ein abgeleitetes Attribut und sollte entfallen (oder bewusst als Cache dokumentiert werden), weil es sonst den Daten in verifizierung widersprechen kann. Variante 1 ist ebenfalls vertretbar, wenn begründet wird, dass sie einfacher abzufragen ist.
c) Erläutere, wie Dein Modell sicherstellt, dass jedes Mitglied je Umfrage nur einmal abstimmt, die Abstimmung aber anonym bleibt. Jonas Weber schlägt vor, einfach die benutzer_id in der Tabelle stimme zu speichern und sie „nur intern“ zu verwenden. Nimm dazu Stellung. (4 Punkte)
Erläuterung (2 Punkte): Die Teilnahme und die Wahl werden in zwei getrennten Tabellen gespeichert. abstimmung hat den Primärschlüssel (gruppe_id, umfrage_nr, benutzer_id) – ein zweiter Eintrag derselben Person für dieselbe Umfrage wird von der Datenbank abgelehnt. stimme enthält nur die gewählte Antwortoption, aber keinen Fremdschlüssel auf benutzer. Damit die Zuordnung nicht über die Reihenfolge oder Zeitstempel rekonstruiert werden kann, speichert stimme keinen genauen Zeitpunkt (und die Anwendung schreibt beide Einträge in einer Transaktion). Noch sicherer ist eine Zähltabelle (gruppe_id, umfrage_nr, option_nr, anzahl) statt einzelner Stimmen, denn auch eine fortlaufende stimme_id verrät die Reihenfolge.
Stellungnahme (2 Punkte): Der Vorschlag ist abzulehnen. Mit der benutzer_id wäre jede Stimme einer Person zuzuordnen – die Abstimmung wäre nicht mehr anonym, sondern höchstens pseudonym. Das widerspricht der Anforderung und dem Grundsatz der Datenminimierung (Art. 5 Abs. 1 lit. c DSGVO): Für die Auswertung ist die Person nicht nötig. „Nur intern“ schützt nicht vor Fehlern, Datenpannen oder neugierigen Administrator*innen.
d) Ergänze die bestehende Tabelle aktivitaet mit einer SQL-Anweisung um den Fremdschlüssel auf die Gruppe. Aktivitäten ohne Gruppe sollen weiterhin möglich sein; wird eine Gruppe gelöscht, sollen ihre Aktivitäten erhalten bleiben. (3 Punkte)
ALTER TABLE aktivitaet
ADD COLUMN gruppe_id INT UNSIGNED NULL,
ADD CONSTRAINT fk_akt_gruppe FOREIGN KEY (gruppe_id)
REFERENCES gruppe (gruppe_id) ON DELETE SET NULL;Bewertung: neue Spalte mit passendem Datentyp und NULL erlaubt 1 Punkt, Fremdschlüssel-Constraint 1 Punkt, ON DELETE SET NULL 1 Punkt.
Aufgabe 5: Fahrgemeinschaften für Berufsschultage (Stufe 2 – Kernkompetenz)
(ca. 29 min Bearbeitungszeit)
Du bist Auszubildende*r im FIA-Projektteam der Mitfahr-App „RatzFahrt“ am Ratz und Rübe Berufskolleg. Neben einzelnen Fahrtangeboten soll die App künftig feste Fahrgemeinschaften verwalten, die jede Woche an denselben Schultagen fahren. Bisher hat Oksana Melnyk sie in einer Tabellenkalkulation gepflegt (Auszug):
| Gemeinschaft | Fahrer*in (Klasse) | Fahrzeug | Tage | Route (Haltepunkt, Abfahrt) | Mitfahrende (Zustieg) |
|---|---|---|---|---|---|
| GT-Montag | Ben Richter (EGS25) | PKW silber, 3 Plätze | Mo | Gütersloh Hbf ZOB Steig 3, 07:00; Bahnhof Brackwede, 07:20 | Lukas Hofmann (IKS25), Gütersloh Hbf |
| GT-Di-Fr | Thomas Becker (Lehrkraft) | PKW blau, 4 Plätze | Di, Fr | Gütersloh Hauptbahnhof, 07:15; Brackwede Bf, 07:35 | Aylin Kaya (KBM26c), Gütersloh Hbf |
| SZ-Mo-Do | Niklas Fischer (IKS25) | Kleinbus weiß, 7 Plätze | Mo, Do | Bad Salzuflen Busbahnhof, 06:45; Herford P+R am Bahnhof, 07:00 | (noch niemand) |
Die Tabellen nutzer (nutzer_id (PK), vorname, nachname, …), fahrzeug (fahrzeug_id (PK), nutzer_id (FK), sitzplaetze, …) und haltepunkt (haltepunkt_id (PK), name, plz, ort, …) gibt es in der Datenbank bereits. Jonas Wolff hat folgenden ersten Entwurf erstellt:

a) Erläutere anhand eines konkreten Beispiels aus der Tabellenkalkulation, welches Problem beim Ändern der Daten entstehen kann. (2 Punkte)
Änderungsanomalie (1 Punkt für das Problem, 1 Punkt für das Beispiel), z. B.: Der Haltepunkt am Gütersloher Hauptbahnhof steht in mehreren Zeilen und Spalten – sogar in unterschiedlichen Schreibweisen („Gütersloh Hbf ZOB Steig 3“, „Gütersloh Hauptbahnhof“, „Gütersloh Hbf“). Zieht der Haltepunkt an einen anderen Steig um, muss jede Fundstelle geändert werden; wird eine vergessen, sind die Daten widersprüchlich (inkonsistent). Ebenso: Bekommt Ben Richter ein anderes Auto und fährt er weitere Gemeinschaften, muss die Fahrzeugangabe in jeder dieser Zeilen geändert werden.
b) Analysiere den Entwurf von Jonas Wolff. Nenne fünf Fehler bzw. Schwachstellen und begründe jeweils kurz. (10 Punkte)
Je Fehler mit Begründung 2 Punkte (fünf verlangt):
fahrgemeinschaft.wochentageenthält mehrere Werte („Di, Fr“) – nicht atomar, verletzt die erste Normalform. Besser: eigene Tabellefg_wochentag (fg_id, wochentag)(vertretbar ist auch der MariaDB-DatentypSET('Mo','Di','Mi','Do','Fr'), wenn begründet).fahrgemeinschaft.freie_plaetzeist ein abgeleitetes Attribut (Sitzplätze des Fahrzeugs minus Anzahl der Mitfahrenden). Es kann den tatsächlichen Daten widersprechen und wird deshalb berechnet statt gespeichert.Primärschlüssel von
routebesteht nur ausfg_id: Damit könnte jede Fahrgemeinschaft nur einen Haltepunkt haben. Richtig:(fg_id, haltepunkt_id)oder(fg_id, reihenfolge).Kardinalität
haltepunkt–routeist 1:1 eingetragen; ein Haltepunkt gehört aber zu vielen Routen (z. B. Gütersloh Hbf zu zwei Gemeinschaften) – richtig ist 1:n.mitfahrt.nutzer_nameist redundant: Der Name hängt übernutzer_idtransitiv vom Primärschlüssel ab (Verstoß gegen die 3. Normalform, Änderungsanomalie).mitfahrt.zustiegist ein Freitext statt eines Fremdschlüssels: Die Datenbank kann nicht prüfen, ob der Haltepunkt existiert und ob die Gemeinschaft ihn überhaupt anfährt; Schreibweisen weichen ab.(Schwachstelle)
mitfahrthat einen künstlichen Schlüssel ohneUNIQUE (fg_id, nutzer_id)– dieselbe Person könnte doppelt eingetragen werden.
c) Entwickle ein korrigiertes relationales Datenmodell in der dritten Normalform für die Fahrgemeinschaften, das die Daten der Tabellenkalkulation vollständig aufnehmen kann. Verwende die vorhandenen Tabellen. Stelle sicher, dass Mitfahrende nur an einem Haltepunkt zusteigen können, der zur Route ihrer Fahrgemeinschaft gehört. Kennzeichne PK und FK und zeichne die Beziehungen mit Kardinalitäten ein. (17 Punkte)

In Textform:
fahrgemeinschaft (fg_id (PK), bezeichnung, fahrzeug_id (FK))
fg_wochentag (fg_id (PK, FK), wochentag (PK))
route_halt (fg_id (PK, FK), haltepunkt_id (PK, FK), reihenfolge, abfahrt)
mitgliedschaft (fg_id (PK, FK¹), nutzer_id (PK, FK), zustieg_haltepunkt_id (FK¹, NOT NULL))
¹ (fg_id, zustieg_haltepunkt_id) zusammen Fremdschlüssel auf route_halt
Bewertung: je Tabelle mit Attributen 1 Punkt (4 Punkte), je Primärschlüssel 1 Punkt (4 Punkte), je Fremdschlüssel 0,5 Punkte (6 Fremdschlüssel, 3 Punkte), je Beziehung mit Kardinalität 1 Punkt (6 Punkte: fahrzeug–fahrgemeinschaft, fahrgemeinschaft–fg_wochentag, fahrgemeinschaft–route_halt, haltepunkt–route_halt, nutzer–mitgliedschaft, route_halt–mitgliedschaft).
Hinweise:
Fahrer*in, Fahrzeugfarbe und Platzzahl ergeben sich über
fahrzeug_idausfahrzeugundnutzer; sie werden nicht infahrgemeinschaftwiederholt. Wer begründet, dass auch fremde Fahrzeuge gefahren werden (z. B. der Vereinsbus), darf zusätzlichfahrer_id (FK → nutzer)aufnehmen.Klasse und Schultage der Mitfahrenden stehen bereits in
nutzer/klasseund werden nicht übernommen.Der zusammengesetzte Fremdschlüssel
(fg_id, zustieg_haltepunkt_id)→route_halt (fg_id, haltepunkt_id)erzwingt, dass nur Haltepunkte der eigenen Route gewählt werden können. Eine Lösung mit einem einfachen Fremdschlüssel aufhaltepunktist ein gültiges Modell in der 3. NF, erfüllt diese Anforderung aber nicht (Abzug 1 Punkt).zustieg_haltepunkt_idmussNOT NULLsein, sonst prüft MariaDB den zusammengesetzten Fremdschlüssel nicht – und weilfg_idhier keinen eigenen Fremdschlüssel auffahrgemeinschafthat, könnte dann sogar eine nicht vorhandene Fahrgemeinschaft eingetragen werden.UNIQUE (fg_id, reihenfolge)inroute_haltverhindert zwei Halte an derselben Position.
d) Die vorhandene Tabelle haltepunkt (haltepunkt_id (PK), name, plz, ort, …) entspricht streng genommen nicht der dritten Normalform. Erläutere, warum, und nimm Stellung, ob sie trotzdem so bleiben kann. (3 Punkte)
Erläuterung (2 Punkte): In der dritten Normalform darf kein Nichtschlüsselattribut von einem anderen Nichtschlüsselattribut abhängen. Hier bestimmt die Postleitzahl den Ort (plz → ort), der Ort hängt also nur transitiv über plz vom Primärschlüssel haltepunkt_id ab. Ändert sich der Ortsname zu einer PLZ, müssten alle Datensätze mit dieser PLZ geändert werden.
Stellungnahme (1 Punkt), z. B.: Die Tabelle kann so bleiben. Die Abhängigkeit plz → ort gilt in der Praxis nicht streng (es gibt PLZ für mehrere Orte und Orte mit mehreren PLZ), eine eigene Tabelle postleitzahl brächte bei wenigen Haltepunkten kaum Nutzen, aber zusätzliche Verbünde. Viele Aufgaben erlauben deshalb ausdrücklich, dass PLZ und Ort in einer Tabelle stehen. Eine Auslagerung ist ebenfalls richtig, wenn sie begründet wird (z. B. bei vielen Adressen und Pflege über ein amtliches PLZ-Verzeichnis).
Aufgabe 6: Probefahrten aus einer Tabellenkalkulation übernehmen (Stufe 3 – Profilkompetenz)
(ca. 38 min Bearbeitungszeit)
Du bist Auszubildende*r bei der CSB-Rad GmbH in Bielefeld und unterstützt Werkstattleiter Bastian Ludwig bei der Auswertung von Probefahrten. Interessierte können E-Bikes und Lastenräder an der Werkstatt in Sennestadt Probe fahren. Bisher trägt das Verkaufsteam die Probefahrten in eine Tabellenkalkulation ein. Künftig sollen sie in der Shop-Datenbank gespeichert werden, damit sich auswerten lässt, welche Modelle nach einer Probefahrt gekauft werden. Bastian gibt Dir den folgenden CSV-Export:
Nr;Datum;Interessent;Kontakt;Kd-Nr;Probefahrt mit;Akku;Berater;Dauer;Kauf
1;03.10.2026;Kühn, Hans-Jürgen;0521 0100202;2;RAD-EB-02 E-Bike Kanal, RAD-EB-01 E-Bike Altstadt;500 Wh, 400 Wh;Selin Arslan;45 min;nein
2;2026-10-05;Mira Engel;mira.engel@example.org;3;RAD-LR-03 Lastenrad Long John;;Paul Neubauer;1 h;nein
3;05.10.2026;Tarek Haddad;0176 04069031;;RAD-CITY-01 Stadtrad Promenade;;Selin Arslan;30;
3;05.10.2026;Tarek Haddad;0176 04069031;;RAD-CITY-01 Stadtrad Promenade;;Selin Arslan;30;
4;10.10.2026;Hans-Jürgen Kühn;hj.kuehn@example.org;2;RAD-EB-02 E-Bike Kanal;500 Wh;S. Arslan;20 min;x
5;;;;;;;;;
Weitere Informationen:
In der Datenbank gibt es bereits die Tabellen
kunde (kunde_id (PK), vorname, nachname, email, telefon, …),artikel (artikel_id (PK), artikelnr (UNIQUE), bezeichnung, …)undmitarbeiter (mitarbeiter_id (PK), vorname, nachname). Die Artikel haben die IDs 1 (RAD-CITY-01), 2 (RAD-EB-02), 3 (RAD-LR-03) und 9 (RAD-EB-01); Selin Arslan hat diemitarbeiter_id2, Paul Neubauer die 3. Die SpalteKd-Nrenthält diekunde_id.Nicht alle Interessierten sind schon Kund*innen. Wer später bestellt, soll mit dem Kundenkonto verknüpft werden können.
Die Nummer
Nrwird vom Verkaufsteam fortlaufend vergeben und steht auf dem Probefahrtschein, den die Interessierten unterschreiben.
a) Untersuche den Export auf Mängel der Datenqualität. Ergänze die Tabelle um vier verschiedene Mängel mit je einem Beispiel aus dem Export und einer Regel, nach der Du die Daten vor der Übernahme bereinigst. (8 Punkte)
| Mangel | Beispiel im Export | Bereinigungsregel |
|---|---|---|
| … | … | … |
Je Mangel 2 Punkte (Beispiel 1 Punkt, Regel 1 Punkt), z. B.:
| Mangel | Beispiel im Export | Bereinigungsregel |
|---|---|---|
| doppelter Datensatz | Zeile mit Nr. 3 steht zweimal | Duplikate (gleiche Nr. und gleicher Inhalt) entfernen, eine Zeile behalten |
| leerer Datensatz | Nr. 5 ohne Inhalt | Zeilen ohne Pflichtangaben (Datum, Interessent*in) verwerfen und protokollieren |
| uneinheitliches Datumsformat | 03.10.2026 und 2026-10-05 |
alle Daten in ein Format umwandeln (JJJJ-MM-TT, Datentyp DATE) |
| dieselbe Person unterschiedlich geschrieben | Kühn, Hans-Jürgen und Hans-Jürgen Kühn |
Namen in Vorname und Nachname aufteilen; Personen über die Kundennummer bzw. Kontaktdaten zusammenführen |
| mehrere Werte in einer Zelle | zwei Räder und zwei Akkuangaben in Nr. 1 | je Rad einen eigenen Datensatz bilden (Wiederholungsgruppe auflösen) |
| verschiedene Angaben in einer Spalte | Kontakt enthält Telefonnummern oder E-Mail-Adressen |
in die Spalten Telefon und E-Mail aufteilen |
| uneinheitliche Einheiten und Werte | Dauer 45 min, 1 h, 30; Kauf nein, x, leer |
Dauer in Minuten als Zahl, Kauf als Wahrheitswert (x = ja; leer = nein nach Rückfrage oder als unbekannt NULL speichern) |
| abgekürzte Namen | S. Arslan |
über die Mitarbeitertabelle auf mitarbeiter_id abbilden |
Andere sinnvolle Antworten sind möglich.
b) Überführe die bereinigten Probefahrtsdaten in ein relationales Datenmodell in der dritten Normalform. Binde die vorhandenen Tabellen ein, bilde Schlüssel aus vorhandenen Daten, wo das sinnvoll ist, und gib für die Attribute der neuen Tabellen Datentypen an. Kennzeichne Primärschlüssel mit PK und Fremdschlüssel mit FK und zeichne die Beziehungen mit Kardinalitäten ein. Notiere Annahmen, die Du triffst. (16 Punkte)

In Textform (vorhandene Tabellen nur mit Schlüsseln):
interessent (interessent_id INT (PK), vorname VARCHAR(50), nachname VARCHAR(50),
telefon VARCHAR(25) NULL, email VARCHAR(100) NULL,
kunde_id INT (FK, UNIQUE, NULL erlaubt))
probefahrt (probefahrt_nr INT (PK), datum DATE, dauer_min SMALLINT, kauf BOOLEAN,
interessent_id INT (FK), mitarbeiter_id INT (FK))
probefahrt_rad (probefahrt_nr INT (PK, FK), artikel_id INT (PK, FK))
Beziehungen: kunde c : c interessent (beide Seiten optional), interessent 1 : n probefahrt, mitarbeiter 1 : n probefahrt, probefahrt 1 : n probefahrt_rad, artikel 1 : n probefahrt_rad.
Annahmen (Beispiele): Eine Probefahrt wird von genau einer Person und einer Beraterin bzw. einem Berater betreut; bei einer Probefahrt können mehrere Modelle gefahren werden (m:n über probefahrt_rad); erfasst wird das Modell (Artikel), nicht das einzelne Vorführrad; die Nummer vom Probefahrtschein ist eindeutig und wird als natürlicher Primärschlüssel übernommen; eine interessierte Person gehört höchstens zu einem Kundenkonto; nach der Verknüpfung gelten die Kontaktdaten in kunde, die Angaben in interessent werden dann nicht mehr gepflegt bzw. gelöscht. Die Akkukapazität wird nicht bei der Probefahrt gespeichert (siehe d).
Bewertung: drei neue Tabellen (3 Punkte), Primär- und Fremdschlüssel einschließlich des zusammengesetzten Schlüssels in probefahrt_rad (4 Punkte), Attribute mit passenden Datentypen, Name aufgeteilt, Kontakt aufgeteilt (4 Punkte), fünf Beziehungen mit Kardinalitäten (3 Punkte), nachvollziehbare Annahmen (2 Punkte).
Auch richtig: Interessierte direkt als Datensätze in kunde anlegen, wenn begründet wird, dass email dort dann nicht mehr verpflichtend sein darf; ein künstlicher Schlüssel probefahrt_id mit probefahrt_nr als UNIQUE-Attribut. Ein DDL-Skript zur Beispiellösung mit Testdaten liegt unter src/aufgabe6.sql.
c) Trage die Probefahrten Nr. 1 und Nr. 4 bereinigt in die Tabelle der Probefahrten und die Zuordnungstabelle zu den Rädern Deines Modells ein (in der Beispiellösung probefahrt und probefahrt_rad). Hans-Jürgen Kühn erhält die interessent_id 1. (5 Punkte)
probefahrt (je Zeile 1,5 Punkte):
| probefahrt_nr | datum | dauer_min | kauf | interessent_id | mitarbeiter_id |
|---|---|---|---|---|---|
| 1 | 2026-10-03 | 45 | FALSE | 1 | 2 |
| 4 | 2026-10-10 | 20 | TRUE | 1 | 2 |
probefahrt_rad (2 Punkte):
| probefahrt_nr | artikel_id |
|---|---|
| 1 | 2 |
| 1 | 9 |
| 4 | 2 |
Die Akkuangaben und die Bezeichnungen der Räder werden nicht übernommen, sie stehen bereits in artikel. Spaltennamen und Werte dürfen zu Deinem Modell aus b) passen.
d) Erläutere, warum die Spalte Akku nicht in die Zuordnungstabelle zwischen Probefahrt und Rad (z. B. probefahrt_rad) übernommen werden sollte und wo die Angabe stattdessen hingehört. (2 Punkte)
Die Akkukapazität hängt nur vom Modell (artikel_id) ab, nicht von der Probefahrt. In probefahrt_rad hinge sie also nur von einem Teil des zusammengesetzten Primärschlüssels ab (Verstoß gegen die zweite Normalform) und stünde bei jeder Probefahrt erneut (Redundanz) (1 Punkt). Sie gehört als Attribut in die Tabelle artikel (z. B. akku_wh) bzw. in eine Tabelle mit technischen Daten der Modelle (1 Punkt).
e) Bei den ersten Testimporten in MariaDB erscheinen die folgenden Fehlermeldungen. Beschreibe jeweils eine mögliche Ursache und wie Du den Fehler behebst. (6 Punkte)
ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint failsERROR 1292 (22007): Incorrect date value: '03.10.2026' for column 'datum'
Je Meldung 2 Punkte (Ursache 1 Punkt, Behebung 1 Punkt):
Ein Datensatz mit dem Primärschlüssel 3 existiert bereits – hier die doppelte Zeile Nr. 3, die nicht entfernt wurde (oder der Import wurde zweimal gestartet). Behebung: Duplikate vor dem Import entfernen bzw. bereits importierte Datensätze überspringen.
Ein Fremdschlüssel verweist auf einen Datensatz, den es (noch) nicht gibt, z. B. eine
probefahrtmit einerinteressent_id, die noch nicht angelegt ist, oder eine falsch zugeordneteartikel_id. Behebung: in der richtigen Reihenfolge importieren – zuerstinteressent, dannprobefahrt, zuletztprobefahrt_rad– und die Schlüsselwerte prüfen. Die Datenbank prüft die referentielle Integrität und weist den Datensatz ab.Das Datum steht noch im deutschen Format; MariaDB erwartet
JJJJ-MM-TT(bzw. der Wert passt nicht zum DatentypDATE). Die Fehlermeldung erscheint im üblichen strikten SQL-Modus; ohne ihn speichert MariaDB nur eine Warnung und0000-00-00. Behebung: Datumsangaben vorher umwandeln, z. B. beim Import mitSTR_TO_DATE('03.10.2026', '%d.%m.%Y').
f) Das Modell ist fertig. Der erste Arbeitsschritt ist: „Sicherungskopie des Exports anlegen“. Nenne fünf weitere Arbeitsschritte in einer sinnvollen Reihenfolge, bis die Probefahrten in der Datenbank genutzt werden können. (5 Punkte)
Je Schritt 1 Punkt, Reihenfolge muss sinnvoll sein, z. B.:
Sicherungskopie des Exports anlegen (vorgegeben).
Die Daten analysieren, Bereinigungsregeln festlegen und die Daten bereinigen (Duplikate, Formate, Aufteilung von Namen und Kontakt, Zuordnung der Kunden-, Artikel- und Mitarbeiter-IDs).
Die neuen Tabellen mit SQL anlegen (
interessentvorprobefahrtvorprobefahrt_rad), dabei Schlüssel und Datentypen festlegen.Die bereinigten Daten in der richtigen Reihenfolge importieren.
Den Import prüfen (Anzahl der Datensätze, Stichproben gegen den Export, Fremdschlüssel, Abfrage „Kaufquote je Modell“).
Zugriffsrechte für das Verkaufsteam vergeben und eine Eingabemaske bzw. Shop-Funktion bereitstellen.
Weitere mögliche Schritte: Löschfrist für Daten von Interessierten ohne Kauf festlegen (Datenschutz), Datensicherung einrichten, die alte Tabellenkalkulation schreibgeschützt archivieren, Verkaufsteam einweisen.
Aufgabe 7: Begutachtung der Einreichungen für ein Barcamp (Stufe 3 – Profilkompetenz)
(ca. 39 min Bearbeitungszeit)
Du bist Auszubildende*r im Orga-Team des Barcamps „Lernen.Digital.Leben 2027“ am Ratz und Rübe Berufskolleg. Der Call for Participation läuft; die eingereichten Sessions stehen bereits in der Datenbank barcamp. Dimitrios Papadopoulos beschreibt Dir, wie das Programmteam die Einreichungen künftig in der Barcamp-Software begutachten soll:
Die Tabellen
person (person_id (PK), vorname, nachname, email, …),veranstaltung (veranstaltung_id (PK), …)undsession (session_id (PK), veranstaltung_id (FK), titel, status, …)sowiesession_person (session_id (PK, FK), person_id (PK, FK), rolle)für die Referent*innen einer Session sind vorhanden.Jede Einreichung wird einem oder mehreren Themenfeldern zugeordnet, z. B. „KI und Lernen“ (Kürzel
KI), „Medienbildung“ (MB), „Making und Elektronik“ (MK) oder „Netz und Sicherheit“ (NS).Jedes Themenfeld wird von genau einer Person koordiniert. Für jedes Themenfeld sind außerdem mehrere Personen als Gutachter*innen eingetragen; eine Person kann für mehrere Themenfelder begutachten.
Ein Gutachten gibt eine Person zu einer Einreichung ab. Es enthält einen Kommentar und den Zeitpunkt der Abgabe. Je Einreichung gibt jede Person höchstens ein Gutachten ab.
Im Gutachten wird jedes der festgelegten Kriterien (Relevanz, Praxisbezug, Beteiligung des Publikums, Barrierefreiheit der Materialien) mit 1 bis 5 Punkten bewertet.
Jede Einreichung braucht mindestens zwei Gutachten. Niemand darf eine Einreichung begutachten, an der er oder sie selbst als Referent*in beteiligt ist.
Jede Statusänderung einer Einreichung (eingereicht, in Begutachtung, angenommen, abgelehnt, zurückgezogen) wird mit Zeitpunkt und der Person protokolliert, die den Status geändert hat.
a) Erstelle aus den Informationen ein relationales Datenmodell in der dritten Normalform. Binde die vorhandenen Tabellen ein und stelle sie nur mit ihren Schlüsseln dar. Kennzeichne Primärschlüssel mit PK und Fremdschlüssel mit FK und zeichne alle Beziehungen mit Kardinalitäten ein. (20 Punkte)

In Textform:
themenfeld (themenfeld_id (PK), kuerzel (UNIQUE), bezeichnung, koordination_id (FK → person))
session_themenfeld (session_id (PK, FK), themenfeld_id (PK, FK))
gutachterzustaendigkeit (person_id (PK, FK), themenfeld_id (PK, FK))
gutachten (session_id (PK, FK), gutachter_id (PK, FK → person), kommentar, erstellt_am)
kriterium (kriterium_id (PK), bezeichnung)
bewertung (session_id (PK, FK), gutachter_id (PK, FK), kriterium_id (PK, FK), punkte)
-- (session_id, gutachter_id) ist gemeinsam ein Fremdschlüssel auf gutachten
statusaenderung (aenderung_id (PK), session_id (FK), status_neu, geaendert_am, geaendert_von (FK → person))
Beziehungen: person 1 : n themenfeld (koordiniert), session 1 : n session_themenfeld, themenfeld 1 : n session_themenfeld, person 1 : n gutachterzustaendigkeit, themenfeld 1 : n gutachterzustaendigkeit, session 1 : n gutachten, person 1 : n gutachten (begutachtet), gutachten 1 : n bewertung, kriterium 1 : n bewertung, session 1 : n statusaenderung, person 1 : n statusaenderung (ändert).
Bewertung: sieben neue Tabellen (7 Punkte), Primärschlüssel (4 Punkte), Fremdschlüssel einschließlich der Rollennamen und des zusammengesetzten Fremdschlüssels in bewertung (4 Punkte), Beziehungen mit Kardinalitäten (5 Punkte).
Hinweise: Die Punkte gehören in bewertung, weil sie von Einreichung, Gutachter*in und Kriterium abhängen; der Kommentar gehört in gutachten, weil es ihn je Gutachten nur einmal gibt. Die Koordination ist eine eigene 1:n-Beziehung zwischen person und themenfeld, getrennt von der m:n-Beziehung der Gutachter*innen. Auch richtig: künstliche Schlüssel (gutachten_id) mit UNIQUE (session_id, gutachter_id); Status als eigene Werteliste status (status_id, bezeichnung) mit Fremdschlüssel in statusaenderung.
b) Nenne zwei Anforderungen aus der Beschreibung, die Dein Modell nicht über Schlüssel und Kardinalitäten sicherstellen kann, und gib jeweils an, wie sie trotzdem eingehalten werden können. (4 Punkte)
Je Anforderung 2 Punkte (Anforderung 1, Lösungsweg 1):
„Mindestens zwei Gutachten je Einreichung“: In der verwendeten Notation mit 1, c und n lässt sich „mindestens zwei“ nicht ausdrücken. Die Anwendung erlaubt den Status „angenommen“ bzw. „abgelehnt“ erst ab zwei Gutachten, oder eine Kontrollabfrage listet Einreichungen mit weniger als zwei Gutachten.
„Keine Begutachtung eigener Einreichungen“: Die Regel vergleicht Daten aus
gutachtenundsession_person. Sie wird in der Anwendung beim Zuteilen geprüft oder per Trigger beim Einfügen eines Gutachtens.
Auch richtig: „Punkte nur von 1 bis 5“ – über einen CHECK-Constraint lösbar (dann als Constraint, nicht als Kardinalität); „Gutachter*in muss für ein Themenfeld der Einreichung zuständig sein“ – Prüfung in der Anwendung.
c) Nach Einführung des Statusprotokolls schlägt Mia Schröder vor, das vorhandene Attribut session.status zu entfernen, weil sich der aktuelle Status aus der letzten Statusänderung ergibt. Nimm Stellung zu diesem Vorschlag. (3 Punkte)
Für den Vorschlag spricht: Der aktuelle Status ist aus statusaenderung ableitbar (letzter Eintrag je Session). Wird er zusätzlich in session gespeichert, ist er redundant und kann dem Protokoll widersprechen, wenn eine Änderung nur an einer Stelle eingetragen wird (1 Punkt). Dagegen spricht: Der Status wird sehr oft abgefragt (Sessionplan, Infomonitore); die Ableitung über den jeweils letzten Eintrag ist aufwendiger, und vorhandene Abfragen und Programme müssten angepasst werden (1 Punkt). Begründetes Fazit (1 Punkt), z. B.: Das Attribut entfernen und den aktuellen Status über eine Sicht (View) bereitstellen – oder es bewusst als redundante Kopie behalten, die nur gemeinsam mit dem Protokolleintrag in einer Transaktion bzw. per Trigger geändert wird.
d) Auch die Geräte der Veranstaltung stehen in der Datenbank: geraet (geraet_id (PK), typ, bezeichnung, mac (UNIQUE), raum_id (FK), …). Beim Aufbau wandern Infomonitore und Check-in-Terminals mehrfach zwischen den Räumen. Künftig soll nachvollziehbar sein, wann welches Gerät in welchem Raum stand.
da) Beschreibe zwei notwendige Änderungen am Datenmodell und skizziere die neue Tabelle mit Primär- und Fremdschlüsseln. (4 Punkte)
db) Erläutere, woran der aktuelle Standort eines Gerätes zu erkennen ist, und nenne eine Funktion, die eine Bildschirmmaske „Geräte im Raum“ damit anbieten kann. (2 Punkte)
da) Neue Tabelle für die Standortzuordnung mit Zeitraum anlegen (Skizze 2 Punkte, Beschreibung 1 Punkt):
geraetestandort (standort_id (PK), geraet_id (FK), raum_id (FK), von DATETIME, bis DATETIME NULL)
geraet 1 : n geraetestandort, raum 1 : n geraetestandort. Den Fremdschlüssel raum_id aus geraet entfernen, weil er nur einen Raum speichern kann und sonst doppelt zur neuen Tabelle gepflegt werden müsste (1 Punkt). Auch richtig: zusammengesetzter Primärschlüssel aus geraet_id und von.
db) Der aktuelle Standort ist der Datensatz eines Gerätes, bei dem bis leer (NULL) ist; bei einem Umzug wird bis auf den Umzugszeitpunkt gesetzt und ein neuer Datensatz angelegt (1 Punkt). Funktionen der Maske, z. B.: alle Geräte anzeigen, die gerade in einem Raum stehen; ein Gerät in einen anderen Raum umziehen; den bisherigen Standortverlauf eines Gerätes anzeigen (1 Punkt).
e) Hannah Klein schlägt vor, bei allen Fremdschlüsseln des neuen Modells die Löschweitergabe (ON DELETE CASCADE) einzustellen, „damit sich beim Löschen nichts verklemmt“. Erläutere die Auswirkung und nimm anhand von zwei Beziehungen aus Deinem Modell begründet Stellung. (5 Punkte)
Auswirkung (1 Punkt): Mit Löschweitergabe werden beim Löschen eines Datensatzes automatisch alle Datensätze gelöscht, die per Fremdschlüssel darauf verweisen – auch über mehrere Stufen.
Stellungnahme (je Beziehung 1,5 Punkte, Fazit 1 Punkt), z. B.:
gutachten→bewertung: sinnvoll. Bewertungen gehören untrennbar zu ihrem Gutachten; ohne Gutachten sind sie wertlos.person→gutachten,statusaenderungoderthemenfeld: nicht sinnvoll. Löscht jemand eine Person (z. B. nach dem Barcamp), verschwänden ihre Gutachten samt Bewertungen und das Protokoll der Statusänderungen; über die Koordination würde sogar ein ganzes Themenfeld mit allen Zuordnungen gelöscht. Hier istRESTRICT(Löschen verweigern) oder bei optionalen BeziehungenSET NULLbesser.
Fazit: Löschweitergabe nicht pauschal, sondern nur für abhängige Daten ohne eigenen Wert (Bewertungen, Zuordnungstabellen wie session_themenfeld) festlegen.
f) Erläutere am Beispiel der Tabellen gutachten und bewertung, was referentielle Integrität beim Einfügen und beim Löschen bedeutet. Gib außerdem eine Reihenfolge an, in der die neuen Tabellen angelegt werden können, und begründe sie. (5 Punkte)
Einfügen (1,5 Punkte): Eine Bewertung lässt sich nur speichern, wenn das Gutachten (gleiche session_id und gutachter_id) und das Kriterium bereits existieren; sonst meldet die Datenbank eine Verletzung der referentiellen Integrität.
Löschen (1,5 Punkte): Ein Gutachten kann nicht gelöscht werden, solange noch Bewertungen darauf verweisen (bei ON DELETE RESTRICT); erst müssen die Bewertungen gelöscht werden – oder sie werden bei ON DELETE CASCADE mitgelöscht.
Reihenfolge (2 Punkte), z. B.: kriterium und themenfeld → session_themenfeld und gutachterzustaendigkeit → gutachten → bewertung; statusaenderung jederzeit nach den vorhandenen Tabellen. Begründung: Eine Tabelle mit Fremdschlüssel kann erst angelegt werden, wenn die Tabelle existiert, auf die der Fremdschlüssel verweist (die „1“-Seite der Beziehung).
Links und weitere Informationen
Artikel „Der logische Datenbankentwurf mit dem Relationenmodell“ auf oer-informatik.de
als Nachschlagewerk: MariaDB Knowledge Base: Foreign Keys
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Übungsaufgaben zum Relationenmodell” von , Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/relationenmodell-uebungsaufgaben veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/db-design/relationenmodell. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 26.10.2026.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]
