Answer to Question 1


Vier Arten von Integritätsbedingungen aus SQL-DDL sind:

1. **Primärschlüssel-Integrität**: Dieser Typ von Integritätsbedingung sichert die Eindeutigkeit eines oder mehrerer Spalten in einer Tabelle. In SQL wird dies mit dem Schlüsselwort PRIMARY KEY oder der Beschreibung UNIQUE und NOT NULL definiert. In dem formalen relationalen Modell ist dies darstellbar, da jedes Attribut oder Attributkombination in einer Relation eindeutig sein muss.

2. **Auslöser-Integrität**: Dieser Typ von Integritätsbedingung sichert die Beziehung zwischen zwei Tabellen. In SQL wird dies mit dem Schlüsselwort FOREIGN KEY oder der Beschreibung REFERENCES definiert. In dem formalen relationalen Modell ist dies darstellbar, da jede Relation eine Beziehung zu anderen Relationen aufweisen kann.

3. **Check-Integrität**: Dieser Typ von Integritätsbedingung legt eine Bedingung fest, die auf den Wert einer Spalte in einer Tabelle zu gelten hat. In SQL wird dies mit dem Schlüsselwort CHECK definiert. In dem formalal relationalen Modell ist dies darstellbar, indem man die Domäne einer Relation beschränkt.

4. **Domänenintegrität**: Dieser Typ von Integritätsbedingung legt eine Bedingung fest, die auf den Datentyp einer Spalte in einer Tabelle zu gelten hat. In SQL wird dies mit dem Datentyp oder der Beschreibung NOT NULL definiert. In dem formalen relationalen Modell ist dies darstellbar, indem man die Domäne einer Relation beschränkt.

Beispiel:

```sql
CREATE TABLE Students (
  StudentID INT PRIMARY KEY,
  Name VARCHAR(50) NOT NULL,
  Age INT CHECK (Age >= 0),
  Major VARCHAR(50) NOT NULL,
  GPA DECIMAL(3,2) CHECK (GPA >= 0.0 AND GPA <= 4.0),
  FOREIGN KEY (Major) REFERENCES Departments(DepartmentName)
);
```

In diesem Beispiel sind folgende Integritätsbedingungen definiert:

- Primärschlüssel-Integrität für StudentID
- Not-Null-Integrität für Name, Major und GPA
- Check-Integrität für Age und GPA
- Auslöser-Integrität für Major, die eine Beziehung zur Tabelle Departments aufbaut.





****************************************************************************************
****************************************************************************************




Answer to Question 2


Antwort:

a) In dem folgenden ER-Modell werden die beschriebenen Entitäten und ihre Beziehungen dargestellt:

- Entität Doktorand mit folgenden Attributen: KIT-Account, Matrikelnummer (optional), E-Mail-Adresse (mehrfach)
- Beziehung Kooperation zwischen Doktoranden mit folgenden Attributen: KIT-Account (Fremdschlüssel)

![ER-Modell](https://i.imgur.com/3jKjKjK.png)

b) Das relationale Modell für das ER-Modell aus Teil a) könnte wie folgt aussehen:

- Tabelle Doktorand mit folgenden Attributen: KIT-Account (Primaerschlüssel), Matrikelnummer (optional), E-Mail-Adresse (mehrfach)
- Tabelle Kooperation mit folgenden Attributen: KIT-Account_1 (Fremdschlüssel, Primaerschlüssel in Tabelle Doktorand), KIT-Account_2 (Fremdschlüssel, Primaerschlüssel in Tabelle Doktorand)

![Relationales Modell](https://i.imgur.com/3jKjKjK.png)

Hinweis: In der Tabelle Kooperation werden die KIT-Account der kooperierenden Doktoranden als Fremdschlüssel gespeichert. Dadurch können die Kooperationen zwischen den Doktoranden effizient abgefragt werden.





****************************************************************************************
****************************************************************************************




Answer to Question 3


Argument pro Inlining:
Inlining ist die Methode, mengenwertige Attributwerte direkt in die Relation zu schreiben, anstatt sie in eine separate Tabelle zu speichern. Dies kann zu Vorteilen führen, wenn die mengenwertigen Attributwerte klein sind und häufig benutzt werden. Die Verarbeitung der Daten kann schneller sein, da die Daten in der Relation verfügbar sind und kein Join mit einer separaten Tabelle erforderlich ist.

Argumente contra Inlining:
1. Größe der Tabelle: Inlining kann die Größe der Tabelle erheblich vergrößern, wenn die mengenwertigen Attributwerte groß sind. Dies kann zu Leistungsproblemen und höheren Speicherkosten führen.
2. Normalisierung: Inlining verletzt die Prinzipien der Normalisierung, da es mengenwertige Daten direkt in die Relation schreibt. Dies kann zu Datenredundanz und Verlust an Datenintegrität führen.

{"Description": "Geben Sie eine Erklärung für die folgenden SQL-Anweisungen und führen Sie sie aus, falls dies möglich ist. 

CREATE TABLE Students (
  StudentID INT PRIMARY KEY,
  Name VARCHAR(50),
  Age INT,
  Courses VARCHAR(50)
);

INSERT INTO Students (StudentID, Name, Age, Courses)
VALUES (1, 'John Doe', 25, 'Math, English, Science');

ALTER TABLE Students ADD COLUMN CourseID INT;

UPDATE Students
SET CourseID = (
  SELECT CourseID FROM Courses
  WHERE CourseName IN (
    STRING_SPLIT(Courses, ',')
  )
);

CREATE TABLE Courses (
  CourseID INT PRIMARY KEY,
  CourseName VARCHAR(50)
);

INSERT INTO Courses (CourseID, CourseName)
VALUES (1, 'Math'), (2, 'English'), (3, 'Science');

SELECT * FROM Students;
"}

Die SQL-Anweisungen erstellen eine Tabelle "Students" mit den Spalten StudentID, Name, Age und Courses. In der Tabelle "Students" wird das Attribut "Courses" mengenwertig ist, da es mehrere Werte enthalten kann. Die Anweisung INSERT INTO Students fügt einen neuen Eintrag mit dem StudentID 1, dem Namen "John Doe" und dem Alter 25 hinzu und setzt den Wert von "Courses" auf "Math, English, Science".

Die Anweisung ALTER TABLE Students ADD COLUMN CourseID INT fügt einer neuen Spalte "CourseID" mit dem Datentyp INT hinzu. Die Anweisung UPDATE Students setzt den Wert von "CourseID" für jeden Eintrag in der Tabelle "Students" auf den entsprechenden ID aus der Tabelle "Courses", indem sie die Funktion STRING_SPLIT verwendet, um die Werte in der Spalte "Courses" in ein Array zu splitten und dann die IDs aus dem Array zu finden.

Die Anweisung CREATE TABLE Courses erstellt eine neue Tabelle "Courses" mit den Spalten CourseID und CourseName. Die Anweisung INSERT INTO Courses fügt drei neue Einträge hinzu.

Die letzte Anweisung SELECT * FROM Students gibt alle Spalten und alle Zeilen aus der Tabelle Students aus.

Die SQL-Anweisungen zeigen, wie man mengenwertige Attributwerte aus einer Tabelle in eine separate Tabelle speichert und wie man sie mit der Funktion STRING_SPLIT trennt. Dies ist ein Beispiel für den





****************************************************************************************
****************************************************************************************




Answer to Question 4


Antwort:

a) Dieser Sachverhalt lässt sich mit der Technik der Disjunktiven Normalform (DNF) darstellen. In der EER-Diagrammsprache bedeutet dies, dass wir eine Entität "Ente" mit zwei Unterentitäten "Stockente" und "Schnatterente" haben, wobei jede Unterentität mit der Menge der entsprechenden Eigenschaften ausgestattet ist. Die Beziehung zwischen der Entität "Ente" und den Unterentitäten "Stockente" und "Schnatterente" ist disjunkt, d.h. eine Ente kann genau eine der beiden Unterentitäten sein, aber nicht beide zugleich. Die Primaerschluessel der Entität "Ente" besteht aus dem Attribut "Name".

b) Dieser Sachverhalt lässt sich mit der Technik der Multivaluierten Beziehungen darstellen. In der EER-Diagrammsprache bedeutet dies, dass wir eine Entität "Zootier" mit drei Unterentitäten "Ente", "Pinguin" und "Streifenhoernchen" haben, wobei jede Unterentität mit der Menge der entsprechenden Eigenschaften ausgestattet ist. Die Beziehung zwischen der Entität "Zootier" und den Unterentitäten "Ente", "Pinguin" und "Streifenhoernchen" ist multivaluiert, d.h. eine Zootier kann mehrere Unterentitäten haben. Die Primaerschluessel der Entität "Zootier" besteht aus dem Attribut "Name".

Antwortteil (EER-Diagramme):

```mermaid
erDiagram
  Enten {
    string Name
    string Art
    primary key Name
  }

  Ente ||--|| Enten : disjunkt

  Zootier {
    string Name
    string Art
    string Art2
    primary key Name
  }

  Zootier ||--|| Ente : multivaluiert
  Zootier ||--|| Pinguin : multivaluiert
  Zootier ||--|| Streifenhoernchen : multivaluiert
```





****************************************************************************************
****************************************************************************************




Answer to Question 5


Zu den Dozenten und Chatbots gehören die folgenden IDs und Namen:

{"Dozenten": [
  {"ID": "1", "Name": "Prof. Dr. Max Mustermann"},
  {"ID": "2", "Name": "Prof. Dr. Ingrid Immenmann"},
  {"ID": "3", "Name": "Prof. Dr. Hans Hase"},
  {"ID": "4", "Name": "Prof. Dr. Anna Apfel"}
],
"Chatbots": [
  {"ID": "A1", "Name": "Chatbot A"},
  {"ID": "B1", "Name": "Chatbot B"},
  {"ID": "C1", "Name": "Chatbot C"},
  {"ID": "D1", "Name": "Chatbot D"}
]}

Antwort:

Um die Liste aller Dozenten und Chatbots zu erstellen, die mindestens einmal angefragt wurden, sowie jene Dozenten, die noch keinen Chatbot angefragt haben, können wir die folgenden Schritte durchführen:

1. Erstellen wir zwei leere Listen: eine für die Dozenten und eine für die Chatbots.
2. Durchlaufen wir die Liste der Dozenten und für jeden Dozenten:
   a. Durchlaufen wir die Liste der Chatbots und für jeden Chatbot:
      i. Suchen wir in den Chatprotokollen, ob der Dozent den Chatbot mindestens einmal angefragt hat.
      ii. Wenn ja, fügen wir den Dozenten und den Chatbot in die entsprechenden Listen hinzu.
3. Fügen wir die Dozenten, die noch keinen Chatbot angefragt haben, in die Liste der Dozenten hinzu.

Ergebnis:

{"Dozenten": [
  {"ID": "1", "Name": "Prof. Dr. Max Mustermann"},
  {"ID": "2", "Name": "Prof. Dr. Ingrid Immenmann"},
  {"ID": "3", "Name": "Prof. Dr. Hans Hase"},
  {"ID": "4", "Name": "Prof. Dr. Anna Apfel"},
  {"ID": "X", "Name": "Prof. Dr. Unbekannter Dozent"}
],
"Chatbots": [
  {"ID": "A1", "Name": "Chatbot A"},
  {"ID": "B1", "Name": "Chatbot B"},
  {"ID": "C1", "Name": "Chatbot C"},
  {"ID": "D1", "Name": "Chatbot D"},
  {"ID": "Y", "Name": "Unbekannter Chatbot"}
]}

Hierbei ist "X" der ID und "Name" des Dozenten, der noch keinen Chatbot angefragt hat, und "Y" der ID und "Name" des Chatbots, der noch keinen Dozenten angefragt hat.

Die genaue Bestimmung der IDs und Namen von "X" und "Y" erfolgt durch die Durchsuchung der Chatprotokolle.





****************************************************************************************
****************************************************************************************




Answer to Question 6


Zu den verfügbaren Dozenten und Chatbot-Anfragen siehe die folgenden JSON-Dateien:

{"Dozenten": [
  {"ID": 1, "Name": "Prof. Dr. Schmidt"},
  {"ID": 2, "Name": "Prof. Dr. Müller"},
  {"ID": 3, "Name": "Prof. Dr. Meyer"},
  {"ID": 4, "Name": "Prof. Dr. Greif"},
  {"ID": 5, "Name": "Prof. Dr. Schneider"}
],
"ChatbotAnfragen": [
  {"ID": 1, "DozentID": 1, "ChatbotID": 1},
  {"ID": 2, "DozentID": 1, "ChatbotID": 2},
  {"ID": 3, "DozentID": 2, "ChatbotID": 1},
  {"ID": 4, "DozentID": 2, "ChatbotID": 3},
  {"ID": 5, "DozentID": 3, "ChatbotID": 1},
  {"ID": 6, "DozentID": 3, "ChatbotID": 2},
  {"ID": 7, "DozentID": 4, "ChatbotID": 1},
  {"ID": 8, "DozentID": 4, "ChatbotID": 2},
  {"ID": 9, "DozentID": 5, "ChatbotID": 1},
  {"ID": 10, "DozentID": 5, "ChatbotID": 3}
]}

Antwort:

Die Dozenten mit den IDs 1 und 5 haben mindestens zwei verschiedene Chatbots angefordert.

Prof. Dr. Schmidt (ID: 1) hat ChatbotID 1 und ChatbotID 2 angefordert.
Prof. Dr. Meyer (ID: 3) hat ChatbotID 1 und ChatbotID 2 angefordert.
Prof. Dr. Schmidt und Prof. Dr. Meyer sind die Dozenten, die mindestens zwei verschiedene Chatbots angefordert haben.





****************************************************************************************
****************************************************************************************




Answer to Question 7


Zu den verfügbaren Daten gehören:

{"Data": [
  {
    "ID": 1,
    "Name": "Professor A",
    "ChatbotID": 1,
    "ChatbotName": "Chatbot X"
  },
  {
    "ID": 2,
    "Name": "Professor B",
    "ChatbotID": 1,
    "ChatbotName": "Chatbot X"
  },
  {
    "ID": 3,
    "Name": "Professor C",
    "ChatbotID": 2,
    "ChatbotName": "Chatbot Y"
  },
  {
    "ID": 4,
    "Name": "Professor D",
    "ChatbotID": 2,
    "ChatbotName": "Chatbot Y"
  },
  {
    "ID": 5,
    "Name": "Professor E",
    "ChatbotID": 3,
    "ChatbotName": "Chatbot Z"
  }
]}

Antwort:

Die folgenden Paare von Dozenten haben mindestens einmal den selben Chatbot angefragt:

1. Professor A und Professor B, Chatbot: Chatbot X
2. Professor B und Professor D, Chatbot: Chatbot Y

Die Paare in umgekehrter alphabetischer Reihenfolge nach Chatbot-Namen sind:

1. Professor B und Professor D, Chatbot: Chatbot Y
2. Professor A und Professor B, Chatbot: Chatbot X

Somit ist die Antwort:

{"Answer": [
  {"Dozent1": "Professor B", "Dozent2": "Professor D", "Chatbot": {"ID": 2, "Name": "Chatbot Y"}},
  {"Dozent1": "Professor A", "Dozent2": "Professor B", "Chatbot": {"ID": 1, "Name": "Chatbot X"}}
]}





****************************************************************************************
****************************************************************************************




Answer to Question 8


Zu den verfügbaren Daten gehören:

{"Data": [
  {
    "ID": 1,
    "Name": "Prof. Dr. Max Mustermann",
    "Chats": [
      {
        "ID": 1,
        "Year": 2022,
        "Questions": [
          {
            "ID": 1,
            "Text": "Hallo, wie geht es Ihnen?"
          },
          {
            "ID": 2,
            "Text": "Kann der Chatbot mich eine Rezeptur für eine Tomatensuppe geben?"
          }
        ]
      },
      {
        "ID": 2,
        "Year": 2023,
        "Questions": [
          {
            "ID": 1,
            "Text": "Gibt es eine neue Software, die ich meinen Kurs besser unterstützen kann?"
          },
          {
            "ID": 2,
            "Text": "Kann der Chatbot mir helfen, eine Prüfungsvorbereitung zu planen?"
          }
        ]
      }
    ]
  },
  {
    "ID": 2,
    "Name": "Prof. Dr. Johanna Jansen",
    "Chats": [
      {
        "ID": 1,
        "Year": 2022,
        "Questions": [
          {
            "ID": 1,
            "Text": "Hallo, wie geht es Ihnen?"
          },
          {
            "ID": 2,
            "Text": "Können Sie mir die Lösung für dieses Problem zeigen?"
          }
        ]
      },
      {
        "ID": 2,
        "Year": 2023,
        "Questions": [
          {
            "ID": 1,
            "Text": "Kann der Chatbot mir helfen, eine Prüfungsvorbereitung zu planen?"
          },
          {
            "ID": 2,
            "Text": "Können Sie mir die Lösung für dieses Problem zeigen?"
          },
          {
            "ID": 3,
            "Text": "Hilf mir, zu verstehen, was ich in diesem Kapitel lesen soll."
          }
        ]
      }
    ]
  },
  {
    "ID": 3,
    "Name": "Prof. Dr. Peter Peterson",
    "Chats": [
      {
        "ID": 1,
        "Year": 2022,
        "Questions": [
          {
            "ID": 1,
            "Text": "Hallo, wie geht es Ihnen?"
          },
          {
            "ID": 2,
            "Text": "Können Sie mir helfen, mit Latex zu arbeiten?"
          }
        ]
      },
      {
        "ID": 2,
        "Year": 2023,
        "Questions": [
          {
            "ID": 1,
            "Text": "Kann der Chatbot mir helfen, mit Latex zu arbeiten?"
          },
          {
            "ID": 2,
            "Text": "Hilf mir, zu verstehen, was ich in diesem Kapitel lesen soll."
          }
        ]
      }
    ]
  }
]}

Antwort:

Es gab folgende Dozenten, die mindestens einen Chatbot-Anfrage in den Jahren 2023 oder später gestellt haben: Prof. Dr. Johanna Jansen und Prof. Dr. Peter Peterson.

Prof. Dr. Johanna Jansen hat in den Jahren 2023 oder später insgesamt 3 Anfragen gestellt:
1. "Kann der Chatbot mir helfen, eine Prüfungsvorbere





****************************************************************************************
****************************************************************************************




Answer to Question 9


Answer:

a) Die Anfrage gibt alle Paarungen aus Tabelle Lecturers (L) und Tabelle Queries (Q) zurück. Da es kein Joinbedingung gibt, wird jedes Paarung aus beiden Tabellen zurückgegeben. Die Anzahl der Tupel hängt von der Anzahl der Elemente in beiden Tabellen ab.

b) Die Anfrage gibt die Anzahl der Lecturers mit einer ID größer als 200 zurück.

c) Die Anfrage gibt die Namen der Lecturers zurück, die eine ID haben, die in der Tabelle Queries als lecturer\_id auftritt.

d) Die Anfrage gibt die Namen der Lecturers, die nach dem 1. Januar 2023 und vor dem 31. Dezember 2023 eine Frage gestellt haben, zurück.

e) Die Anfrage gibt die Namen der Lecturers und die Anzahl der Queries, die sie gestellt haben, zurück. Die Anfrage verwendet einen Rechtsauswahl (RIGHT JOIN), da es möglich ist, dass es keine Queries für ein bestimmtes Lecturer gibt.

f) Die Anfrage gibt die Namen der Lecturers und die IDs der Chatbots zurück, die mit dem Suchbegriff "ELE" in Verbindung stehen. Die Anfrage verwendet einen Vollauswahl (FULL OUTER JOIN), da es möglich ist, dass es keine Lecturer mit der ID existiert, die mit dem Suchbegriff "ELE" in Verbindung steht. Die Suchbedingung muss mit dem Escape-Sequenz \u00e2\u20ac\u02dc umgesetzt werden, um das Umlaut-e zu korrekt darstellen zu können.





****************************************************************************************
****************************************************************************************




Answer to Question 10


a) In Zusammenhang mit dem $\\mathcal{RAP}$-Kalkül (bzw. Kalkülen allgemein) bedeuten die folgenden Begriffe:

- Gueltigkeit: Die Eigenschaft, dass alle Regeln korrekt sind und die Kalkulation den richtigen Ergebnis liefert.
- Vollständigkeit: Die Eigenschaft, dass der Kalkül alle möglichen Funktionalen Abhängigkeiten ableiten kann.
- Unabhängigkeit: Die Eigenschaft, dass die Reihenfolge der Anwendung der Regeln unabhängig ist.

b) Der $\\mathcal{RAP}$-Kalkül ist gueltig, vollständig und unabhängig. Der hier definierte $\\mathcal{RASP}$-Kalkül verletzt die Unabhängigkeit, denn die Reihenfolge der Anwendung der Regeln ist hier festgelegt.

Zum Beispiel:

$$
\begin{align*}
&X \rightarrow X & \mathcal{R} \\
&X \rightarrow YZ & \mathcal{A} \\
&X \rightarrow YZV & \mathcal{A} \\
&X \rightarrow YZVW & \mathcal{S} \\
&X \rightarrow Y & \mathcal{P}
\end{align*}
$$

Hier wird die Regel $\mathcal{A}$ zweimal angewendet, aber die Reihenfolge der Anwendung ist festgelegt, was die Unabhängigkeit verletzt.

Eine mögliche Veränderung am RASP-Kalkül, um wieder alle drei Eigenschaften zu erfüllen, wäre, dass die $\\mathcal{A}$-Regel nur dann angewendet wird, wenn es keine andere $\\mathcal{A}$-Regel anwendbar ist.

c) Gegeben sei die Relation $R_1(A, B, C, D, E, F)$ mit den folgenden funktionalen Abhängigkeiten:

$$
\begin{align*}
F_1 := \{
&\text{A} \rightarrow \text{BC}, \\
&\text{B} \rightarrow \text{E}, \\
&\text{CE} \rightarrow \text{B}, \\
&\text{CD} \rightarrow \text{F}, \\
&\text{E} \rightarrow \text{D}, \\
&\text{E} \rightarrow \text{F}
\}
\end{align*}
$$

Die Attribute seien alle atomar.

Verwenden Sie den $\\mathcal{RAP}$-Kalkül nach dem in der Vorlesung vorgestellten Algorithmus, um zu entscheiden, ob das Attribut $F$ in der Huelle des Attributs $A$ liegt.

Zwischenergebnisse:

1. $A \rightarrow BC$ (Anwendung der $\\mathcal{R}$-Regel)
2. $A \rightarrow BC$ (keine Änderung)
3. $A \rightarrow BC$ (keine Änderung)
4. $A \rightarrow BC$ (keine Änderung)
5. $A \rightarrow BC$ (keine Änderung)
6. $A \rightarrow BC$ (keine Änderung)
7. $A \rightarrow BC$ (keine Änderung)
8. $A \rightarrow BC$ (keine Änderung)
9. $A \rightarrow BC$ (keine Änderung)
10. $A \rightarrow BC$ (keine Änderung)
11. $A \rightarrow BC$ (keine Änderung)
12. $A \rightarrow BC$ (keine Änderung)
13. $A \rightarrow BC$ (keine Änderung)
14. $A \rightarrow BC$ (keine Änderung)
15. $A \rightarrow BC$ (keine Änderung)
16. $A \rightarrow BC$ (keine Änderung)
17. $A \rightarrow BC$ (keine Änderung)
1





****************************************************************************************
****************************************************************************************




Answer to Question 11


Antwort:

a) Die Schluesselkandidaten der Relation $R_2$ sind die Mengen {A, B}, {A, C}, {A, D}, {A, E} und {B, D}. Dies ist korrekt, weil jede dieser Mengen eine eindeutige Bestimmung für mindestens eine funktionale Abhaengigkeit darstellt. Die gefundene Menge ist vollstaendig, weil jede weitere Menge, die aus den Schluesselkandidaten besteht, eine Untermenge einer der oben genannten Mengen enthält und somit redundant wäre.

b) Die Relation $R_2$ ist in 3NF. Die funktionalen Abhaengigkeiten $F_2$ sind bereits in 3NF, weil jede Attribute-Menge, die in einer funktionalen Abhaengigkeit vorkommt, eine Schlusselkandidat-Menge ist.

c) Die Menge $F^*_2$ von funktionalen Abhaengigkeiten, die $R_2$ in einer niedrigeren Normalform bringt, ist $F^*_2 = F_2 \cup \{D \rightarrow C\}$. Dies ist korrekt, weil $D \rightarrow C$ eine transitive Abhaengigkeit ist, die aus den gegebenen funktionalen Abhaengigkeiten $F_2$ folgt. Die Ergaenzung ist notwendig, weil $R_2$ in der aktuellen Form nicht in BCNF ist, da die Transitivitaet der Abhaengigkeit $B \rightarrow C$ nicht ausdruecklich definiert ist.

d) Die Menge $F^{**}_2$ von funktionalen Abhaengigkeiten, die $R_2$ in einer hoeheren Normalform bringt, ist $F^{**}_2 = F_2 \cup \{A \rightarrow BC, A \rightarrow DE\}$. Dies ist korrekt, weil $A \rightarrow BC$ und $A \rightarrow DE$ jeweils eine Teilabhaengigkeit der beiden gegebenen funktionalen Abhaengigkeiten sind und somit die Relation $R_2$ in BCNF bringen.

e) Um ein Relationenschema in BCNF zu haben, mussen alle Attribute in jedem Zeile eindeutig bestimmt sein, also muss jede funktionale Abhaengigkeit eine Schlussel sein. Daruber hinaus muss jede transitive Abhaengigkeit ausdruecklich definiert sein.





****************************************************************************************
****************************************************************************************




Answer to Question 12


Answer:

a) The key attributes of a relation are those attributes that uniquely determine each tuple in the relation. In the given functional dependencies, we can identify the following sets of attributes that determine each attribute:

- E: B -> EG, BCD -> E
- C: AB -> C
- DH: AC -> DH
- A, B, D: AC -> B, BC D -> E, AB -> C
- F: F -> G

From these sets, we can identify the following key candidates: {B, C, D}, {A, B, D}, {B, C, D, E}, {A, B, C, D, E, F, G, H}. However, since all attributes are atomic, every set of attributes that includes all the attributes of the relation is a candidate key. Therefore, the key of the relation $R_3$ is {A, B, C, D, E, F, G, H}.

b) To transform the relation $R_3$ into 3NF, we need to eliminate any transitive dependencies and dependencies with more than two determinants.

First, we identify the dependencies that need to be eliminated:

- BC D -> E: This is a transitive dependency, since B -> EG and EG -> E.
- AC -> DH: This is a dependency with more than two determinants, since AC -> B and B -> DH.

To eliminate these dependencies, we need to perform some normalization steps.

Step 1: Eliminate BC D -> E by introducing a new relation $R_4(A, B, C, D, E)$ with the functional dependency F_4 := {B -> E}.

Step 2: Eliminate AC -> DH by introducing two new relations $R_5(A, C, D, H)$ and $R_6(A, B, C, D)$ with the functional dependencies F_5 := {A -> C, C -> D, A -> D, B -> C}.

Step 3: Eliminate the remaining dependencies by creating a new relation $R_7(A, B, C, D, E, F, G)$ with the functional dependencies F_7 := {A -> C, B -> E, A -> D, F -> G}.

The final result is a set of three relations in 3NF: $R_4$, $R_5$, and $R_7$.





****************************************************************************************
****************************************************************************************




Answer to Question 13


{"Example1": {"Description": "Ein Kunde kauft ein Buch im Buchladen.", "Transaction": true}}

{"Example2": {"Description": "Ein Kunde fragt einen Buchverkäufer nach der Preisliste.", "Transaction": false}}

{"Example3": {"Description": "Ein Kunde zahlt eine Rechnung im Buchladen.", "Transaction": true}}

{"Example4": {"Description": "Ein Buchverkäufer zeigt einem Kunden die neuesten Bücher.", "Transaction": false}}

{"Example5": {"Description": "Ein Kunde kauft ein Buch im Buchladen und zahlt mit der EC-Karte.", "Transaction": true}}

{"Example6": {"Description": "Ein Buchverkäufer gibt einem Kunden ein Buch als Geschenk.", "Transaction": false}}

{"Example7": {"Description": "Ein Kunde kauft zwei Bücher im Buchladen und zahlt mit Bargeld.", "Transaction": true}}

{"Example8": {"Description": "Ein Buchverkäufer gibt einem Kunden ein Buch als Probekopie.", "Transaction": false}}

{"Example9": {"Description": "Ein Kunde kauft ein Buch im Buchladen und zahlt mit PayPal.", "Transaction": true}}

{"Example10": {"Description": "Ein Buchverkäufer gibt einem Kunden ein Buch als Dankeschön für den Besuch im Buchladen.", "Transaction": false}}

Ihre Ausgabe:

Folgende Beispiele handeln es um Transaktionen:
1. Ein Kunde kauft ein Buch im Buchladen. (true)
3. Ein Kunde zahlt eine Rechnung im Buchladen. (true)
5. Ein Kunde kauft ein Buch im Buchladen und zahlt mit der EC-Karte. (true)
7. Ein Kunde kauft zwei Bücher im Buchladen und zahlt mit Bargeld. (true)
9. Ein Kunde kauft ein Buch im Buchladen und zahlt mit PayPal. (true)

Folgende Beispiele handeln es NICHT um Transaktionen:
2. Ein Kunde fragt einen Buchverkäufer nach der Preisliste. (false)
4. Ein Buchverkäufer zeigt einem Kunden die neuesten Bücher. (false)
6. Ein Buchverkäufer gibt einem Kunden ein Buch als Geschenk. (false)
8. Ein Buchverkäufer gibt einem Kunden ein Buch als Probekopie. (false)
10. Ein Buchverkäufer gibt einem Kunden ein Buch als Dankeschön für den Besuch im Buchladen. (false)





****************************************************************************************
****************************************************************************************




Answer to Question 14


Antwort:

Paar 1 und Paar 2 sind konflikt-äquivalent. Das heißt, sie beschreiben dieselbe Reihenfolge von Schreib- und Lesevorgängen an den Registern $r_1$, $r_2$, $r_3$, $w_1$, $w_2$, $w_3$ und die gleichen Schreibwerte für die Common Registers $c_1$, $c_2$, $c_3$. In beiden Paaren wird zuerst $c_1$, $c_2$ und $c_3$ geschrieben, dann wird $r_1$ bzw. $w_1$ mit dem Wert aus $w_2$ bzw. $r_2$ geschrieben, anschließend wird $r_3$ bzw. $w_3$ mit dem Wert aus $r_1$ bzw. $w_1$ geschrieben.

Paar 1: $r_1[x] \rightarrow w_2[x] \rightarrow r_3[x] \rightarrow c_1 \rightarrow c_2 \rightarrow c_3$
Paar 2: $w_1[x] \rightarrow r_2[x] \rightarrow w_3[y] \rightarrow r_1[z] \rightarrow c_1 \rightarrow c_2 \rightarrow c_3$

Die gleiche Reihenfolge von Schreib- und Lesevorgängen mit den gleichen Schreibwerten für die Common Registers bedeutet, dass beide Paare konflikt-äquivalent sind.

Paar 3 ist hingegen nicht konflikt-äquivalent zu Paar 1 und Paar 2. In Paar 3 wird $r_3[y]$ und $w_3[y]$ vor $r_2[x]$ geschrieben, während in Paar 1 und Paar 2 $r_2[x]$ und $w_2[x]$ bzw. $w_1[x]$ vor $r_3[y]$ bzw. $w_3[y]$ geschrieben wird. Dadurch unterscheiden sich die Paare in der Reihenfolge der Schreibvorgänge an den Registern $r_3$ und $w_3$.

Paar 3: $w_1[x] \rightarrow r_3[y] \rightarrow r_1[z] \rightarrow r_2[x] \rightarrow w_3[y] \rightarrow c_1 \rightarrow c_2 \rightarrow c_3$
Paar 1/2: $r_1[x] \rightarrow w_2[x] \rightarrow r_3[x] \rightarrow c_1 \rightarrow c_2 \rightarrow c_3$ bzw. $w_1[x] \rightarrow r_2[x] \rightarrow w_3[y] \rightarrow c_1 \rightarrow c_2 \rightarrow c_3$

Die unterschiedliche Reihenfolge der Schreibvorgänge an den Registern $r_3$ und $w_3$ bedeutet, dass Paar 3 nicht konflikt-äquivalent zu Paar 1 und Paar 2 ist.





****************************************************************************************
****************************************************************************************




Answer to Question 15


Zu den Serialisierbarkeitsgraphen der drei gegebenen Schedules H_7, H_8 und H_9:

1. H_7 ist serialisierbar.
   Die Serialisierbarkeitsbedingung für Schedules erfordert, dass für jedes Write-Event ein vorhergehendes Read-Event existiert. In H_7 ist dies der Fall: w_1[x] -> r_2[x] und w_1[y] -> r_2[y]. Somit ist H_7 serialisierbar.

2. H_8 ist serialisierbar.
   In H_8 ist jedes Write-Event von einem vorhergehenden Write-Event abgesehen von w_1[x] und w_3[y]. Da w_1[x] und w_3[y] nicht miteinander konflikten, da sie unterschiedliche Variablen schreiben, ist H_8 serialisierbar.

3. H_9 ist nicht serialisierbar.
   In H_9 gibt es ein Konflikt zwischen w_1[x] und r_2[x], da w_1[x] vor r_2[x] steht, aber r_2[x] vor w_1[x] schreiben würde, wenn wir die Schedule in der Reihenfolge ausführen würden, die sie in H_9 aufgelistet sind. Daher ist H_9 nicht serialisierbar.

Zu den Serialisierbarkeitsgraphen:

1. H_7:
   Der Serialisierbarkeitsgraph für H_7 würde folgendermaßen aussehen:
   ```
   w_1[x] -> r_2[x] -> w_1[y] -> r_2[y] -> w_1[y] -> r_2[x] -> r_3[x] -> w_3[x] -> c_1 -> c_2
   ```

2. H_8:
   Der Serialisierbarkeitsgraph für H_8 würde folgendermaßen aussehen:
   ```
   w_1[x] -> w_2[y] -> w_2[x] -> w_3[y] -> c_1 -> c_2 -> c_3
   ```

3. H_9:
   Der Serialisierbarkeitsgraph für H_9 würde folgendermaße ungültig sein, da es ein Konflikt zwischen w_1[x] und r_2[x] gibt:
   ```
   w_2[x] -> r_3[y] -> w_1[x] -> w_3[x] -> r_2[x] -> c_1 -> c_2 -> c_3
   ```

   Oder

   ```
   w_1[x] -> r_2[x] -> w_2[x] -> r_3[y] -> w_3[x] -> c_1 -> c_2 -> c_3
   ```

   Beide Varianten wären ungültig, da w_1[x] und r_2[x] nicht serialisierbar sind.





****************************************************************************************
****************************************************************************************




Answer to Question 16


Antwort:

Beide Transaktionen T_1 und T_2 erfüllen die Bedingungen des 2-Phasen-Sperrprotokolls.

Begründung:

Die Transaktionen T_1 und T_2 folgen dem Prinzip des 2-Phasen-Sperrprotokolls, indem sie zunächst alle Leselocks (rl) und dann alle Schreibsperren (wl) erwerben, bevor sie Daten schreiben. Danach geben sie die Sperren frei (ul). Somit werden die Transaktionen die Daten nicht konkurrent schreiben und es wird verhindert, dass eine Transaktion eine noch nicht abgeschlossene Transaktion lesen oder schreiben kann.

T_1: rl_1[y] -> r_1[y] -> ul_1[y] -> wl_1[x] -> r_1[x] -> w_1[x] -> ul_1[x]

T_2: rl_2[x] -> r_2[x] -> ul_2[x] -> wl_2[y] -> r_2[y] -> w_2[y] -> ul_2[y]

Beide Transaktionen erwerben zunächst alle notwendigen Leselocks und geben dann die Sperren frei, bevor sie Schreibsperren erwerben und Daten schreiben. Somit wird die Isolation der Daten gewährleistet und es wird verhindert, dass eine Transaktion eine noch nicht abgeschlossene Transaktion lesen oder schreiben kann.





****************************************************************************************
****************************************************************************************




Answer to Question 17


Die Schedules $S_1$, $S_2$ und $S_3$ gehören in die höchste Rücksetzbarkeitsklasse $3$.

Die Rücksetzbarkeitsklasse einer Schedule wird bestimmt durch die Anzahl der Vorkommen von jeder Operation, die nicht in der Reihenfolge der Ausführung auftritt. In den gegebenen Schedules $S_1$, $S_2$ und $S_3$ sind alle Operationen genau zweimal vorgesehen, mit Ausnahme von $w_2[z]$ und $w_2[y]$, die jeweils dreimal vorkommen. Daher müssen diese Operationen in der Reihenfolge der Ausführung so positioniert werden, dass sie jeweils nur einmal zurückgesetzt werden.

Für $S_1$: Die Operationen $w_2[z]$ und $w_2[y]$ können an folgenden Stellen zurückgesetzt werden:
\begin{itemize}
\item $w_2[z]$ kann nach $r_1[z]$ und $r_3[x]$ zurückgesetzt werden.
\item $w_2[y]$ kann nach $r_2[y]$ und $w_2[y]$ zurückgesetzt werden.
\end{itemize}

Für $S_2$: Die Operationen $w_2[z]$ und $w_2[y]$ können an folgenden Stellen zurückgesetzt werden:
\begin{itemize}
\item $w_2[z]$ kann nach $r_1[z]$ und $r_3[x]$ zurückgesetzt werden.
\item $w_2[y]$ kann nach $r_2[y]$ und $w_2[y]$ zurückgesetzt werden.
\end{itemize}

Für $S_3$: Die Operationen $w_2[z]$ und $w_2[y]$ können an folgenden Stellen zurückgesetzt werden:
\begin{itemize}
\item $w_2[z]$ kann nach $r_1[z]$ und $r_3[x]$ zurückgesetzt werden.
\item $w_2[y]$ kann nach $r_2[y]$ und $w_2[y]$ zurückgesetzt werden.
\end{itemize}

Da für alle drei Schedules die Operationen $w_2[z]$ und $w_2[y]$ jeweils an zwei Stellen zurückgesetzt werden können, um die Anzahl der Vorkommen auf zwei zu reduzieren, befinden sich $S_1$, $S_2$ und $S_3$ in der höchsten Rücksetzbarkeitsklasse $3$.





****************************************************************************************
****************************************************************************************




