From abdd57ac0c11bfd415b0d055efcd9ddf0241c4be Mon Sep 17 00:00:00 2001
From: Dennis Eisold <de@itstall.de>
Date: Thu, 21 Nov 2019 12:52:34 +0100
Subject: [PATCH] Fixed Database

---
 pom.xml                                       |  19 +-
 .../java/de/telefonbuch/model/Datenbank.java  | 268 +++++++-----------
 uebung25telefonbuch.iml                       |   2 -
 3 files changed, 115 insertions(+), 174 deletions(-)
 delete mode 100644 uebung25telefonbuch.iml

diff --git a/pom.xml b/pom.xml
index 865c285..a3eb17e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,26 +1,27 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <groupId>de.itstall</groupId>
+    <groupId>de.telefonbuch</groupId>
     <artifactId>uebung25telefonbuch</artifactId>
     <version>1.0-SNAPSHOT</version>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
+        <maven.compiler.source>12</maven.compiler.source>
+        <maven.compiler.target>12</maven.compiler.target>
+        <maven.compiler.release>12</maven.compiler.release>
+        <javafx.version>12.0.2</javafx.version>
     </properties>
     <dependencies>
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-controls</artifactId>
-            <version>11.0.2</version>
+            <version>${javafx.version}</version>
         </dependency>
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-fxml</artifactId>
-            <version>11.0.2</version>
+            <version>${javafx.version}</version>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
         <dependency>
             <groupId>org.xerial</groupId>
             <artifactId>sqlite-jdbc</artifactId>
@@ -38,15 +39,15 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.0</version>
+                <version>3.8.1</version>
                 <configuration>
-                    <release>11</release>
+                    <release>${maven.compiler.release}</release>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.openjfx</groupId>
                 <artifactId>javafx-maven-plugin</artifactId>
-                <version>0.0.1</version>
+                <version>0.0.3</version>
                 <configuration>
                     <mainClass>de.telefonbuch.App</mainClass>
                 </configuration>
diff --git a/src/main/java/de/telefonbuch/model/Datenbank.java b/src/main/java/de/telefonbuch/model/Datenbank.java
index f7520b1..9e9d3d6 100644
--- a/src/main/java/de/telefonbuch/model/Datenbank.java
+++ b/src/main/java/de/telefonbuch/model/Datenbank.java
@@ -1,10 +1,11 @@
 package de.telefonbuch.model;
 
 import org.jetbrains.annotations.NotNull;
-
 import java.sql.*;
 
 public class Datenbank {
+	private final String VIEW_KONTAKTE = "telefonbuch";
+	private final String TABLE_KONTAKTE = "table_kontakte";
 
 	private Connection con;
 
@@ -23,158 +24,99 @@ public class Datenbank {
 		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
 
 		Statement stmt = this.con.createStatement();
-		String createTable, createTrigger, createView;
-
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_vorname\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
-				"vorname VARCHAR(50) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_nachname\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
-				"nachname VARCHAR(50) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_strasse\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
-				"strasse VARCHAR(50) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_hnr\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
-				"hnr VARCHAR(10) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_plz\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
-				"plz VARCHAR(5) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_ort\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ," +
-				"ort VARCHAR(50) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_telefon\" (" +
-				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
-				"telefon VARCHAR(30) NOT NULL " +
-				");";
-		stmt.execute(createTable);
-
-		createTable = "CREATE TABLE IF NOT EXISTS \"table_kontakte\" (\n" +
-				"    vorname VARCHAR,\n" +
-				"    nachname VARCHAR,\n" +
-				"    strasse VARCHAR,\n" +
-				"    hnr VARCHAR,\n" +
-				"    plz VARCHAR,\n" +
-				"    ort VARCHAR,\n" +
-				"    telefon VARCHAR,\n" +
-				"    FOREIGN KEY(vorname) REFERENCES table_vorname(vorname),\n" +
-				"    FOREIGN KEY(nachname) REFERENCES table_nachname(nachname),\n" +
-				"    FOREIGN KEY(strasse) REFERENCES table_strasse(strasse),\n" +
-				"    FOREIGN KEY(hnr) REFERENCES table_hnr(hnr),\n" +
-				"    FOREIGN KEY(plz) REFERENCES table_plz(plz),\n" +
-				"    FOREIGN KEY(ort) REFERENCES table_ort(ort),\n" +
-				"    FOREIGN KEY(telefon) REFERENCES table_telefon(telefon)\n" +
-				");";
-		stmt.execute(createTable);
-
-		createView = "CREATE VIEW IF NOT EXISTS \"view_kontakte\" AS " +
-				"           SELECT" +
-				"               table_vorname.vorname, " +
-				"               table_nachname.nachname, " +
-				"               table_strasse.strasse, " +
-				"               table_hnr.hnr, " +
-				"               table_plz.plz, " +
-				"               table_ort.ort, " +
-				"               table_telefon.telefon " +
-				"           FROM table_kontakte " +
-				"           INNER JOIN table_vorname ON table_kontakte.vorname = table_vorname.id" +
-				"           INNER JOIN table_nachname ON table_kontakte.nachname = table_nachname.id" +
-				"           INNER JOIN table_strasse ON table_kontakte.strasse = table_strasse.id" +
-				"           INNER JOIN table_hnr ON table_kontakte.hnr = table_hnr.id" +
-				"           INNER JOIN table_plz ON table_kontakte.plz = table_plz.id" +
-				"           INNER JOIN table_ort ON table_kontakte.ort = table_ort.id" +
-				"           INNER JOIN table_telefon ON table_kontakte.telefon = table_telefon.id;";
-		stmt.execute(createView);
-
-		createTrigger = "CREATE TRIGGER IF NOT EXISTS view_kontakte_INS\n" +
-				"INSTEAD OF INSERT ON view_kontakte FOR EACH ROW\n" +
-				"BEGIN\n" +
-				"   INSERT INTO table_vorname (vorname) SELECT NEW.vorname WHERE NOT EXISTS (SELECT 1 FROM table_vorname WHERE vorname = NEW.vorname);\n" +
-				"   INSERT INTO table_nachname (nachname) SELECT NEW.nachname WHERE NOT EXISTS (SELECT 1 FROM table_nachname WHERE nachname = NEW.nachname);\n" +
-				"   INSERT INTO table_strasse (strasse) SELECT NEW.strasse WHERE NOT EXISTS (SELECT 1 FROM table_strasse WHERE strasse = NEW.strasse);\n" +
-				"   INSERT INTO table_hnr (hnr) SELECT NEW.hnr WHERE NOT EXISTS (SELECT 1 FROM table_hnr WHERE hnr = NEW.hnr);\n" +
-				"   INSERT INTO table_plz (plz) SELECT NEW.plz WHERE NOT EXISTS (SELECT 1 FROM table_plz WHERE plz = NEW.plz);\n" +
-				"   INSERT INTO table_ort (ort) SELECT NEW.ort WHERE NOT EXISTS (SELECT 1 FROM table_ort WHERE ort = NEW.ort);\n" +
-				"   INSERT INTO table_telefon (telefon) SELECT NEW.telefon WHERE NOT EXISTS (SELECT 1 FROM table_telefon WHERE telefon = NEW.telefon);\n" +
-				"   INSERT INTO table_kontakte (vorname, nachname, strasse, hnr, plz, ort, telefon)\n" +
-				"       SELECT\n" +
-				"           (SELECT id FROM table_vorname WHERE vorname = NEW.vorname),\n" +
-				"           (SELECT id FROM table_nachname WHERE nachname = NEW.nachname),\n" +
-				"           (SELECT id FROM table_strasse WHERE strasse = NEW.strasse),\n" +
-				"           (SELECT id FROM table_hnr WHERE hnr = NEW.hnr),\n" +
-				"           (SELECT id FROM table_plz WHERE plz = NEW.plz),\n" +
-				"           (SELECT id FROM table_ort WHERE ort = NEW.ort),\n" +
-				"           (SELECT id FROM table_telefon WHERE telefon = NEW.telefon);\n" +
-				"END;";
-		stmt.execute(createTrigger);
-
-		createTrigger = "CREATE TRIGGER IF NOT EXISTS view_kontakte_DEL " +
-				"   INSTEAD OF DELETE ON view_kontakte FOR EACH ROW " +
-				"   BEGIN " +
-				"       DELETE FROM table_kontakte" +
-				"       WHERE vorname.id = (SELECT id FROM table_vorname WHERE vorname = OLD.vorname)" +
-				"           AND nachname.id = (SELECT id FROM table_nachname WHERE nachname = OLD.nachname)" +
-				"           AND strasse.id = (SELECT id FROM table_strasse WHERE strasse = OLD.strasse)" +
-				"           AND hnr.id = (SELECT id FROM table_hnr WHERE hnr = OLD.hnr)" +
-				"           AND plz.id = (SELECT id FROM table_plz WHERE plz = OLD.plz)" +
-				"           AND ort.id = (SELECT id FROM table_ort WHERE ort = OLD.ort)" +
-				"           AND telefon.id = (SELECT id FROM table_telefon WHERE telefon = OLD.telefon); " +
-				"       DELETE FROM table_vorname WHERE id NOT IN (SELECT vorname.id FROM table_kontakte);" +
-				"       DELETE FROM table_nachname WHERE id NOT IN (SELECT nachname.id FROM table_kontakte);" +
-				"       DELETE FROM table_strasse WHERE id NOT IN (SELECT strasse.id FROM table_kontakte);" +
-				"       DELETE FROM table_hnr WHERE id NOT IN (SELECT hnr.id FROM table_kontakte);" +
-				"       DELETE FROM table_plz WHERE id NOT IN (SELECT plz.id FROM table_kontakte);" +
-				"       DELETE FROM table_ort WHERE id NOT IN (SELECT ort.id FROM table_kontakte);" +
-				"       DELETE FROM table_telefon WHERE id NOT IN (SELECT telefon.id FROM table_kontakte);" +
-				"   END;";
-		stmt.execute(createTrigger);
-
-		createTrigger = "CREATE TRIGGER IF NOT EXISTS view_kontakte_UPD " +
-				"   INSTEAD OF UPDATE ON view_kontakte FOR EACH ROW " +
-				"   BEGIN " +
-				"       INSERT INTO table_vorname (vorname) SELECT NEW.vorname WHERE NOT EXISTS (SELECT 1 FROM table_vorname WHERE vorname = NEW.vorname);" +
-				"       INSERT INTO table_nachname (nachname) SELECT NEW.nachname WHERE NOT EXISTS (SELECT 1 FROM table_nachname WHERE nachname = NEW.nachname);" +
-				"       INSERT INTO table_strasse (strasse) SELECT NEW.strasse WHERE NOT EXISTS (SELECT 1 FROM table_strasse WHERE strasse = NEW.strasse);" +
-				"       INSERT INTO table_hnr (hnr) SELECT NEW.hnr WHERE NOT EXISTS (SELECT 1 FROM table_hnr WHERE hnr = NEW.hnr);" +
-				"       INSERT INTO table_plz (plz) SELECT NEW.plz WHERE NOT EXISTS (SELECT 1 FROM table_plz WHERE plz = NEW.plz);" +
-				"       INSERT INTO table_ort (ort) SELECT NEW.ort WHERE NOT EXISTS (SELECT 1 FROM table_ort WHERE ort = NEW.ort);" +
-				"       INSERT INTO table_telefon (telefon) SELECT NEW.telefon WHERE NOT EXISTS (SELECT 1 FROM table_telefon WHERE telefon = NEW.telefon);" +
-				"       UPDATE table_kontakte SET" +
-				"           vorname = (SELECT id FROM table_vorname WHERE vorname = NEW.vorname), " +
-				"           nachname = (SELECT id FROM table_nachname WHERE nachname = NEW.nachname), " +
-				"           strasse = (SELECT id FROM table_strasse WHERE strasse = NEW.strasse), " +
-				"           hnr = (SELECT id FROM table_hnr WHERE hnr = NEW.hnr), " +
-				"           plz = (SELECT id FROM table_plz WHERE plz = NEW.plz), " +
-				"           ort = (SELECT id FROM table_ort WHERE ort = NEW.ort), " +
-				"           telefon = (SELECT id FROM table_telefon WHERE telefon = NEW.telefon) " +
-				"       WHERE vorname = (SELECT id FROM table_vorname WHERE vorname = OLD.vorname) " +
-				"           AND nachname = (SELECT id FROM table_nachname WHERE nachname = OLD.nachname)" +
-				"           AND strasse = (SELECT id FROM table_strasse WHERE strasse = OLD.strasse)" +
-				"           AND hnr = (SELECT id FROM table_hnr WHERE hnr = OLD.hnr)" +
-				"           AND plz = (SELECT id FROM table_plz WHERE plz = OLD.plz)" +
-				"           AND ort = (SELECT id FROM table_ort WHERE ort = OLD.ort)" +
-				"           AND telefon = (SELECT id FROM table_telefon WHERE telefon = OLD.telefon);" +
-				"       DELETE FROM table_vorname WHERE vorname NOT IN (SELECT id FROM table_kontakte);" +
-				"       DELETE FROM table_nachname WHERE nachname NOT IN (SELECT id FROM table_kontakte);" +
-				"       DELETE FROM table_strasse WHERE strasse NOT IN (SELECT id FROM table_kontakte);" +
-				"       DELETE FROM table_hnr WHERE hnr NOT IN (SELECT id FROM table_kontakte);" +
-				"       DELETE FROM table_plz WHERE plz NOT IN (SELECT id FROM table_kontakte);" +
-				"       DELETE FROM table_ort WHERE ort NOT IN (SELECT id FROM table_kontakte);" +
-				"       DELETE FROM table_telefon WHERE telefon NOT IN (SELECT id FROM table_kontakte);" +
-				"END;";
-		stmt.execute(createTrigger);
+		String sql;
+
+		sql = "CREATE TABLE IF NOT EXISTS \"table_vorname\" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, vorname VARCHAR(50) NOT NULL UNIQUE);";
+		stmt.execute(sql);
+		sql = "CREATE TABLE IF NOT EXISTS \"table_nachname\" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nachname VARCHAR(50) NOT NULL UNIQUE);";
+		stmt.execute(sql);
+		sql = "CREATE TABLE IF NOT EXISTS \"table_strasse\" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, strasse VARCHAR(50) NOT NULL UNIQUE);";
+		stmt.execute(sql);
+		sql = "CREATE TABLE IF NOT EXISTS \"table_hnr\" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, hnr VARCHAR(15) NOT NULL UNIQUE);";
+		stmt.execute(sql);
+		sql = "CREATE TABLE IF NOT EXISTS \"table_plz\" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, plz CHAR(5) NOT NULL UNIQUE);";
+		stmt.execute(sql);
+		sql = "CREATE TABLE IF NOT EXISTS \"table_ort\" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, ort VARCHAR(50) NOT NULL UNIQUE);";
+		stmt.execute(sql);
+		sql ="CREATE TABLE IF NOT EXISTS \"table_telefonbuch\" ( " +
+				"            id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
+				"            vorname_id INTEGER NOT NULL, " +
+				"            nachname_id INTEGER NOT NULL, " +
+				"            strasse_id INTEGER NOT NULL, " +
+				"            hnr_id INTEGER NOT NULL, " +
+				"            plz_id INTEGER NOT NULL, " +
+				"            ort_id INTEGER NOT NULL, " +
+				"            telefon VARCHAR(30) NOT NULL UNIQUE," +
+				"            FOREIGN KEY (vorname_id) REFERENCES table_vorname(id), " +
+				"            FOREIGN KEY (nachname_id) REFERENCES table_nachname(id), " +
+				"            FOREIGN KEY (strasse_id) REFERENCES table_strasse(id), " +
+				"            FOREIGN KEY (hnr_id) REFERENCES table_hnr(id), " +
+				"            FOREIGN KEY (plz_id) REFERENCES table_plz(id), " +
+				"            FOREIGN KEY (ort_id) REFERENCES table_ort(id)" +
+				"            );";
+		stmt.execute(sql);
+
+		sql = "CREATE VIEW IF NOT EXISTS telefonbuch AS " +
+				"            SELECT v.vorname AS vorname, " +
+				"            n.nachname AS nachname, " +
+				"            s.strasse AS strasse, " +
+				"            h.hnr AS hnr, " +
+				"            p.plz AS plz, " +
+				"            o.ort AS ort, " +
+				"            t.telefon AS telefon " +
+				"             FROM table_telefonbuch t " +
+				"            INNER JOIN table_vorname v ON t.vorname_id = v.id " +
+				"            INNER JOIN table_nachname n ON t.nachname_id = n.id " +
+				"            INNER JOIN table_strasse s ON t.strasse_id = s.id " +
+				"            INNER JOIN table_hnr h ON t.hnr_id = h.id " +
+				"            INNER JOIN table_plz p ON t.plz_id = p.id " +
+				"            INNER JOIN table_ort o ON t.ort_id = o.id;";
+		stmt.execute(sql);
+
+		sql = "PRAGMA foreign_keys = ON;";
+		stmt.execute(sql);
+
+		sql = "CREATE TRIGGER IF NOT EXISTS Telefonbuch_INS INSTEAD OF INSERT ON telefonbuch FOR EACH ROW\n" +
+				"        BEGIN\n" +
+				"            INSERT INTO table_vorname (vorname) SELECT NEW.vorname WHERE NOT EXISTS (SELECT 1 FROM table_vorname WHERE vorname = NEW.vorname);\n" +
+				"            INSERT INTO table_nachname (nachname) SELECT NEW.nachname WHERE NOT EXISTS (SELECT 1 FROM table_nachname WHERE nachname = NEW.nachname);\n" +
+				"            INSERT INTO table_strasse (strasse) SELECT NEW.strasse WHERE NOT EXISTS (SELECT 1 FROM table_strasse WHERE strasse = NEW.strasse);\n" +
+				"            INSERT INTO table_hnr (hnr) SELECT NEW.hnr WHERE NOT EXISTS (SELECT 1 FROM table_hnr WHERE hnr = NEW.hnr);\n" +
+				"            INSERT INTO table_plz (plz) SELECT NEW.plz WHERE NOT EXISTS (SELECT 1 FROM table_plz WHERE plz = NEW.plz);\n" +
+				"            INSERT INTO table_ort (ort) SELECT NEW.ort WHERE NOT EXISTS (SELECT 1 FROM table_ort WHERE ort = NEW.ort);\n" +
+				"            INSERT INTO table_telefonbuch (vorname_id, nachname_id, strasse_id, hnr_id, plz_id, ort_id, telefon) SELECT (SELECT id FROM table_vorname WHERE vorname = NEW.vorname), (SELECT id FROM table_nachname WHERE nachname = NEW.nachname), (SELECT id FROM table_strasse WHERE strasse = NEW.strasse), (SELECT id FROM table_hnr WHERE hnr = NEW.hnr), (SELECT id FROM table_plz WHERE plz = NEW.plz), (SELECT id FROM table_ort WHERE ort = NEW.ort), NEW.telefon;\n" +
+				"        END;";
+		stmt.execute(sql);
+
+		sql = "CREATE TRIGGER IF NOT EXISTS Telefonbuch_DEL INSTEAD OF DELETE ON telefonbuch FOR EACH ROW\n" +
+				"        BEGIN\n" +
+				"            DELETE FROM table_telefonbuch WHERE telefon = OLD.telefon;\n" +
+				"            DELETE FROM table_vorname WHERE id NOT IN (SELECT vorname_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_nachname WHERE id NOT IN (SELECT nachname_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_strasse WHERE id NOT IN (SELECT strasse_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_hnr WHERE id NOT IN (SELECT hnr_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_plz WHERE id NOT IN (SELECT plz_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_ort WHERE id NOT IN (SELECT ort_id FROM table_telefonbuch);\n" +
+				"        END;";
+		stmt.execute(sql);
+
+		sql = "CREATE TRIGGER IF NOT EXISTS Telefonbuch_UPD INSTEAD OF UPDATE ON telefonbuch FOR EACH ROW\n" +
+				"        BEGIN\n" +
+				"            INSERT INTO table_vorname (vorname) SELECT NEW.vorname WHERE NOT EXISTS (SELECT 1 FROM table_vorname WHERE vorname = NEW.vorname);\n" +
+				"            INSERT INTO table_nachname (nachname) SELECT NEW.nachname WHERE NOT EXISTS (SELECT 1 FROM table_nachname WHERE nachname = NEW.nachname);\n" +
+				"            INSERT INTO table_strasse (strasse) SELECT NEW.strasse WHERE NOT EXISTS (SELECT 1 FROM table_strasse WHERE strasse = NEW.strasse);\n" +
+				"            INSERT INTO table_hnr (hnr) SELECT NEW.hnr WHERE NOT EXISTS (SELECT 1 FROM table_hnr WHERE hnr = NEW.hnr);\n" +
+				"            INSERT INTO table_plz (plz) SELECT NEW.plz WHERE NOT EXISTS (SELECT 1 FROM table_plz WHERE plz = NEW.plz);\n" +
+				"            INSERT INTO table_ort (ort) SELECT NEW.ort WHERE NOT EXISTS (SELECT 1 FROM table_ort WHERE ort = NEW.ort);\n" +
+				"            UPDATE table_telefonbuch SET vorname_id = (SELECT id FROM table_vorname WHERE vorname = NEW.vorname), nachname_id = (SELECT id FROM table_nachname WHERE nachname = NEW.nachname), strasse_id = (SELECT id FROM table_strasse WHERE strasse = NEW.strasse), hnr_id = (SELECT id FROM table_hnr WHERE hnr = NEW.hnr), plz_id = (SELECT id FROM table_plz WHERE plz = NEW.plz), ort_id = (SELECT id FROM table_ort WHERE ort = NEW.ort), telefon = NEW.telefon WHERE telefon = OLD.telefon;\n" +
+				"            DELETE FROM table_vorname WHERE id NOT IN (SELECT vorname_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_nachname WHERE id NOT IN (SELECT nachname_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_strasse WHERE id NOT IN (SELECT strasse_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_hnr WHERE id NOT IN (SELECT hnr_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_plz WHERE id NOT IN (SELECT plz_id FROM table_telefonbuch);\n" +
+				"            DELETE FROM table_ort WHERE id NOT IN (SELECT ort_id FROM table_telefonbuch);\n" +
+				"        END;";
+		stmt.execute(sql);
 	}
 
 	/**
@@ -195,7 +137,7 @@ public class Datenbank {
 		try {
 			Statement stmt = this.con.createStatement();
 
-			String checkKontakt = "SELECT telefon FROM view_kontakte WHERE telefon=\"" + kontakt.getId() + "\";";
+			String checkKontakt = "SELECT telefon FROM " + VIEW_KONTAKTE + " WHERE telefon=\"" + kontakt.getId() + "\";";
 			ResultSet checkResult = stmt.executeQuery(checkKontakt);
 
 			int rows = 0;
@@ -208,7 +150,7 @@ public class Datenbank {
 			if (rows == 1) {
 				new Fehler().debug("Updating contact", false);
 
-				insertKontakt = "UPDATE view_kontakte SET " +
+				insertKontakt = "UPDATE " + VIEW_KONTAKTE + " SET " +
 						"vorname=\"" + kontakt.getVorname() + "\", " +
 						"nachname=\"" + kontakt.getNachname() + "\", " +
 						"strasse=\"" + kontakt.getStrasse() + "\", " +
@@ -220,7 +162,7 @@ public class Datenbank {
 			} else {
 				new Fehler().debug("Insert new contact", false);
 
-				insertKontakt = "INSERT INTO view_kontakte (vorname, nachname, strasse, hnr, plz, ort, telefon) VALUES (" +
+				insertKontakt = "INSERT INTO " + VIEW_KONTAKTE + " (vorname, nachname, strasse, hnr, plz, ort, telefon) VALUES (" +
 						"\"" + kontakt.getVorname() + "\", " +
 						"\"" + kontakt.getNachname() + "\", " +
 						"\"" + kontakt.getStrasse() + "\", " +
@@ -244,7 +186,7 @@ public class Datenbank {
 		try {
 			Statement stmt = this.con.createStatement();
 
-			String sql = "  DELETE FROM view_kontakte" +
+			String sql = "  DELETE FROM " + VIEW_KONTAKTE + "" +
 					"       WHERE telefon=\"" + telefon + "\";";
 			stmt.execute(sql);
 
@@ -264,11 +206,11 @@ public class Datenbank {
 
 			if (telefon.equals("first")) {
 				sql = "SELECT * " +
-						"FROM view_kontakte " +
+						"FROM " + VIEW_KONTAKTE + " " +
 						"LIMIT 1;";
 			} else {
 				sql = "SELECT * " +
-						"FROM view_kontakte " +
+						"FROM " + VIEW_KONTAKTE + " " +
 						"WHERE telefon=\"" + telefon + "\";";
 			}
 			ResultSet rs = stmt.executeQuery(sql);
@@ -307,7 +249,7 @@ public class Datenbank {
 					"    CASE " +
 					"        WHEN LAG(telefon) OVER (ORDER BY nachname) IS NULL THEN ( " +
 					"            SELECT telefon " +
-					"            FROM view_kontakte " +
+					"            FROM " + VIEW_KONTAKTE + " " +
 					"            ORDER BY nachname DESC " +
 					"            LIMIT 1 " +
 					"        ) " +
@@ -317,13 +259,13 @@ public class Datenbank {
 					"    CASE " +
 					"        WHEN LEAD(telefon) OVER (ORDER BY nachname) IS NULL THEN ( " +
 					"            SELECT telefon " +
-					"            FROM view_kontakte " +
+					"            FROM " + VIEW_KONTAKTE + " " +
 					"            ORDER BY nachname ASC " +
 					"            LIMIT 1 " +
 					"        ) " +
 					"        ELSE LEAD(telefon) OVER (ORDER BY nachname) " +
 					"    END next " +
-					"FROM view_kontakte " +
+					"FROM " + VIEW_KONTAKTE + " " +
 					"ORDER BY nachname ASC;";
 
 			ResultSet rs = stmt.executeQuery(sql);
@@ -351,7 +293,7 @@ public class Datenbank {
 			Statement stmt = this.con.createStatement();
 
 			String sql = "  SELECT COUNT(*) AS count" +
-					"       FROM view_kontakte;";
+					"       FROM " + VIEW_KONTAKTE + ";";
 			ResultSet rs = stmt.executeQuery(sql);
 
 			intResult = rs.getInt("count");
diff --git a/uebung25telefonbuch.iml b/uebung25telefonbuch.iml
deleted file mode 100644
index 78b2cc5..0000000
--- a/uebung25telefonbuch.iml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4" />
\ No newline at end of file
-- 
GitLab