Skip to content

Commit 82296a9

Browse files
author
Johannes Schildgen
committed
Summer Semester 2025
1 parent 383b2f5 commit 82296a9

File tree

263 files changed

+51361
-12330
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

263 files changed

+51361
-12330
lines changed

1.html

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ <h4 style="text-align:center">&nbsp;</h4>
4747
</section>
4848
<section data-hide-from="2V">
4949
<h2>Vorlesung</h2>
50-
<div style="position: absolute; top: 120px; right:50px; font-size:230px"><i class="fas fa-university green"><!--<i class="fab fa-youtube green">--></i></div>
50+
<div style="position: absolute; top: 120px; right:50px; font-size:230px"><!--<i class="fas fa-university green">--><i class="fab fa-youtube green"></i></div>
5151
<h4>Vorlesung (ab <span data-metadata="lecture_startdate"></span>)</h4>
5252
<ul data-metadata="lecture_times">
5353
<li></li>
@@ -94,7 +94,7 @@ <h4>Übung (ab 2021-04-07,08,09)</h4>
9494
<aside class="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>
9595
</section>
9696

97-
<section>
97+
<!--<section>
9898
<h2>Klausur</h2>
9999
<h4>Klausur</h4>
100100
<ul>
@@ -108,7 +108,24 @@ <h4>Klausur</h4>
108108
<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>
109109
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>
110110
111-
</section>
111+
</section>-->
112+
113+
<section>
114+
<h2>Klausur</h2>
115+
<ul>
116+
<li>Zulassungsvorraussetzung: keine</li>
117+
<li>Zweigeteilte schriftliche Klausur</li>
118+
<li><b>1. Klausur: 06.05.2025 17:15 Uhr</b></li>
119+
<li>jeweils 60 Minuten Zeit</li>
120+
<li>Hilfsmittel: Handschriftlich<br>doppelseitig beschriebenes DIN-A4-Blatt</li>
121+
<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>
123+
</ul>
124+
<div style="position: absolute; top: 60px; right:50px; font-size:230px"><i class="fas fa-edit green"></i><div>
125+
126+
<aside class="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>
127+
128+
</section>
112129
<section>
113130
<h2>Literatur</h2>
114131
<div class="trackinfo"><i class="fas fa-headphones"></i> 1</div>

2.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ <h1>Was ist ein sinnvoller Entitätstyp?</h1>
163163
<li>Webshop</li>
164164
<li data-poll="correct">Blume</li>
165165
<li>Login</li>
166-
<li>Titanik</li>
166+
<li>Titanic</li>
167167
</ul>
168168
<h2>https://fraage.de</h2>
169169
</div>
@@ -1254,7 +1254,7 @@ <h3>Beispielaufgabe</h3>
12541254
<section>
12551255
<h3>Beispielaufgabe</h3>
12561256
<p>
1257-
Eine Bibliothek möchte eine Datenbank einsetzen, um <mark style="background-color:violet; color:black">Bücher</mark> zu speichern. Jedes Buch hat eine <u style="text-decoration-color: gold">eindeutige</u> <mark style="background-color:yellow; color:black">ISBN</mark>, <u style="text-decoration-color: gold">mehrere</u> <mark style="background-color:yellow; color:black">Autoren</mark>, und einen <mark style="background-color:yellow; color:black">Titel</mark>. <mark style="background-color:greenyellow; color:black">Bücher sind von einem Verlag</mark>. <u style="text-decoration-color: greenyellow">Von einem Verlag kann es mehrere Bücher geben</u>. Jeder <mark style="background-color:violet; color:black">Verlag</mark> wird durch eine <mark style="background-color:yellow; color:black">Verlags-ID</mark> <u style="text-decoration-color: gold">identifiziert</u> und hat einen <mark style="background-color:yellow; color:black">Namen</mark> sowie einen <mark style="background-color:yellow; color:black">Ort</mark>.
1257+
Eine Bibliothek möchte eine Datenbank einsetzen, um <mark style="background-color:violet; color:black">Bücher</mark> zu speichern. Jedes Buch hat eine <u style="text-decoration-color: gold">eindeutige</u> <mark style="background-color:yellow; color:black"><u>ISBN</u></mark>, <u style="text-decoration-color: gold">mehrere</u> <mark style="background-color:yellow; color:black">Autoren</mark>, und einen <mark style="background-color:yellow; color:black">Titel</mark>. <mark style="background-color:greenyellow; color:black">Bücher sind von einem Verlag</mark>. <u style="text-decoration-color: greenyellow">Von einem Verlag kann es mehrere Bücher geben</u>. Jeder <mark style="background-color:violet; color:black">Verlag</mark> wird durch eine <mark style="background-color:yellow; color:black"><u>Verlags-ID</u></mark> <u style="text-decoration-color: gold">identifiziert</u> und hat einen <mark style="background-color:yellow; color:black">Namen</mark> sowie einen <mark style="background-color:yellow; color:black">Ort</mark>.
12581258
</p>
12591259
<div style="height: 300px; overflow:hidden">
12601260
<div class="stretch erd">

3.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1268,7 +1268,7 @@ <h4 class="fragment" data-fragment-index="1">Join statt Kreuzprodukt</h4>
12681268
<p class="fragment small" data-fragment-index="1">Vorher: $\sigma_{produkte.produktnr=bewertungen.produktnr}(produkte \times bewertungen)$<br>
12691269
Nachher: $produkte \bowtie_{produkte.produktnr=bewertungen.produktnr} (bewertungen)$</p>
12701270
<h4 class="fragment" data-fragment-index="2">Frühstmögliche Projektion <small>(ohne Duplikateliminierung)</small></h4>
1271-
<p class="fragment small" data-fragment-index="2">Vorher: $\pi_{bezeichnung}(produkte \bowtie bewertungen)$<br>
1271+
<p class="fragment small" data-fragment-index="2" style="width: 30cm;">Vorher: $\pi_{bezeichnung}(produkte \bowtie bewertungen)$<br>
12721272
Nachher: $\pi_{bezeichnung}(\pi_{produktnr, bezeichnung}(produkte) \bowtie \pi_{produktnr}(bewertungen))$</p>
12731273

12741274
<div class="poll fragment fade-in-then-out" style="bottom:200px">
@@ -1576,6 +1576,7 @@ <h2>2. Normalform (2NF)</h2>
15761576
<p class="fragment small">Überprüfe für Nicht-Schlüsselattribut &quot;bezeichnung&quot;: $pizza\_id, zutat \Rightarrow bezeichnung$ ?</p>
15771577
<p class="fragment small">Nicht der Fall, weil bereits $pizza\_id \rightarrow bezeichnung$</p>
15781578
<p class="fragment small">Damit ist die Relation nicht in 2NF.</p>
1579+
<aside class="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>
15791580
</section>
15801581
<section data-hide-from="2V">
15811582
<h3>Überführung in 2NF</h3>

4.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ <h2>INSERT</h2>
501501
<p class="small">Spaltennamen weglassen:</p>
502502
<pre style="width: 95%;"><code class="sql" data-trim contenteditable>INSERT INTO produkte VALUES (88, 'Katzenfutter', 4.99, NULL)</code></pre>
503503
</div>
504-
<p class="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+
<p class="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>
505505

506506
<aside class="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>
507507
</section>
@@ -1020,19 +1020,19 @@ <h2>SELECT</h2>
10201020
<section>
10211021
<h2>SELECT mit OUTER JOIN</h2>
10221022
<div class="trackinfo"><i class="fas fa-headphones"></i> 73</div>
1023-
<pre style="width: 93%"><code class="sql" data-trim contenteditable>SELECT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
1023+
<pre style="width: 100%"><code class="sql" data-trim contenteditable>SELECT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
10241024
FROM hersteller H LEFT JOIN produkte P ON p.hersteller = H.firma
10251025
WHERE P.preis > 3
10261026
GROUP BY h.land HAVING COUNT(*) < 5 ORDER BY COUNT(*)
10271027
</code></pre>
10281028
<p class="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>
1029-
<pre class="fragment"><code class="sql" data-trim contenteditable>SELECT /****/
1029+
<pre class="fragment" style="width: 100%;"><code class="sql" data-trim contenteditable>SELECT /****/
10301030
WHERE P.preis > 3 OR P.produktnr IS NULL</code></pre>
1031-
<pre class="fragment"><code class="sql" data-trim contenteditable>SELECT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
1031+
<pre class="fragment" style="width: 100%;"><code class="sql" data-trim contenteditable>SELECT H.land, COUNT(produktnr) AS anzahl, AVG(P.preis) AS avg_preis
10321032
FROM hersteller H
10331033
LEFT JOIN (SELECT * FROM produkte WHERE preis > 3) P
10341034
ON p.hersteller = H.firma
1035-
GROUP BY h.land HAVING COUNT(*) < 5 ORDER BY COUNT(*)</code></pre>
1035+
GROUP BY h.land HAVING COUNT(produktnr) < 5 ORDER BY COUNT(produktnr)</code></pre>
10361036

10371037
<aside class="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>
10381038
</section>

5.html

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ <h3>GRANT: Berechtigung erteilen</h3>
355355
<p class="small">GRANT &lt;Recht&gt; ON &lt;Objekt&gt; TO &lt;Benutzer oder Rolle&gt;</p>
356356

357357
<pre class="fragment"><code class="sql" data-trim contenteditable>--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>
359359

360360
<pre class="fragment"><code class="sql" data-trim contenteditable>--Die Finanzabteilung darf die Tabelle Reisekosten lesen
361361
GRANT SELECT ON klinik.reisekosten TO finanzen;</code></pre>
@@ -653,6 +653,41 @@ <h2>Phantomproblem</h2>
653653
<aside class="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>
654654
</section>
655655

656+
<section>
657+
<h2>SQL-Isolationslevels</h2>
658+
<div class="columns">
659+
<div style="width: 12cm;"><p class="small">
660+
<ul class="small">
661+
<li>Read Uncommitted</li>
662+
<li>Read Committed</li>
663+
<li>Repeatable Read</li>
664+
<li>Serializable</li>
665+
</ul>
666+
</div>
667+
668+
<div style="width: 18cm;" class="small">Im DBeaver: Datenbank &rightarrow; Transaktionsmodus<img src="img/5/autocommit.png" alt="DBeaver Autocommit" style="width:8cm; margin-top: 0mm;" class="noborder"></div>
669+
</div>
670+
<table class="small" style="margin-top: -3mm;">
671+
<tr><td></td><td><b>Dirty Read</b></td><td><b>Non&#8209;Repeatable&nbsp;Read</b></td><td><b>Phantomproblem</b></td></tr>
672+
<tr><td><b>Read&nbsp;Uncommitted</b></td><td>möglich</td><td>möglich</td><td>möglich</td></tr>
673+
<tr><td><b>Read Committed</b> </td><td>nicht&nbsp;mögl.</td><td>möglich</td><td>möglich</td></tr>
674+
<tr><td><b>Repeatable Read</b> </td><td>nicht&nbsp;mögl.</td><td>nicht mögl.</td><td>möglich</td></tr>
675+
<tr><td><b>Serializable</b> </td><td>nicht&nbsp;mögl.</td><td>nicht mögl.</td><td>nicht mögl.</td></tr>
676+
</table>
677+
<p class="small">Lost Updates werden stets verhindert, sie sind in allen Iso'levels nicht möglich.</p>
678+
<div class="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+
<li data-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+
<aside class="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>
689+
</section>
690+
656691
<section>
657692
<h2>Serialisierbarkeit</h2>
658693
<div style="position: absolute; top: 10px; right:3px; font-size:120px"><i class="fas fa-random green"></i></div>
@@ -887,41 +922,6 @@ <h2>Deadlocks</h2>
887922
<aside class="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>
888923
</section>
889924

890-
<section>
891-
<h2>SQL-Isolationslevels</h2>
892-
<div class="columns">
893-
<div style="width: 12cm;"><p class="small">
894-
<ul class="small">
895-
<li>Read Committed</li>
896-
<li>Read Uncommitted</li>
897-
<li>Repeatable Read</li>
898-
<li>Serializable</li>
899-
</ul>
900-
</div>
901-
902-
<div style="width: 12cm;"><img src="img/5/autocommit.png" alt="DBeaver Autocommit" style="width:12cm" class="noborder"></div>
903-
</div>
904-
<table class="fragment small" style="margin-top: -3mm;">
905-
<tr><td></td><td><b>Dirty Read</b></td><td><b>Non&#8209;Repeatable&nbsp;Read</b></td><td><b>Phantomproblem</b></td></tr>
906-
<tr><td><b>Read&nbsp;Uncommitted</b></td><td>möglich</td><td>möglich</td><td>möglich</td></tr>
907-
<tr><td><b>Read Committed</b> </td><td>nicht&nbsp;mögl.</td><td>möglich</td><td>möglich</td></tr>
908-
<tr><td><b>Repeatable Read</b> </td><td>nicht&nbsp;mögl.</td><td>nicht mögl.</td><td>möglich</td></tr>
909-
<tr><td><b>Serializable</b> </td><td>nicht&nbsp;mögl.</td><td>nicht mögl.</td><td>nicht mögl.</td></tr>
910-
</table>
911-
<p class="fragment small">Lost Updates werden stets verhindert, sie sind in allen Iso'levels nicht möglich.</p>
912-
<div class="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-
<li data-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-
<aside class="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>
923-
</section>
924-
925925
<section>
926926
<h3>Multi-Version-Concurrency-Control</h3>
927927
<ul class="small">

0 commit comments

Comments
 (0)