alle Fragen gesammelt

This commit is contained in:
WieErWill 2021-02-10 14:22:43 +01:00
parent 19f573c093
commit 1b96cdde54

View File

@ -816,3 +816,386 @@ Wählen Sie eine oder mehrere Antworten:
- [ ] Eine Gruppierung γ ohne Attribute ist nicht erlaubt.
- [ ] Der Ausdruck π_{Matrikelnummer, besteNote} (σ_{Fächeranzahl>2} (γ_{MIN(Note)←besteNote, COUNT(Fach)←Fächeranzahl, Matrikelnummer} (Prüfungen))) liefert als Ergebnis das Tupel ('40000', 1.0) zurück.
# Anfragekalkülen
Welche der folgenden Aussagen über Kalküle sind richtig?
- [ ] Anfragen im Kalkül sind im Gegensatz zu SQL-Anfragen prinzipiell sicher.
- [x] Der Ausdruck {x | x ∈ STUDENT ∧ x.Matrikelnummer = '12345'} gehört zum Tupelkalkül.
- [x] Zu jedem Ausdruck im Tupelkalkül kann ein Ausdruck im Bereichskalkül gefunden werden, ebenso umgekehrt (Bereichskalkül ins Tupelkalkül).
- [x] Zu jedem Ausdruck in der Relationenalgebra lässt sich ein adäquater Ausdruck im Tupelkalkül oder Bereichskalkül finden.
- [x] Ein Kalkülausdruck formuliert eine Datenbankanfrage theoretisch.
- [ ] Der Ausdruck {x | x ∈ STUDENT ∧ x.Matrikelnummer = '12345'} gehört zum Bereichskalkül.
- [x] Der Ausdruck {y | STUDENT(x, y, z) ∧ x = '12345'} gehört zum Tupelkalkül.
- [ ] Der Ausdruck {y | STUDENT(x, y, z) ∧ x = '12345'} gehört zum Bereichskalkül.
Welche der folgenden Aussagen über Sicherheit in Kalkülen sind korrekt?
- [ ] Eine Anfrage ist sicher, wenn der Datenbankzustand nicht unbefugt manipuliert werden kann.
- [x] Es gibt sichere Anfragen, die nicht syntaktisch sichere Anfragen sind.
- [ ] Eine Anfrage ist sicher, wenn der geänderte Datenbankzustand nicht von Fremden eingesehen werden kann.
- [ ] Es gibt syntaktisch sichere Anfragen, die nicht sichere Anfragen sind.
- [ ] Die Anfrage {x, y | y = 10 ∧ x < 0 x < 10} ist sicher (Regeln der Arithmetik).
- [x] Eine Anfrage ist sicher, wenn sie für jeden beliebigen Datenbankzustand ein endliches Ergebnis liefert.
Gegeben ist folgendes Relationenschema:
```sql
STUDENT ( Matrikelnummer, Vorname, Nachname, Semester )
PRUEFUNG ( Matrikelnummer, Fach, Datum, Note )
```
Hierzu kommt folgender Ausdruck der Relationenalgebra:
$\sigma_{Datum=14.12.2017} (PRUEFUNG) \bowtie (\pi_{Matrikelnummer, Nachname} (STUDENT))$
Welcher der folgenden Ausdrücke im Tupelkalkül liefert ein äquivalentes Ergebnis?
- [ ] { s.Matrikelnummer, s.Nachname | s ∈ STUDENT ∧ p ∈ PRUEFUNG ∧ s.Matrikelnummer = p.Matrikelnummer ∧ p.Datum = '14.12.2017' }
- [ ] { m, n | STUDENT(m, _ , n , s) ∧ PRUEFUNG(m, _ , d , _ ) ∧ d = '14.12.2017' }
- [ ] { s.Matrikelnummer, s.Nachname | s ∈ STUDENT ∧ p ∈ PRUEFUNG ∧ p.Datum = '14.12.2017' }
- [ ] { s.Matrikelnummer, s.Nachname | s ∈ STUDENT ∧ p ∈ PRUEFUNG }
- [ ] { s.Matrikelnummer, s.Nachname, p.Fach, p.Datum, p.Note | s ∈ STUDENT ∧ p ∈ PRUEFUNG ∧ s.Matrikelnummer = p.Matrikelnummer ∧ p.Datum = '14.12.2017' ∧ ¬s.Vorname ∧ ¬s.Semester }
- [x] { s.Matrikelnummer, s.Nachname, p.Fach, p.Datum, p.Note | s ∈ STUDENT ∧ p ∈ PRUEFUNG ∧ s.Matrikelnummer = p.Matrikelnummer ∧ p.Datum = '14.12.2017' }
# Bereichskalkül
Gegeben ist folgendes Relationenschema:
```sql
STUDENT ( Matrikelnummer, Vorname, Nachname, Semester )
PRUEFUNG ( Matrikelnummer, Fach, Datum, Note )
```
Hierzu kommt folgender Ausdruck im Bereichskalkül: $\{ v, n | STUDENT ( m, v, _ , s ) \wedge PRUEFUNG ( m, _ , d , n ) \wedge s > 3 \}$
Welche der folgenden Aussagen sind richtig?
- [ ] Statt dem Ausdruck "s > 3" könnte die Bedingung auch direkt in STUDENT eingesetzt werden, d.h. $STUDENT ( m, v, _ , >3 )$.
- [ ] Es entsteht das Kreuzprodukt zwischen STUDENT und PRUEFUNG, da eine Verbundbedingung fehlt.
- [x] Ausgegeben werden Vornamen und Noten von Studenten, die mindestens im vierten Semester sind.
- [ ] Im Tupelkalkül würde dasselbe Ergebnis durch ${x.Vorname, y.Note | x ∈ STUDENT ∧ y ∈ PRUEFUNG ∧ x.Semester > 3}$ ausgedrückt.
- [x] Statt "d" kann hier auch ein Unterstrich "_" verwendet werden, da "d" nirgends im Kalkül verwendet wird.
- [x] In der Relationenalgebra würde dasselbe Ergebnis durch $\pi_{Vorname,Note}(\sigma_{Semester>3}(Student \bowtie Pruefung))$ ausgedrückt.
- [x] Die Variablennamen (z.B. "m") können frei gewählt werden, sofern keine Zusammenhänge verloren gehen.
Gegeben ist wieder folgendes Relationenschema:
```sql
STUDENT ( Matrikelnummer, Vorname, Nachname, Semester )
PRUEFUNG ( Matrikelnummer, Fach, Datum, Note )
```
Dazu gesucht werden die Vor- und Nachnamen von Studenten, die in der Prüfung zum Fach "Datenbanksysteme" besser als 2.0 abgeschnitten haben.
Welche der folgenden Ausdrücke im Bereichskalkül ermitteln dieses Ergebnis?
- [x] $\{x, y | STUDENT ( a, x, y, _ ) ∧ PRUEFUNG ( b, f, _, z ) ∧ z < 2.0 f = "Datenbanksysteme" a=b\}$
- [x] $\{Vorname, Nachname | STUDENT ( Matrikelnummer, Vorname, Nachname, Semester ) ∧ PRUEFUNG ( Matrikelnummer, Fach, Datum, Note ) ∧ Note < 2.0 Fach = "Datenbanksysteme"\}$
- [x] $\{x, y | STUDENT ( m, x, y, _ ) ∧ PRUEFUNG ( m, "Datenbanksysteme", _, z ) ∧ z < 2.0\}$
- [x] $\{x, y | STUDENT ( a, x, y, b ) ∧ PRUEFUNG ( a, f, c, z ) ∧ z < 2.0 f = "Datenbanksysteme"\}$
- [ ] $\{x, y | STUDENT ( a, x, y, _ ) ∧ PRUEFUNG ( b, f, _, < 2.0 ) f = "Datenbanksysteme" a=b\}$
- [ ] $\{x, y | STUDENT ( _ , x, y, _ ) ∧ PRUEFUNG ( _ , "Datenbanksysteme", _, z ) ∧ z < 2.0\}$
- [x] $\{x, y | STUDENT ( m, x, y, _ ) ∧ PRUEFUNG ( m, f, _, z ) ∧ z < 2.0 f = "Datenbanksysteme"\}$
Gegeben ist noch einmal folgendes Relationenschema:
```sql
STUDENT ( Matrikelnummer, Vorname, Nachname, Semester )
PRUEFUNG ( Matrikelnummer, Fach, Datum, Note )
```
Hierzu kommt folgender Ausdruck der Relationenalgebra:
- [ ] $\sigma_{Datum=14.12.2017} (PRUEFUNG) \bowtie (\pi_{Matrikelnummer, Nachname} (STUDENT))$
- [ ] Welcher der folgenden Ausdrücke im Bereichskalkül liefert ein äquivalentes Ergebnis?
- [ ] $\{ m, n, f, d | STUDENT(m, _ , n , s) ∧ PRUEFUNG(x, f , d , n ) ∧ d = '14.12.2017' ∧ m = x \}$
- [ ] $\{ m, n, f, d | STUDENT(m, _ , n , s) ∧ PRUEFUNG(m, f , d , n ) ∧ d = '14.12.2017' \}$
- [x] $\{ m, n, f, d, o | STUDENT(m, _ , n , s) ∧ PRUEFUNG(m, f , d , o ) ∧ d = '14.12.2017' \}$
- [ ] $\{ m, n | STUDENT(m, _ , _ , s) ∧ PRUEFUNG(m, _ , d , n ) ∧ d = '14.12.2017' \}$
- [ ] $\{ m, n | STUDENT(m, _ , n , s) ∧ PRUEFUNG(m, _ , d , _ ) ∧ d = '14.12.2017' \}$
# Transaktionen, Integrität und Trigger
## Kontrollfragen zu Grundbegriffen
Welche der folgenden Aussagen sind richtig?
- [x] Die Typintegrität sowie Schlüssel und Fremdschlüssel stellen Integritätsbedingungen im Relationenmodell dar.
- [x] Integritätsbedingungen können bestimmte Datenbankänderungen erlauben oder verbieten.
- [ ] Integritätsbedingungen beziehen sich ausschließlich auf Datenbankzustände (Ist-Stand und Wird-Zu-Stand).
- [ ] Integritätsbedingungen gibt es nicht im Relationenmodell, nur in SQL.
- [x] Integritätsbedingungen sichern die Korrektheit der Datenbank.
## Transaktionsbegriff
Welche der folgenden Aussagen über Transaktionen sind richtig?
- [x] Bei einer Transaktion wird der vorliegende Datenbankzustand in einen anderen (evtl. gleichen) Datenbankzustand überführt.
- [x] Für jede Transaktion auf der Datenbank gilt das ACID-Prinzip.
- [ ] Datenbank-Konsistenz zu Beginn einer Transaktion kann nicht garantiert werden, lediglich nach Ende einer Transaktion.
- [ ] Das ACID-Prinzip betrifft nur bestimmte Transaktionen (z.B. schreibende Transaktionen).
- [ ] Eine Transaktion überführt die Datenbank immer in einen veränderten Datenbankzustand.
- [x] Eine Transaktion kann als eine Folge von Operationen gesehen werden.
- [x] Konsistenz der Datenbank herrscht sowohl vor Beginn als auch nach Ende jedweder Transaktion.
- [ ] Eine Transaktion ist äquivalent zu einer Operation auf der Datenbank.
Welche der nachfolgenden Forderungen gehören zum ACID-Prinzip?
- [ ] Kausalität
- [x] Dauerhaftigkeit
- [x] Isolation
- [x] Atomarität
- [ ] Inversivität
- [ ] Abhängigkeit
- [x] Konsistenz
- [x] Integritätserhaltung
- [ ] Distributivität
- [ ] Reversivität
- [x] Persistenz
- [ ] Plausibilität
Welche Probleme entstehen bei Mehrbenutzerbetrieb der Datenbank?
- [ ] Dirty Harry (Illegales Lesen)
- [x] Dirty Read (Abhängigkeiten von nicht freigegebenen Daten)
- [x] Phantom-Problem
- [ ] Ghost Transaction (Geist-Problem)
- [x] Nonrepeatable Read (Inkonsistentes Lesen)
- [ ] Overload (Überladung)
- [x] Lost Update (Verlorengegangenes Ändern)
- [ ] Dropped Operation (Verlorene Änderung)
Was beschreibt der Begriff der Serialisierbarkeit bei Transaktionen?
- [ ] Seriell ausgeführte Transaktionen sind serialisierbar genau dann wenn ACID-Prinzipien eingehalten werden.
- [ ] Eine verschränkte Ausführung von Transaktionen heißt serialisierbar, wenn die Verschränkung sicher ist.
- [ ] Eine verschränkte Ausführung von Transaktionen ist genau dann serialisierbar, wenn deren Datenzugriffe parallel ausgeführt werden können.
- [x] Mehrere Transaktionen sind serialisierbar, wenn ihre verschränkte Ausführung denselben Effekt wie ihre serielle Ausführung hat.
- [ ] Mehrere Transaktionen sind serialisierbar, wenn ihre Operationen disjunkt sind.
## Integritätsbedingungen in SQL
Welche der folgenden Aussagen sind korrekt?
- [ ] Mit Check-Klauseln lassen sich Überprüfungszeitpunkte für Bedingungen festlegen.
- [x] Mit Create Domain können Wertebereiche für Attribute definiert werden.
- [x] Mit Check-Klauseln lassen sich attributspezifische Bedingungen realisieren, z.B. "Alter > 1900".
- [x] Mit Assertions können Bedingungen festgelegt werden, die zu jeder Zeit für die Datenbank gelten müssen.
- [ ] Assertions überprüfen Fremdschlüsselbedingungen nach Datenbankänderungen.
## Trigger
Welche der folgenden Aussagen beschreiben Trigger?
- [x] Trigger lösen beim Eintreten von bestimmten Ereignissen automatisch aus.
- [ ] Trigger können nur bei Insert-Operationen eingesetzt werden.
- [x] Trigger der Datenbank bestehen aus Anweisungen bzw. Prozeduren.
- [x] Trigger erzwingen Integritätsbedingungen.
- [ ] Trigger wirken einmalig nach jeder ausgeführten Änderung, z.B. nach dem abgeschlossenen Einfügen von fünf neuen Tupeln.
Was lässt sich beim Einsatz von Triggern angeben?
- [x] Trigger können vor oder nach einer Änderung auslösen.
- [ ] Trigger können Primärschlüssel oder Fremdschlüssel als zusätzliche Integritätssicherung angeben.
- [x] Trigger können für Anweisungen entweder die alten Tupel vor der Änderung oder die neuen Tupel nach der Änderung referenzieren.
- [ ] Trigger können zeitlichen oder räumlichen Bezug haben.
- [x] Trigger können einmal nach jeder gesamten Änderung oder auch für jede Einzeländerung auslösen, d.h. pro Tupel.
# Sichten und Zugriffskontrolle
## Sichtenkonzept
Welche Vorteile bietet die Verwendung von Sichten in einer Datenbank?
- [ ] Sichten ermöglichen eine physische Datenunabhängigkeit, beispielsweise eine Änderung der Indexstruktur, was keine Auswirkungen auf das Datenbankschema hat.
- [x] Sichten erlauben die Kategorisierung von Nutzern (z.B. Verwaltung, Einkauf, Fertigung,...), wodurch bestimmte Nutzer nicht alle Daten sehen müssen.
- [x] Durch Sichten können (aus Gründen der Zugriffskontrolle) Daten ausgeblendet werden.
- [ ] Sichten erleichtern Änderungen der Datenbank, da diese nur Ausschnitte der Daten enthalten und somit nicht der ganze Datenbestand geändert werden muss.
- [x] Sichten ermöglichen eine logische Datenunabhängigkeit, beispielsweise um ein Attribut in der Datenbankstruktur zu ändern, was der Anwender nicht mitbekommen soll.
- [x] Sichten können Anwendern erlauben, einfachere Anfragen an die Datenbank zu stellen.
- [ ] Sichten erlauben eine automatische Anfragetransformation, beispielsweise Aggregatfunktionen zu schachteln (z.B. maximaler Durchschnittspreis).
Gegeben ist folgende Relation: `Pruefung ( Matrikelnummer , Fach , Pruefer , Datum , Note )`
Nun wird über folgendes SQL-Konstrukt eine Sicht definiert:
```sql
CREATE VIEW Sichtbeispiel AS
SELECT Fach, AVG(Note)
FROM Pruefung
GROUP BY Fach
```
Welche der folgenden Behauptungen werden durch diese Sicht umgesetzt?
- [ ] Die Sicht Sichtbeispiel hätte auch durch folgendes SQL-Konstrukt erstellt werden können:
```sql
CREATE TABLE Sichtbeispiel (
Fach VARCHAR(255),
Durchschnitt DOUBLE
);
INSERT INTO Sichtbeispiel (Fach, Durchschnitt)
SELECT Fach, AVG(Note)
FROM Pruefung
GROUP BY Fach
```
- [x] Mit dieser Sicht wurden individuelle Studenten und Prüfer anonymisiert (Datenschutz).
- [x] Nutzer dieser Sicht würden nicht merken, wenn z.B. das Attribut Pruefer aus der Tabelle Pruefung entfernt würde (logische Datenunabhängigkeit).
- [ ] Die Sicht veraltet und muss aktualisiert werden, wenn in der Tabelle Pruefung ein weiteres Tupel eingefügt wird.
- [x] Diese Sicht erlaubt Nutzern eine kürzere SQL-Anfrage zur Durchschnittsnote eines Fachs zu stellen.
## Änderungen auf Sichten
Änderungen auf Sichten sind ein sehr wichtiges Problemfeld. Welche Kriterien lassen sich an diese Änderungen stellen?
- [x] Der Nutzer einer Sicht sieht die vollzogene Änderung (die auf der darunterliegenden Basisdatenbank ausgeführt wird) direkt in seiner Sicht.
- [ ] Änderungen sollen so schnell wie möglich an der Basisdatenbank unter der Sicht vollzogen werden.
- [x] Änderungen sollen so wenig wie möglich an der Basisdatenbank unter der Sicht verändern.
- [ ] Änderungen durch Sichten dürfen die Basisdatenbank auf keinen Fall verändern (Konsistenzproblem).
- [ ] Änderungen über Sichten führen prinzipiell zu Konsistenzproblemen, die geeignet behandelt werden müssen.
- [x] Änderungen auf einer aus Datenschutzgründen erstellten Sicht dürfen ausgeblendete Teile der Basisdatenbank (z.B. Name-Attribut) nicht betreffen.
- [x] Wird eine Änderung über eine Sicht ausgeführt, darf somit keine Integritätsbedingung (z.B. Attribut NOT NULL) der Basisdatenbank verletzt werden.
Was beschreibt eine Projektionssicht?
- [x] Eine Projektionssicht verwendet nur einen Teil aller Attribute einer Relation.
- [ ] Eine Projektionssicht enthält neue Tupel, welche in der ursprünglichen Relation nicht enthalten sind.
- [ ] Eine Projektionssicht verwendet immer Attribute mehrerer Relationen.
- [ ] Eine Projektionssicht enthält (meist) nur einen Teil der Tupel einer Relation.
- [ ] Eine Projektionssicht enthält alle Tupel der Relation, allerdings werden die Attributbezeichnungen verändert.
Was beschreibt eine Selektionssicht?
- [x] Eine Selektionssicht enthält (meist) nur einen Teil der Tupel einer Relation.
- [ ] Eine Selektionssicht verwendet nur einen Teil aller Attribute einer Relation.
- [ ] Eine Selektionssicht enthält neue Tupel, welche in der ursprünglichen Relation nicht enthalten sind.
- [ ] Eine Selektionssicht verwendet immer Attribute mehrerer Relationen.
- [ ] Eine Selektionssicht enthält alle Tupel der Relation, allerdings werden die Attributbezeichnungen verändert.
Was beschreibt eine Verbundsicht?
- [x] Eine Verbundsicht verwendet immer Attribute mehrerer Relationen.
- [ ] Eine Verbundsicht enthält neue Tupel, welche in der ursprünglichen Relation nicht enthalten sind.
- [ ] Eine Verbundsicht verwendet nur einen Teil aller Attribute einer Relation.
- [ ] Eine Verbundsicht enthält alle Tupel der Relation, allerdings werden die Attributbezeichnungen verändert.
- [ ] Eine Verbundsicht enthält (meist) nur einen Teil der Tupel einer Relation.
Was beschreibt eine Aggregationssicht?
- [ ] Eine Aggregationssicht verwendet immer Attribute mehrerer Relationen.
- [ ] Eine Aggregationssicht enthält (meist) nur einen Teil der Tupel einer Relation.
- [ ] Eine Aggregationssicht enthält alle Tupel der Relation, allerdings werden die Attributbezeichnungen verändert.
- [ ] Eine Aggregationssicht verwendet nur einen Teil aller Attribute einer Relation.
- [x] Eine Aggregationssicht enthält neue Tupel, welche in der ursprünglichen Relation nicht enthalten sind.
Gegeben ist folgendes Relationenschema: `Student ( Matrikelnummer , Name , Adresse , Semester )` mit der Zusatzbedingung, dass der Name des Studenten nicht NULL sein darf. Nun wird eine Sicht darauf erzeugt:
```sql
CREATE VIEW Beispielsicht AS
SELECT Matrikelnummer, Semester, Maximum
FROM Student, (
SELECT MAX(Semester) AS Maximum
FROM Student )
WHERE Matrikelnummer BETWEEN 40000 AND 50000
```
Welche der folgenden Operationen auf dieser Sicht führen prinzipiell zu keinen Problemen?
- [ ]
```sql
UPDATE Beispielsicht
SET Maximum = 5
WHERE Matrikelnummer = 45678
```
- [x] `SELECT DISTINCT Maximum FROM Beispielsicht`
- [ ] `SELECT Name FROM Beispielsicht`
- [x]
```sql
UPDATE Beispielsicht
SET Semester = 4
WHERE Matrikelnummer = 45678
```
- [ ] `INSERT INTO Beispielsicht VALUES (53212, 1, 7)`
- [ ] `INSERT INTO Beispielsicht VALUES (41234, 4, NULL)`
- [ ] `DELETE FROM Beispielsicht WHERE Matrikelnummer < 40000`
- [x] `DELETE FROM Beispielsicht WHERE Semester = 1`
## Rechtevergabe
Welche der folgenden Aussagen im Zusammenhang mit Rechten und Datenbanknutzung sind korrekt?
- [ ] Die Rechte des Datenbankadministrators sind uneingeschränkt.
- [ ] Einmal erworbene Rechte verbleiben für immer beim Nutzer.
- [ ] Für die Vergabe von Rechten an Nutzer ist nur der Datenbankadministrator (DBA) zuständig, d.h. Rechte kann man nur vom DBA erhalten.
- [x] Erworbene Rechte können nur unter besonderen Umständen an andere Nutzer weitergegeben werden.
- [ ] Erworbene Rechte können jederzeit an andere, bedürftige Nutzer weitergegeben werden.
- [x] Rechte können in der Datenbank "wandern", d.h. über unübersichtliche Weitergabe-Optionen bei unberechtigten Nutzern ankommen.
- [ ] Die Vergabe von Rechten ist nur im Zusammenhang mit Sichten ein sinnvolles Konzept, da so der Schutz von sensiblen Daten realisiert werden kann.
## Privacy
Welche der folgenden Aussagen im Zusammenhang mit dem Schutz der Privatsphäre sind korrekt?
’- [ ] Die k-Anonymität ist ein Verfahren zur Anonymisierung von jeweils k Tupeln in Detaildatensammlungen, wobei k möglichst groß zu wählen ist.
- [x] ’Ein Problem bei statistischen Datensammlungen ist das Erspähen von Einzeldaten durch eine Menge geschickt kombinierter Anfragen.
’- [x] Daten zur Privatsphäre dürfen nur in besonders definierten Ausnahmefällen von dafür Befugten eingesehen werden.
- [ ] Probleme mit dem Schutz der Privatsphäre in großen Datensammlungen sind durch eine Vielzahl von Strategien und Verfahren leicht zu beherrschen.
Es existiere eine Relation Professoren mit den Attributen Rang, Gehalt und weiteren.
Nehmen wir an, Sie haben die Erlaubnis, im SELECT-Teil einer Anfrage ausschließlich die Operationen $SUM( )$ und $COUNT( )$ zu verwenden.
Sie möchten nun das Gehalt eines bestimmten Professors herausfinden, von dem Sie wissen, dass sein Rang „W3“ ist und er den höchsten Verdienst aller W3-Professoren hat.
Wird Ihnen das mit den folgenden Anfragen und etwas Ausdauer gelingen?
```sql
SELECT COUNT(*) AS AnzProfW3, SUM(Gehalt) AS SumGehW3 FROM Professoren WHERE Rang = W3
SELECT COUNT(*) AS AnzProf, SUM(Gehalt) AS SumGeh FROM Professoren WHERE Rang = W3
AND Gehalt < Faktor * ( SELECT SUM(Gehalt) / COUNT(*) FROM Professoren WHERE Rang = W3 )
```
Die zweite Anfrage wird wiederholt gestellt und dabei der Wert der „Variablen“ Faktor variiert.
- [ ] Nein, die Rechte sind ausreichend eingeschränkt.
- [x] Ja, man kann es schaffen.
(Um das gesuchte Gehalt zu bestimmen, muss man den Faktor nur schrittweise erhöhen - und zwar so lange, bis AnzProf = AnzProfW3 - 1 ist. Die Differenz von SumGehW3 und SumGeh ist dann der gesuchte Betrag.)
# NoSQL
## Motivation und Datenmodelle
Was sind Gründe für die Verwendung einer NoSQL Datenbank?
- [x] Flexibilität in der Form der Daten, z.B. der genutzten Attribute von Tupeln
- [ ] Konsistenzerhaltung (ACID-Prinzip)
- [ ] Mehr mögliche Integritätsbedingungen (Trigger, Schlüssel,...)
- [x] Reduzierte Komplexität (Integritätsbedingungen, Tabellenformate, ...)
- [x] Bessere Skalierung bei großen Datenmengen
- [x] Wegen spezieller Anwendungen (Graph-Datenbanken, Data Mining, ...)
- [ ] Datenschutz (Sichten können ausgehebelt werden)
- [ ] Geschwindigkeit bei wenig Daten (wenige Tabellen und Nutzer)
## KV-Stores und Wide Column Stores
Welche der folgenden Aussagen über KV-Stores sind richtig?
- [ ] Daten in einem KV-Store lassen sich nur schwer anfragen, da keine Schlüssel wie in relationalen DBS definiert sind.
- [ ] KV-Stores sind besonders gut für Tripel geeignet, d.h. dreiwertigen Daten.
- [x] In einem KV-Store gespeicherte Tupel sind deutlich flexibler hinsichtlich ihrer genutzten Attribute, verglichen mit einer relationalen DB.
- [x] "KV"-Store steht für eine "Key, Value" Datenbank und erlaubt das Speichern von Daten unter einem zugehörigen Schlüssel.
- [ ] Anfragen an KV-Stores sind grundsätzlich komplexer verglichen mit SQL-Anfragen.
Welche der folgenden Aussagen über Wide Column Stores sind korrekt?
- [x] In Wide Column Stores werden Daten durch Listen verwaltet.
- [x] Wide Column Stores können problemlos Tupel mit neuen Attributen hinzufügen.
- [ ] Tupel in Wide Column Stores ersetzen (wie in relationalen DBS auch) fehlende Attributwerte durch NULL-Werte.
- [x] Wide Column Stores gehören zu den KV-Stores.
- [ ] Wide Column Stores sind besonders gut für strukturierte Tupel geeignet, die alle hinsichtlich ihrer Attribute gleich sind.
- [ ] Wide Column Stores können effizient eingesetzt werden, wenn Tupel viele Attribute besitzen die nicht NULL sind.
## Document Stores
Welche der folgenden Aussagen trifft auf Document Stores zu?
- [ ] Document Stores enthalten unstrukturierte Dokumente, z.B. ausgefüllte Formulare.
- [x] Document Stores sind besonders gut für die Speicherung von schemafreien Daten geeignet, d.h. Daten mit unterschiedlichen Spalten-Attributen.
- [x] Document Stores können verschachtelte Daten (Hierarchien) verwalten.
- [x] Document Stores sind eine Form von KV-Stores.
- [ ] Anfragen an Document Stores sind durch die Form der Dokumente komplexer als reguläre SQL Anfragen.
## Graph Stores
Welche der nachfolgenden Aussagen über Graph Stores sind richtig?
- [x] Graph Stores erlauben die effiziente Ausführung graphbasierter Algorithmen wie z.B. der Breitensuche oder der Ermittlung des kürzesten Pfades.
- [x] Graph Stores sind besonders gut geeignet, um Beziehungen zwischen Objekten darzustellen.
- [ ] Anfragen an Graph Stores können SQL benutzen.
- [ ] Daten in Graph Stores lassen sich nicht in relationalen DBS speichern.
# Anwendungsprogrammierung mit Datenbanken
## Programmiersprachenanbindung
Welche der folgenden Aussagen sind richtig?
- [x] Ein Cursor-Konzept erlaubt die Verwendung eines Iterators innerhalb eines Anwendungsprogrammes, um über das Anfrageergebnis der Datenbank zu "laufen".
- [x] In der Programmiersprachenanbindung geht es um die Verknüpfung von Programmiersprachen (Anwendungen) mit Datenbanken.
- [ ] Durch das Cursor-Konzept kann die Datenbank direkt auf das Anwendungsprogramm zugreifen.
- [ ] Drei Varianten zur Kopplung zwischen Anwendung und Datenbank existieren: (1) Enge Kopplung (Anwendung ist Datenbank), (2) nahe Kopplung (Anwendung greift auf Datenbank zu) und (3) lose Kopplung (Anwendung benötigt keine Datenbank).
- [ ] Unter Programmiersprachenanbindung versteht man in diesem Kontext die Kombination von Umgangssprache und SQL.
- [x] Es gibt drei Varianten der Kopplung zwischen Anwendung und Datenbank: (1) Die Einbettung der Datenbank in die Anwendung, (2) eine Schnittstelle zwischen beiden, und (3) eine Weiterentwicklung der Sprache der Datenbank.
## JDBC
Welche der folgenden Antworten sind richtig?
- [ ] JDBC unterstützt Anfragen, allerdings keine Transaktionssemantik (BEGIN, COMMIT, ABORT,...).
- [ ] JDBC ist eine Java-Datenbank.
- [ ] Fehler in JDBC lassen sich nicht abfangen, die Datenbank kann durch JDBC Befehle jedoch keinen inkonsistenten Zustand erreichen.
- [x] JDBC ist eine Java-Schnittstelle zu einer Datenbank.
- [ ] In JDBC werden drei Phasen durchlaufen: (1) Funktionen der Datenbank übermitteln, (2) Ergebnisse zusammenfassen und (3) Resultat der Anwendung zurückgeben.
- [ ] JDBC erlaubt ausschließlich lesenden Zugriff auf die Datenbank (SELECT).
- [x] Ein typischer Ablauf in JDBC besteht darin, (1) sich mit der Datenbank zu verbinden, (2) eine SQL-Anfrage zu senden und (3) Anfrageergebnisse zu verarbeiten.
## SQLJ
Welche der folgenden Antworten sind korrekt?
- [x] Im Gegensatz zu JDBC erlaubt SQLJ direkt bei der Eingabe die Überprüfung der SQL-Anfrage auf Tippfehler.
- [x] SQLJ ermöglicht SQL-Anfragen direkt in Java zu schreiben.
- [ ] Anfragen in SQLJ können keine Nullwerte erfassen.
- [ ] JDBC nutzt SQLJ um Anfragen an die Datenbank zu übermitteln.
- [ ] Der SQL-Teil von SQLJ ist strikt von Java (z.B. Datentypen wie Strings, Integer,...) getrennt.
## LINQ
Welche der folgenden Aussagen ist richtig?
- [x] In LINQ wird eine Datenbanksprache wie z.B. SQL in eine Programmiersprache (z.B. C#) eingebettet.
- [ ] LINQ ist eine Schnittstelle zwischen der Datenbank und einer Programmiersprache, wie JDBC.
- [ ] LINQ stellt eine Spracherweiterung einer Datenbanksprache dar.
## Objekt-relationalem Mapping
Welche der folgenden Aussagen sind richtig?
- [x] Im Objekt-relationalen Mapping werden Relationen (Tabellen) in Klassen umgewandelt.
- [x] Hibernate: Werte von Attributen eines Tupels können mittels "set" und "get" Methoden manipuliert werden.
- [x] Hibernate: Anfragen benötigen keine SELECT Klausel, da die Ergebnisse Objekte darstellen.
- [ ] Hibernate: Anfragen benötigen keine FROM Klausel, da nur auf Objekten gearbeitet wird.
- [x] Hibernate: Basiert auf Java und stellt eine Verbindung zwischen Java-Objekten und Tupeln einer Datenbank her.
- [ ] Unter Objekt-relationalem Mapping versteht man die logische Überführung von Datenbankobjekten in Datenformate (Integer, Strings,...) der Programmiersprache.
## prozeduralen SQL-Erweiterungen
Welche der folgenden Aussagen sind korrekt?
- [x] SQL/PSM ist eine Sprachenerweiterung der Datenbank.
- [x] PSM speichert Prozeduren und Funktionen.
- [ ] SQL/PSM kann als eine Einbettung der Datenbank in eine Programmiersprache verstanden werden.
- [x] SQL/PSM unterstützt Schleifen, bedingte Verzweigungen (if) und Exception-Handling.
- [ ] SQL/PSM stellt eine Schnittstelle zwischen der Programmsprache und der Datenbank dar.
- [ ] SQL/PSM unterstützt kein Cursor-Konzept.