You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<h4>Vorlesung (ab <spandata-metadata="lecture_startdate"></span>)</h4>
52
52
<uldata-metadata="lecture_times">
53
53
<li></li>
@@ -94,7 +94,7 @@ <h4>Übung (ab 2021-04-07,08,09)</h4>
94
94
<asideclass="notes">Es ist nicht möglich, Punkte für die Übung zu bekommen, wenn im ELO die Deadline abgelaufen ist oder die Abgabe nicht vollständig eingereicht wurde.</aside>
95
95
</section>
96
96
97
-
<section>
97
+
<!--<section>
98
98
<h2>Klausur</h2>
99
99
<h4>Klausur</h4>
100
100
<ul>
@@ -108,7 +108,24 @@ <h4>Klausur</h4>
108
108
<aside class="notes">Wenn Sie mal ein Übungsblatt vergessen abzugeben, machen Sie sich keine Sorgen. Es gibt genügend Möglichkeiten, Bonuspunkte zu sammeln (Bonusaufgaben auf den Blättern, Quizzes, ...).<br>
109
109
Als Hilfsmittel für die Klausur ist ein handschriftlich doppelseitig beschriebenes Blatt zugelassen. Nicht zwei einseitige Blätter, nicht kopiert, nicht ausgedruckt, keine Tablet-Zeichnung. Sondern: Ein (1) handschriftlich (mit Stiften) doppelseitig (Vorder- und Rückseite) beschriebenes DIN-A4-Blatt.</aside>
<li>Bonus: 1 Notenstufe besser (z. B. 1,0 statt 1,3), wenn mind. 100 Punkte in der Übung erreicht wurden.<br>
122
+
<small>Nicht auf Nachklausur und zukünftige Semester übertragbar, aber Sie können jedes Semester nochmal an den Übungen teilnehmen und den Bonus sammeln.</small></li>
<asideclass="notes">Als Hilfsmittel für die Klausur ist ein handschriftlich doppelseitig beschriebenes Blatt zugelassen. Nicht zwei einseitige Blätter, nicht kopiert, nicht ausgedruckt, keine Tablet-Zeichnung. Sondern: Ein (1) handschriftlich (mit Stiften) doppelseitig (Vorder- und Rückseite) beschriebenes DIN-A4-Blatt.</aside>
Copy file name to clipboardExpand all lines: 2.html
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -163,7 +163,7 @@ <h1>Was ist ein sinnvoller Entitätstyp?</h1>
163
163
<li>Webshop</li>
164
164
<lidata-poll="correct">Blume</li>
165
165
<li>Login</li>
166
-
<li>Titanik</li>
166
+
<li>Titanic</li>
167
167
</ul>
168
168
<h2>https://fraage.de</h2>
169
169
</div>
@@ -1254,7 +1254,7 @@ <h3>Beispielaufgabe</h3>
1254
1254
<section>
1255
1255
<h3>Beispielaufgabe</h3>
1256
1256
<p>
1257
-
Eine Bibliothek möchte eine Datenbank einsetzen, um <markstyle="background-color:violet; color:black">Bücher</mark> zu speichern. Jedes Buch hat eine <ustyle="text-decoration-color: gold">eindeutige</u><markstyle="background-color:yellow; color:black">ISBN</mark>, <ustyle="text-decoration-color: gold">mehrere</u><markstyle="background-color:yellow; color:black">Autoren</mark>, und einen <markstyle="background-color:yellow; color:black">Titel</mark>. <markstyle="background-color:greenyellow; color:black">Bücher sind von einem Verlag</mark>. <ustyle="text-decoration-color: greenyellow">Von einem Verlag kann es mehrere Bücher geben</u>. Jeder <markstyle="background-color:violet; color:black">Verlag</mark> wird durch eine <markstyle="background-color:yellow; color:black">Verlags-ID</mark><ustyle="text-decoration-color: gold">identifiziert</u> und hat einen <markstyle="background-color:yellow; color:black">Namen</mark> sowie einen <markstyle="background-color:yellow; color:black">Ort</mark>.
1257
+
Eine Bibliothek möchte eine Datenbank einsetzen, um <markstyle="background-color:violet; color:black">Bücher</mark> zu speichern. Jedes Buch hat eine <ustyle="text-decoration-color: gold">eindeutige</u><markstyle="background-color:yellow; color:black"><u>ISBN</u></mark>, <ustyle="text-decoration-color: gold">mehrere</u><markstyle="background-color:yellow; color:black">Autoren</mark>, und einen <markstyle="background-color:yellow; color:black">Titel</mark>. <markstyle="background-color:greenyellow; color:black">Bücher sind von einem Verlag</mark>. <ustyle="text-decoration-color: greenyellow">Von einem Verlag kann es mehrere Bücher geben</u>. Jeder <markstyle="background-color:violet; color:black">Verlag</mark> wird durch eine <markstyle="background-color:yellow; color:black"><u>Verlags-ID</u></mark><ustyle="text-decoration-color: gold">identifiziert</u> und hat einen <markstyle="background-color:yellow; color:black">Namen</mark> sowie einen <markstyle="background-color:yellow; color:black">Ort</mark>.
<pclass="fragment small">Überprüfe für Nicht-Schlüsselattribut "bezeichnung": $pizza\_id, zutat \Rightarrow bezeichnung$ ?</p>
1577
1577
<pclass="fragment small">Nicht der Fall, weil bereits $pizza\_id \rightarrow bezeichnung$</p>
1578
1578
<pclass="fragment small">Damit ist die Relation nicht in 2NF.</p>
1579
+
<asideclass="notes">Ein Nicht-Schlüsselattribut ist ein Attribut, was nicht Teil eines Schlüsselkandidaten ist. Es trägt zusätzliche Informationen über die Entität, ohne jedoch zur eindeutigen Identifikation von Datensätzen beizutragen.</aside>
Copy file name to clipboardExpand all lines: 4.html
+5-5Lines changed: 5 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -501,7 +501,7 @@ <h2>INSERT</h2>
501
501
<pclass="small">Spaltennamen weglassen:</p>
502
502
<prestyle="width: 95%;"><codeclass="sql" data-trimcontenteditable>INSERT INTO produkte VALUES (88, 'Katzenfutter', 4.99, NULL)</code></pre>
503
503
</div>
504
-
<pclass="fragment small">Nachteile: Schwerer verständlich zu lesen, man muss auf die korrekte Reihenfolge achten, man darf keine Spalte vergessen, in der Zukunft könnten sich die Spalten ändern.</p>
504
+
<pclass="fragment small">Nachteile: Schwerer verständlich zu lesen, man muss auf die korrekte Reihenfolge achten, man darf keine Spalte weglassen, in der Zukunft könnten sich die Spalten ändern.</p>
505
505
506
506
<asideclass="notes">Wenn nur ein Teil der Tabellenspalten gesetzt werden, werden die anderen Spalten auf ihre DEFAULT-Werte, den nächsten AUTO_INCREMENT / SERIAL-Wert oder auf NULL gesetzt. Lässt man die Spaltennamen vor dem Stichwort <code>VALUES</code> weg, müssen alle Spalten der Tabelle in der richtigen Reihenfolge gesetzt werden. Wenn in der Zukunft eine neue Spalte in die Produkttabelle hinzugefügt wird, würde das untere Kommando nicht mehr funktionieren.</aside>
<prestyle="width: 93%"><codeclass="sql" data-trimcontenteditable>SELECT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
1023
+
<prestyle="width: 100%"><codeclass="sql" data-trimcontenteditable>SELECT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
1024
1024
FROM hersteller H LEFT JOIN produkte P ON p.hersteller = H.firma
1025
1025
WHERE P.preis > 3
1026
1026
GROUP BY h.land HAVING COUNT(*) <5ORDERBYCOUNT(*)
1027
1027
</code></pre>
1028
1028
<pclass="small">Problem: WHERE-Prädikat <code>preis > 3</code> wird nach dem äußeren Verbund ausgeführt, schmeißt also die gewünschten Zeilen mit NULL-Werten wieder raus.</p>
WHERE P.preis > 3 OR P.produktnr IS NULL</code></pre>
1031
-
<preclass="fragment"><codeclass="sql" data-trimcontenteditable>SELECT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
1031
+
<preclass="fragment"style="width: 100%;"><codeclass="sql" data-trimcontenteditable>SELECT H.land, COUNT(produktnr) AS anzahl, AVG(P.preis) AS avg_preis
1032
1032
FROM hersteller H
1033
1033
LEFT JOIN (SELECT * FROM produkte WHERE preis > 3) P
1034
1034
ON p.hersteller = H.firma
1035
-
GROUP BY h.land HAVING COUNT(*) <5ORDERBYCOUNT(*)</code></pre>
1035
+
GROUP BY h.land HAVING COUNT(produktnr) <5ORDERBYCOUNT(produktnr)</code></pre>
1036
1036
1037
1037
<asideclass="notes">Ein LEFT JOIN alleine löst das Problem nicht, dass Länder ohne teure Produkte im Ergebnis nicht auftauchen. Hier sind zwei Lösungen. Die erste liefert die Zeilen, die beim Left Join keinen Joinpartner gefunden haben, die zweite erzwingt ein frühzeitiges Filtern vor der Ausführung des Joins.</aside>
<pclass="small">GRANT <Recht> ON <Objekt> TO <Benutzer oder Rolle></p>
356
356
357
357
<preclass="fragment"><codeclass="sql" data-trimcontenteditable>--Mitarbeiter dürfen sich mit der Datenbank verbinden
358
-
GRANT CONNECT ON klinik_db TO mitarbeiter;</code></pre>
358
+
GRANT CONNECT ON DATABASE klinik_db TO mitarbeiter;</code></pre>
359
359
360
360
<preclass="fragment"><codeclass="sql" data-trimcontenteditable>--Die Finanzabteilung darf die Tabelle Reisekosten lesen
361
361
GRANT SELECT ON klinik.reisekosten TO finanzen;</code></pre>
@@ -653,6 +653,41 @@ <h2>Phantomproblem</h2>
653
653
<asideclass="notes">Das Phantomproblem ist ähnlich zum Non-repeatable Read, bezieht sich jedoch auf während einer laufenden Transaktion neu hinzugefügte oder gelöschte Zeilen. TA<sub>1</sub> möchte alle Monsterfood-Produkte anzeigen und zusätzlich deren Anzahl (oder Preis-Summe, o.ä.) berechnen. Das Ergebnis ist inkonsistent, weil zwischenzeitlich TA<sub>2</sub> ein neues Produkt hinzugefügt hat.</aside>
<pclass="small">Lost Updates werden stets verhindert, sie sind in allen Iso'levels nicht möglich.</p>
678
+
<divclass="poll fragment" style="bottom:-40px">
679
+
<h1>Was ist der Grund, warum man mal ein lockereres Isolationslevel als Serializable wählen könnte?</h1>
680
+
<ul>
681
+
<li>Sicherheit</li>
682
+
<lidata-poll="correct">Performanz</li>
683
+
<li>Bessere Erfüllung von ACID</li>
684
+
<li>Man will alte Werte lesen</li>
685
+
</ul>
686
+
<h2>https://fraage.de</h2>
687
+
</div>
688
+
<asideclass="notes">Während einer Transaktion kann eine Anwendung ein Isolationslevel setzen, um dem TMS mitzuteilen, welche Anomalien innerhalb dieser TA verhindert werden müssen. Werden weniger strikte Levels gewählt, ist in der Regel eine bessere Performance möglich.</aside>
<asideclass="notes">Ein Transaktions-Management-System muss in der Lage sein, Deadlocks zu erkennen (z. B. durch Erkennung zyklischer Wartebedingungen oder mittels Timeouts) und sie aufzulösen, damit Transaktionen nicht unendlich lange warten. In der Regel wird ein Deadlock aufgelöst, indem eine der TAs zurückgesetzt wird und somit die andere fortfahren kann.</aside>
<pclass="fragment small">Lost Updates werden stets verhindert, sie sind in allen Iso'levels nicht möglich.</p>
912
-
<divclass="poll fragment" style="bottom:-40px">
913
-
<h1>Was ist der Grund, warum man mal ein lockereres Isolationslevel als Serializable wählen könnte?</h1>
914
-
<ul>
915
-
<li>Sicherheit</li>
916
-
<lidata-poll="correct">Performanz</li>
917
-
<li>Bessere Erfüllung von ACID</li>
918
-
<li>Man will alte Werte lesen</li>
919
-
</ul>
920
-
<h2>https://fraage.de</h2>
921
-
</div>
922
-
<asideclass="notes">Während einer Transaktion kann eine Anwendung ein Isolationslevel setzen, um dem TMS mitzuteilen, welche Anomalien innerhalb dieser TA verhindert werden müssen. Werden weniger strikte Levels gewählt, ist in der Regel eine bessere Performance möglich.</aside>
0 commit comments