Übung Datenbanksysteme Kalküle und Datentypen 24.11.2003 Übung Datenbanksysteme WS 2003/2004 14.02.2017 Relationenkalküle „Abfragesprachen“ für das relationale Modell Unterschied zu relationaler Algebra ? Deklarativer Ansatz vs Operationeller Ansatz Anders formuliert: Beschreibung des Ergebnisses vs Beschreibung des Lösungsweges Übung Datenbanksysteme WS 2003/2004 14.02.2017 Tupelkalkül vs. Domänenkalkül Gemeinsam: Prädikate über Relationen {t|P(t)} Stark vereinfachte Vorstellung: P(ti) = true => ti ist im Ergebnis Tupelkalkül: – Verwendet (ganze) Tupel als Basis Domänenkalkül: – Verwendet Domänen für einzelnen Spalten Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 1:Tupelkalkül Aufgabe 1: Finden Sie alle Kunden {k | k Kunde } Ergebnisvariable Wird bestimmt durch K kommt aus Relation Kunde Bei der (naiven) Auswertung (einfach Relation durchlaufen): Alle Tupel sind true, Alle Tupel sind im Ergebnis Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 1b) Finden sie alle Kategoriebezeichnungen { [kat.Bezeichnung] | kat Kategorie } Übung Datenbanksysteme WS 2003/2004 [] erstellen neues Tupel k.Bezeichnung projiziert auf einzelne Spalte eines Tupel Auswahl wie bei a) 14.02.2017 Aufgabe1c Finden Sie alle Kontobewegungen des Kunden Heinz Schiller (geb. 3.5.1942), bei denen mehr als 500 € bewegt wurden. {kb | kb Kontobewegung kb.VN = „Heinz“ kb.NN = „Schiller“ kb.Gebdat = 19420503 kb.Betrag > 500} Übung Datenbanksysteme WS 2003/2004 Auswahl von Basisrelation (wie üblich) Festlegung einzelner Einschränkungen Mit logischen und verknüpft 14.02.2017 Aufgabe 1d Alle Kunden des Kontos 174266 {k | k Kunde b besitzt ( k.Vorname = b.Vorname k.Nachname =b.Nachname k.Gebdat = b.Gebdat b.Kontonummer = 174266 )} Übung Datenbanksysteme WS 2003/2004 Basisrelation Es gibt mindestens ein Element bei besitzt Beziehung zwischen Kunde und besitzt Join Einschränkungen in Kontonummer 14.02.2017 Aufgabe 1e Alle Kunden mit mehr als 5000 Euro Guthaben {k | k Kunde b besitzt( k.Vorname = b.Vorname k.Nachname = b.Nachname k.Gebdat = b.Gebdat kn Konto( kn.Kontonummer = b.Kontonummer kn.Betrag >5000 ))} Übung Datenbanksysteme WS 2003/2004 Basisrelation, Verknüpfung mit besitzt Und Konto Selektion bei Betrag 14.02.2017 Aufgabe 1f Alle Kunden, die kein Festgeldkonto haben oder überhaupt kein Konto haben {k | kKunde b besitzt( k.Vorname = b.Vorname k.Nachname = b.Nachname k.Gebdat = b.Gebdat f Festgeldkonto( f.Kontonr =b.Kontonr))} Übung Datenbanksysteme WS 2003/2004 Verknüpfung Verknüpfung 14.02.2017 Aufgabe 1f (2.Versuch) Alle Kunden, die kein Festgeldkonto haben, aber ein Girokonto {k | kKunde b besitzt( k.Vorname = b.Vorname k.Nachname = b.Nachname k.Gebdat = b.Gebdat f Festgeldkonto( f.Kontonr =b.Kontonr))} Übung Datenbanksysteme WS 2003/2004 Verknüpfung Verknüpfung 14.02.2017 Aufgabe 2:Domänenkalkül Aufgabe 1: Finden Sie alle Kunden {[v,n,g,b] | [v,n,g,b] Kunde } Übung Datenbanksysteme WS 2003/2004 Ergebnis muss aus Spaltenvariable aufgebaut werden Die Tupel sind Elemente von Kunde 14.02.2017 Aufgabe 2b) Alle Kategoriebezeichnungen {[b]| x( [b,x] Kategorie } Übung Datenbanksysteme WS 2003/2004 Ergebnis wie bisher Wir brauchen komplettes Tupel Gebundene Variablen Tupel konstruieren Reihenfolge erhalten 14.02.2017 Aufgabe 2c Alle Kontobewegungen von Heinz Schiller (geb. 3.5.1942), bei denen mehr als 500€ bewegt wurden. {[d,v,n,g,k,b,a] | [d,v,n,g,k,b,a] Kontobewegung v = Heinzn =Schiller Gebdat =19420503 b > 500 )} Übung Datenbanksysteme WS 2003/2004 Projektion Gebundene Variablen für komplettes Tupel aus Basisrelation Selektionen 14.02.2017 Aufgabe 2d Alle Kunden des Kontos 174266 {[v,n,g,b]| [v,n,g,b] Kunde k ([v,n,g,k] besitzt k=174266) } Übung Datenbanksysteme WS 2003/2004 Verknüpfung implizit durch Benutzung der selben Variable 14.02.2017 Aufgabe 2e Alle Kunden mit mehr als 5000 Euro Guthaben {[v,n,g,b]| [v,n,g,b] Kunde k ([v,n,g,k] besitzt x, y ([k,x,y] Konto x > 5000))} Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 2f Alle Kunden, die nur Girokonten haben und kein Festgeldkonto {[v,n,g,b] | [v,n,g,b] Kunde k( [v,n,g,k ] besitzt x,y ( [k,x,y] Festgeldkonto))} Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3: Überlegung zu Datentypen Ein Tuningparameter bei der Umsetzung von relationalen Schemata in SQL sind ähnliche, aber nicht identische Datentypen Ziel: Bestmögliches Verhältnis von Speicherplatz, Flexibilität und Genauigkeit Beispiel: Real, Numeric(n,m), Integer – Gleicher Platzbedarf – Unterscheidliche Darstellungsqualität Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3a) Ergebnisse von wissenschaftlichen Berechnungen ? • Float • Real • Double Ergebnistyp von numerischen Programmen Hintergrund: Wissenschaftliche Berechnungen arbeiten mit – – bester verfügbarer Genauigkeit Möglichst hoher Geschwindigkeit Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3b Kontostände, Umsätze und Bilanzen bei einer großen Bank ? Numeric Geldbeträge haben Nachkommastellen, große Werte: kein Integer Banken benötigen exakte Rechnung innerhalb des Zahlenraums: kein Float, Double etc. Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3c Studentenzahlen an den deutschen Universitäten? • Aufzählbar • Genau • Relativ kleiner Zahlenbereich Integer (32 bit) Wahrscheinlich sogar Smallint (16 bit) (keine deutsche Uni hat mehr als 65000 Studenten) Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3d Ortsnamen in Deutschland? Zeichenkette Char(n) oder Varchar(n) ? Char: immer n Bytes Varchar strlen+c Bytes Varchar besser, da große Längenunterschiede Was ist N ? Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch Nicht aus Deutschland, aber echter Ortsname => N > 60 ? Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3e Raumbezeichnungen an der TU (MI 00.00.001)? Ziffern reichen nicht: kein Integer Zeichenkette Char(n) oder Varchar(n) ? Hier besser char(n): • • • Länge ist relativ konstant, Keine Ausreisser Overhead von varchar unnötig Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3f Satellitenbilder? – – – – Groß (bis zu mehreren GB) Binär Keine Struktur für relationales System Auswertung erfolgt im Client BLOB Binary Large Object Warum nicht Pointer/URL auf File ? => Konsistenz, Transaktionskonzept, … Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3g Sehr lange Texte (50MB) bestehend aus vielen einzelnen Wörtern und Sätzen? Ideen: • Varchar für den ganzen Text Problem: Varchar hat Limit bei 32000 Zeichen • CLOB (Character BLOB) Funktioniert, aber Keine Ausnutzung von DB-Features (Index) Wie können wir es eventuell besser machen ? Wir zerlegen den Text entlang bestimmter Kriterien - Sätze - Wörter Übung Datenbanksysteme WS 2003/2004 14.02.2017 Aufgabe 3g (2) Zerlegungen: • Varchar pro Satz (Satznr: integer, Text: varchar(n)) Text kann indiziert werden • Varchar pro Wort (Satznr: integer, Wortnummer: integer, Text: varchar(n)) =>Index auf einzelnen Wörtern möglich Anwendung ? Fazit: Zerlegung hängt von Anwendungszweck an, keine ist immer gut Übung Datenbanksysteme WS 2003/2004 14.02.2017