====== LU08c – Fremdschlüssel direkt beim Erstellen (CREATE TABLE) ====== Wir setzen das ERD in SQL um und füllen es mit europäischen Beispielen (DE/CH/AT/FR/IT). DROP TABLE IF EXISTS Trip; DROP TABLE IF EXISTS Country; DROP TABLE IF EXISTS Continent; CREATE TABLE Continent ( ContinentID INT AUTO_INCREMENT PRIMARY KEY, ContinentName VARCHAR(50) NOT NULL UNIQUE ); CREATE TABLE Country ( CountryID INT AUTO_INCREMENT PRIMARY KEY, CountryName VARCHAR(100) NOT NULL UNIQUE, ContinentID INT NOT NULL, CONSTRAINT fk_country_continent FOREIGN KEY (ContinentID) REFERENCES Continent(ContinentID) ON DELETE RESTRICT ON UPDATE RESTRICT ); CREATE TABLE Trip ( TripID INT AUTO_INCREMENT PRIMARY KEY, CountryID INT NOT NULL, StartDate DATE NOT NULL, EndDate DATE NOT NULL, Price DECIMAL(10,2) NOT NULL, CONSTRAINT fk_trip_country FOREIGN KEY (CountryID) REFERENCES Country(CountryID) ON DELETE RESTRICT ON UPDATE RESTRICT ); **Warum diese Referenzaktionen?** * **RESTRICT** bei Country→Continent: Kontinente löscht man nicht „einfach so“. * **RESTRICT** bei Trip→Country: Eine Reise muss zu einem existierenden Land gehören. ===== Beispiel-Daten (Europa) ===== -- Kontinent INSERT INTO Continent (ContinentName) VALUES ('Europa'); -- Länder (DE/CH/AT/FR/IT) INSERT INTO Country (CountryName, ContinentID) SELECT x.CountryName, c.ContinentID FROM (SELECT 'Deutschland' CountryName UNION ALL SELECT 'Schweiz' UNION ALL SELECT 'Österreich' UNION ALL SELECT 'Frankreich' UNION ALL SELECT 'Italien') x JOIN Continent c ON c.ContinentName='Europa'; -- Reisen (Beispieldaten, Datum & Preis in EUR/CHF gemischt ist ok, wir speichern nur Zahl) INSERT INTO Trip (CountryID, StartDate, EndDate, Price) SELECT CountryID, '2025-07-12', '2025-07-20', 1250.00 FROM Country WHERE CountryName='Italien'; INSERT INTO Trip (CountryID, StartDate, EndDate, Price) SELECT CountryID, '2025-10-05', '2025-10-11', 820.00 FROM Country WHERE CountryName='Deutschland'; INSERT INTO Trip (CountryID, StartDate, EndDate, Price) SELECT CountryID, '2025-02-15', '2025-02-19', 590.00 FROM Country WHERE CountryName='Schweiz'; ===== Kontroll-Selects ===== SELECT ContinentID, ContinentName FROM Continent; SELECT CountryID, CountryName, ContinentID FROM Country ORDER BY CountryName; SELECT TripID, CountryID, StartDate, EndDate, Price FROM Trip ORDER BY StartDate; **Hinweis:** Die Reisedauer kann berechnet werden (z. B. `DATEDIFF(EndDate, StartDate)`), sie wird nicht gespeichert.