2021-02-17 11:17:57 +00:00
\documentclass [a4paper] { article}
\usepackage [ngerman] { babel}
\usepackage { multicol}
\usepackage { calc}
\usepackage { ifthen}
\usepackage [landscape,left=1cm,top=1cm,right=1cm,nohead,nofoot] { geometry}
\usepackage { amsmath,amsthm,amsfonts,amssymb}
\usepackage { color,graphicx,overpic}
2021-02-18 19:20:56 +00:00
\usepackage { xcolor, listings}
\usepackage { textcomp}
2021-02-17 11:17:57 +00:00
\usepackage [compact] { titlesec} %less space for headers
\usepackage { mdwlist} %less space for lists
\usepackage [utf8] { inputenc}
\usepackage { tikz}
\usepackage { pdflscape}
\usepackage { verbatim}
2021-02-25 14:54:38 +00:00
\usetikzlibrary { mindmap, arrows,shapes,positioning,shadows,trees, er}
2021-02-17 11:17:57 +00:00
\tikzstyle { every node} =[draw=black,thin,anchor=west, minimum height=2em]
\usepackage [hidelinks,pdfencoding=auto] { hyperref}
\pdfinfo {
/Title (Datenbanksysteme - Cheatsheet)
/Creator (TeX)
/Producer (pdfTeX 1.40.0)
/Author (Robert Jeutter)
/Subject ()
}
% Information boxes
\newcommand * { \info } [4][16.3]{
\node [ annotation, #3, scale=0.65, text width = #1em, inner sep = 2mm ] at (#2) {
\list { $ \bullet $ } { \topsep =0pt\itemsep =0pt\parsep =0pt
\parskip =0pt\labelwidth =8pt\leftmargin =8pt
\itemindent =0pt\labelsep =2pt}
#4
\endlist
} ;
}
2021-02-18 19:20:56 +00:00
%%% Code Listings
\definecolor { codegreen} { rgb} { 0,0.6,0}
\definecolor { codegray} { rgb} { 0.5,0.5,0.5}
\definecolor { codepurple} { rgb} { 0.58,0,0.82}
\definecolor { backcolour} { rgb} { 0.95,0.95,0.92}
\lstdefinestyle { mystyle} {
backgroundcolor=\color { backcolour} ,
commentstyle=\color { codegreen} ,
keywordstyle=\color { magenta} ,
numberstyle=\tiny \color { codegray} ,
stringstyle=\color { codepurple} ,
basicstyle=\ttfamily ,
breakatwhitespace=false,
}
\lstset { style=mystyle, upquote=true}
2021-02-17 11:17:57 +00:00
% This sets page margins to .5 inch if using letter paper, and to 1cm
% if using A4 paper. (This probably isn"t strictly necessary.)
% If using another size paper, use default 1cm margins.
\ifthenelse { \lengthtest { \paperwidth = 11in} }
{ \geometry { top=.5in,left=.5in,right=.5in,bottom=.5in} }
{ \ifthenelse { \lengthtest { \paperwidth = 297mm} }
{ \geometry { top=1cm,left=1cm,right=1cm,bottom=1cm} }
{ \geometry { top=1cm,left=1cm,right=1cm,bottom=1cm} }
}
% Redefine section commands to use less space
\makeatletter
\renewcommand { \section } { \@ startsection{ section} { 1} { 0mm} %
{ -1ex plus -.5ex minus -.2ex} %
{ 0.5ex plus .2ex} %x
{ \normalfont \large \bfseries } }
\renewcommand { \subsection } { \@ startsection{ subsection} { 2} { 0mm} %
{ -1explus -.5ex minus -.2ex} %
{ 0.5ex plus .2ex} %
{ \normalfont \normalsize \bfseries } }
\renewcommand { \subsubsection } { \@ startsection{ subsubsection} { 3} { 0mm} %
{ -1ex plus -.5ex minus -.2ex} %
{ 1ex plus .2ex} %
{ \normalfont \small \bfseries } }
\makeatother
% Define BibTeX command
\def \BibTeX { { \rm B\kern -.05em{ \sc i\kern -.025em b} \kern -.08em
T\kern -.1667em\lower .7ex\hbox { E} \kern -.125emX} }
% Don"t print section numbers
\setcounter { secnumdepth} { 0}
\setlength { \parindent } { 0pt}
\setlength { \parskip } { 0pt plus 0.5ex}
% compress space
\setlength \abovedisplayskip { 0pt}
\setlength { \parskip } { 0pt}
\setlength { \parsep } { 0pt}
\setlength { \topskip } { 0pt}
\setlength { \topsep } { 0pt}
\setlength { \partopsep } { 0pt}
\linespread { 0.5}
\titlespacing { \section } { 0pt} { *0} { *0}
\titlespacing { \subsection } { 0pt} { *0} { *0}
\titlespacing { \subsubsection } { 0pt} { *0} { *0}
%My Environments
\newtheorem { example} [section]{ Example}
% Turn off header and footer
\pagestyle { empty}
\begin { document}
\raggedright
\begin { multicols} { 3}
2021-02-18 19:20:56 +00:00
\scriptsize
% multicol parameters
% These lengths are set only within the two main columns
%\setlength{\columnseprule}{0.25pt}
\setlength { \premulticols } { 1pt}
\setlength { \postmulticols } { 1pt}
\setlength { \multicolsep } { 1pt}
\setlength { \columnsep } { 2pt}
\section { SQL}
2021-02-19 16:25:56 +00:00
\begin { lstlisting} [
2021-02-18 19:20:56 +00:00
language=SQL,
showspaces=false,
basicstyle=\ttfamily ,
commentstyle=\color { gray}
]
CREATE TABLE t (
id INT PRIMARY KEY,
c1 TEXT,
name VARCHAR NOT NULL,
price INT DEFAULT 0,
2021-02-19 16:25:56 +00:00
PRIMARY KEY (id),
2021-02-18 19:20:56 +00:00
FOREIGN KEY (c1) REFERENCES t2(c2),
2021-02-19 16:25:56 +00:00
UNIQUE(id,name),
2021-02-18 19:20:56 +00:00
CHECK(id> 0 AND price >= id)
);
DROP TABLE t; //Delete table
ALTER TABLE t ADD column; //Add new column
ALTER TABLE t DROP COLUMN c; //Drop column
ALTER TABLE t ADD constraint; //Add constraint
ALTER TABLE t1 RENAME TO t2; //Rename table
ALTER TABLE t DROP constraint; //Drop constraint
2021-02-19 16:25:56 +00:00
ALTER TABLE t1 RENAME c1 TO c2; //Rename column
2021-02-18 19:20:56 +00:00
INSERT INTO t(column_ list) VALUES(value_ list);
...SELECT column_ list FROM t2;
UPDATE t SET c1= new_ value;
UPDATE t SET c1 = new_ value WHERE condition;
DELETE FROM t; //Delete all data
2021-02-19 16:25:56 +00:00
DELETE FROM t WHERE condition; //Delete subset
2021-02-18 19:20:56 +00:00
SELECT c1, c2 FROM t //Query data
SELECT c1, c2 FROM t1, t2 //cross join
SELECT * FROM t //Query all rows
SELECT DISTINCT... //Query distinct rows
...UNION [ALL] //Combine rows from queries
...INTERSECT //Return intersection
...MINUS //Subtract result
...WHERE condition //with condition
...IS [NOT] NULL
2021-02-19 16:25:56 +00:00
...[NOT] LIKE %xy_ //%=beliebig viele; $=ein Zeichen
2021-02-18 19:20:56 +00:00
...[NOT] IN value_ list
...BETWEEN low AND high
...GROUP BY c1 //Group rows
...GROUP BY c1 HAVING condition; //Filter
...ORDER BY c1 ASC [DESC] //Sort result
...HAVING bedingung // !TODO
...LIMIT n OFFSET offset //return n rows
...INNER JOIN t2 ON condition
...LEFT JOIN t2 ON condition
...RIGHT JOIN t2 ON condition
...FULL OUTER JOIN t2 ON condition
...CROSS JOIN t2 //Cartesian product
CREATE VIEW v(c1,c2) AS SELECT c1, c2 FROM t;
CREATE RECURSIVE VIEW...
CREATE TEMPORARY VIEW...
...UNION [ALL]
...WITH [CASCADED | LOCAL] CHECK OPTION;
DROP VIEW view_ name;
CREATE INDEX idx_ name ON t(c1,c2);
CREATE UNIQUE INDEX idx_ name ON t(c3,c4);
DROP INDEX idx_ name;
CREATE OR MODIFY TRIGGER trigger_ name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_ name FOR EACH [ROW | STATEMENT]
EXECUTE stored_ procedure;
DROP TRIGGER trigger_ name;
2021-02-19 16:25:56 +00:00
CREATE ASSERTION name CHECK (praedikat)
GRANT rechte ON tabelle TO nutzer [with grant option]
REVOKE rechte ON tabelle TO nutzer [restrict | cascade ]
2021-02-18 19:20:56 +00:00
//AGGREGATE FUNCTIONS
AVG //returns the average of a list
COUNT //returns the number of elements of a list
SUM //returns the total of a list
MAX //returns the maximum value in a list
MIN //returns the minimum value in a list
\end { lstlisting}
\section { NoSQL (MongoDB)}
\begin { lstlisting} [
language=SQL,
showspaces=false,
basicstyle=\ttfamily ,
commentstyle=\color { gray}
]
db.createUser({
user: "dbadmin",
pwd: "12345678",
roles: [{ role: "dbOwner", db: "admin" } ],
} )
db.users.insert({
userid: "123",
age: 18,
name: "vikash",
} )
db.users
.distinct("name") //show distinct value for
.find(
{ //where clauses
name: "vikash",
} ,
{ //select fields
name: 1,
age: 1,
}
)
.limit(2)
.skip(5)
.sort({
age: 1,
} )
.count() // number of documents in collection
db.users.update({
name: "vikash",
} ,{
$ set: { age: 19 } , / / update field
$ inc: { age: 5 } , / / increase field
} ,{
multi: true,
} )
db.users.remove({ } )
db.users.remove({
name: "vikash",
} )
db.users.aggregate([
{ $ match: { name: "vikash" } } ,
{ $ group: { _ id: " $ age", num_ usr: { $ sum: 1 } } }
{ $ sort: { age: 1 } }
])
db.users.ensureIndex() //Create an index on field
db.users.dropIndex() //Drop an index from field
show dbs //show all database
db.getName() //show current database
use usersdb //switch or create to database 'userdb'
db.dropDatabase() //drop current database
db.getCollectionNames() //show all collections
db.createCollection("users") //create collection 'users'
db.users.drop() //drop collection 'users'
//Aggregate Functions
$ ne: "contr" / / negate clause
$ or: [ { a } , { b } ] / / a or b
$ gt: x / / greater than x
$ lt: x / / less than
$ gte: x / / greater than even
name: /ind/, // name is like %ind%
\end { lstlisting}
2021-02-19 16:25:56 +00:00
Datenunabhängigkeit:
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Stabilität der Benutzerschnittstelle gegen Änderungen
\item physisch: Änderung der Dateiorganisation und Zugriffspfade haben keinen Einfluss auf das konzeptuelle Schema
\item logisch: Änderung am konzeptuellen und gewissen externen Schemata haben keine Auswirkungen auf andere externe Schemata und Anwendungsprogramme
2021-02-18 19:20:56 +00:00
\end { itemize*}
\subsection { Codd"sche Regeln}
2021-02-19 16:25:56 +00:00
\begin { description*}
\item [Integration] einheitliche, nichtredundante Datenverwaltung
\item [Operationen] Speichern, Suchen, Ändern
\item [Katalog] Zugriffe auf DBbeschreibungen im Data Dictionary
\item [Benutzersichten]
\item [Integritätssicherung] Korrektheit des Datenbankinhalts
\item [Datenschutz] Ausschluss unauthorisierter Zugriffe
\item [Transaktionen] mehrere DB-Operationen als Funktionseinheit
\item [Synchronisation] parallele Transaktionen koordinieren
\item [Datensicherung] Wiederherstellung von Daten nach Systemfehlern
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
Schemata:
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Konzeptuelles Schema (Ergebnis der Dateidefinition)
2021-02-19 16:25:56 +00:00
\item Internes Schema (Festlegung Dateiorganisation/pfade = Index)
2021-02-18 19:20:56 +00:00
\item Externes Schema (Ergebnis der Sichtdefinition)
2021-02-19 16:25:56 +00:00
\item Anwendungsprogramm (Ergebnis der Programmierung)
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Schema: Metadaten, Datenbeschreibung
\item Instanz: Anwenderdaten, Datenbankzustand
2021-02-17 11:17:57 +00:00
\end { itemize*}
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { 3 Schichten Architektur}
Klassifizierung
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Definitionskomponenten: Datendefinition, Dateiorganisation, Sichtdefinition
\item Programmierkomponenten: DB-Programmierung mit eingebetteten DB-Operationen
\item Benutzerkomponenten: Anwendungsprogramme, Anfrage und Update interaktiv
\item Transformationskomponenten: Optimierer, Auswertung, Plattenzugriffssteuerung
\item Data Dictionary (Datenwörterbuch): Aufnahme der Daten aus Definitionskomponenten, Versorgung der anderen Komponenten
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { 5 Schichten Architektur}
Verfeinerung
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Datensystem: Übersetzung, Zugriffspfadwahl
\item Zugriffssystem: Logische Zugriffspfade, Schemakatalog, Sortierung, Transaktionsverwaltung
\item Speichersystem Speicherungsstrukturen, Zugriffspfadverwaltung, Sperrverwaltung, Logging, Recovery
\item Pufferverwaltung: Systempufferverwaltung, Seitenersetzung, Seitenzuordnung
\item Betriebssystem: Externspeicherverwaltung, Speicherzuordnung
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\subsection { Relationenalgebra}
2021-02-19 16:25:56 +00:00
\begin { description*}
\item [Selektion] $ \sigma _ { Bedingung } ( Relation ) $ : Auswahl von Zeilen (WHERE)
\item [Projektion] $ \pi _ { Attributmenge } ( Relation ) $ : Auswahl von Spalten; entfernt doppelte Tupel; (SELECT DISTINCT)
\item [Verbund] $ R _ 1 \bowtie R _ 2 $ : verknüpft Tabellen über gleichbenannte Spalten, verschmilzt jew Tupel gleicher Werte; Tupel ohne Partner eliminiert (JOIN/ NATURAL JOIN)
\item [Umbenennung] $ \beta _ { neu \leftarrow alt } ( R ) $ : Ändern von Attributnamen (AS)
\item [Vereinigung] $ r _ 1 \cup r _ 2 $ von zwei Relationen $ r _ 1 $ und $ r _ 2 $ (UNION)
2021-02-18 19:20:56 +00:00
\begin { itemize*}
\item Gesamtheit der beiden Tupelmengen
\item Attributmengen beider Relationen müssen identisch sein
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Differenz] $ r _ 1 - r _ 2 $ eliminiert die Tupel aus der ersten Relation, die auch in der zweiten Relation vorkommen (EXCEPT)
\item [Durchschnitt] $ r _ 1 \cap r _ 2 $ : ergibt die Tupel, die in beiden Relationen gemeinsam vorkommen (INTERSECT)
\item [Quantoren/Mengenvergleiche] $ \Theta = \{ all \| any \| some \} $
\item [Assertion] Prädikat, das eine Bedingung ausdrückt, die von der Datenbank immer erfüllt sein muss
\item [Trigger] Anweisung/Prozedur, die bei Eintreten eines bestimmten Ereignisses automatisch vom DBMS ausgeführt wird
\item [Sicht] virtuelle Relationen (bzw virtuelle Datenbankobjekte in anderen Datenmodellen)
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
\paragraph { Datenbankmodelle im Überblick}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item HM: hierarchisches Modell,
\item NWM: Netzwerkmodell,
2021-02-18 19:20:56 +00:00
\item RM: Relationenmodell
2021-02-19 16:25:56 +00:00
\item NF 2: Geschachtelte (Non-First-Normal-Form) Relationen
2021-02-18 19:20:56 +00:00
\item eNF 2: erweitertes NF 2 -Modell
\item ER: Entity-Relationship-Modell, SDM: semantische Datenmodelle
\item OODM/C++: objektorientierte Datenmodelle
\begin { itemize*}
\item OEM: objektorientierte Entwurfsmodelle (etwa UML),
\item ORDM: objektrelationale Datenmodelle
\end { itemize*}
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\subsection { ER Modell}
\begin { description*}
\item [Entity] Objekt/Informationen
\item [Entity Typ] Gruppierung von Entitys mit gleichen Eigenschaften
2021-02-19 16:25:56 +00:00
\item [Relation/Relationship] Menge aller Einträge
2021-02-18 19:20:56 +00:00
\begin { itemize*}
\item beschreibt eine Beziehung zwischen Entities
\item Menge von Zeilen einer Tabelle
\end { itemize*}
\item [Attribut]
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item repräsentiert eine Eigenschaft von Entities/Beziehungen
\item Spalte/Spaltenüberschrift einer Tabelle
2021-02-18 19:20:56 +00:00
\end { itemize*}
\item [Tupel] Zeile einer Tabelle
2021-02-19 16:25:56 +00:00
\item [Werte] primitive Datenelemente; Attributwert
\item [Schlüssel]
2021-02-18 19:20:56 +00:00
\begin { itemize*}
\item identifizierende Eigenschaft von Entitys
2021-02-19 16:25:56 +00:00
\item minimale Menge von Attributen, die Tupel eindeutig identifizieren
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Schlüsselattribute] Teilmenge gesamter Attribute von Entity-Typs
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Auswahl des Primärschlüssels bei mehreren Schlüsselkandidaten
\item Schlüssel durch Unterstreichen gekennzeichnet
2021-02-18 19:20:56 +00:00
\end { itemize*}
\item [Primärschlüssel] ein beim Datenbankentwurf ausgezeichneter Schlüssel
2021-02-19 16:25:56 +00:00
\item [Fremdschlüssel] Attributmenge, die Schlüssel einer anderen Relation ist
\item [Beziehungstypen] Beziehungen zwischen Entities zu Beziehungstypen
\item [Kardinalitäten/Funktionalität] Einschränkung von Beziehungstypen bezüglich mehrfachen Teilnahme von Entitys an Beziehung
2021-02-18 19:20:56 +00:00
\item [Stelligkeit/Grad] Anzahl der an einem Beziehungstyp beteiligten Entity Typen
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
Stelligkeit
2021-02-18 19:20:56 +00:00
\begin { description*}
\item [0,*] legt keine Einschränkung fest (default)
2021-02-19 16:25:56 +00:00
\item [1:1] jedem Entity $ e _ 1 $ ist maximal ein Entity $ e _ 2 $ zugeordnet und umgekehrt
\item [1:N] jedem Entity $ e _ 1 $ sind beliebig viele Entities $ E _ 2 $ zugeordnet, aber zu jedem Entity $ e _ 2 $ gibt es maximal ein $ e _ 1 $
2021-02-18 19:20:56 +00:00
\item [N:1] invers zu 1:N, auf funktionale Beziehung
\item [M:N] keine Restriktionen
\item [Kardinalitätsangaben]
2021-02-19 16:25:56 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item partielle funktionale Beziehung: $ lagertIn ( Produkt [ 0 , 1 ] ,Fach [ 0 , 3 ] ) $
\item totale funktionale Beziehung: $ liefert ( Lieferant [ 0 , * ] ,Produkt [ 1 , 1 ] ) $
2021-02-19 16:25:56 +00:00
\end { itemize*}
\end { description*}
\paragraph { Normalformen}
\begin { itemize*}
\item legen Eigenschaften von Relationenschemata fest
\item verbieten bestimmte Kombinationen von funkt. Abhängigkeiten
\item sollen Redundanzen und Anomalien vermeiden
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\begin { description*}
\item [Erste Normalform] nur atomare Attribute in den Relationenschemata, d.h. als Attributwerte sind Elemente von Standard-Datentypen wie integer/string erlaubt, aber keine Konstruktoren [array/set]
\item [Zweite Normalform]
\begin { itemize*}
\item Zweite Normalform eliminiert derartige partielle Abhängigkeiten bei Nichtschlüsselattributen
\item partielle Abhängigkeit liegt vor, wenn ein Attribut funktional schon von einem Teil des Schlüssels abhängt
\end { itemize*}
\item [Dritte Normalform]
\begin { itemize*}
\item eliminiert auch transitive Abhängigkeiten
\item etwa Weingut $ \rightarrow $ Anbaugebiet und Anbaugebiet $ \rightarrow $ Region
\item 3 NF betrachtet nur Nicht-Schlüsselattribute als Endpunkt transitiver Abhängigkeiten
\item $ A \in R $ heißt transitiv abhängig von X bezüglich F genau dann, wenn es ein $ Y \subseteq R $ gibt mit $ X \rightarrow Y, Y \not \rightarrow X, Y \rightarrow A, A \not \in XY $
\end { itemize*}
\item [Boyce-Kodd-Normalform] (Verschärfung der 3NF): Eliminierung transitiver Abhängigkeiten auch zwischen Primattributen $ \not \exists A \in R $ : A transitiv abhängig von einem $ K \in \bf { K } $ bezüglich F
\item [Minimalität]
\begin { itemize*}
\item Global Redundanzen vermeiden
\item andere Kriterien (wie Normalformen) mit möglichst wenig Schemata erreichen
\item Beispiel: Attributmenge ABC, FD-Menge $ { A \rightarrow B, B \rightarrow C } $
\end { itemize*}
\item [Vierte Normalform] erweitertes Relationenschema $ R = ( R, \bf { K } ) $ ist in vierter Normalform (4NF) bezüglich M genau dann, wenn für alle $ X \rightarrow \rightarrow Y \in M ^ + $ gilt: $ X \rightarrow \rightarrow Y $ ist trivial oder $ X \supseteq K $ für ein $ K \in \bf { K } $
2021-02-18 19:20:56 +00:00
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
\section { Datenbankentwurf}
\paragraph { Anforderungsanalyse}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item informale Beschreibung des Fachproblems
\item Trennen der Informationen über Daten (Datenanalyse) von den Informationen über Funktionen (Funktionsanalyse)
\end { itemize*}
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
\paragraph { Konzeptioneller Entwurf}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item formale Beschreibung des Fachproblems
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Sichtentwurf
\item Sichtanalyse
\item Sichtintegration
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\item Ergebnis: konzeptionelles Gesamtschema
\item Integrationskonflikte
\begin { description*}
\item [Namenskonflikte] Homonyme/Synonyme
\item [Typkonflikte] verschiedene Strukturen für das gleiche Element
2021-02-19 16:25:56 +00:00
\item [Wertebereichskonflikte] verschiedene Wertebereiche für Element
2021-02-18 19:20:56 +00:00
\item [Bedingungskonflikte] verschiedene Schlüssel für ein Element
\item [Strukturkonflikte] gleicher Sachverhalt durch unterschiedliche Konstrukte
\end { description*}
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Verteilungsentwurf}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item sollen Daten auf mehreren Rechnern verteilt vorliegen, muss Art und Weise der verteilten Speicherung festgelegt werden
2021-02-19 16:25:56 +00:00
\item horizontale Verteilung z.B. Kunden 1-100 und Kunden 101-200
2021-02-18 19:20:56 +00:00
\item vertikale Verteilung z.B. Adresse in DB1, Konto in DB2
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Logischer Entwurf}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Datenmodell des ausgewählten DBMS
\item Transformation des konzeptionellen Schemas
\item Verbesserung des relationalen Schemas anhand von Gütekriterien
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Datendefinition}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Umsetzung des logischen Schemas in ein konkretes Schema
\begin { itemize*}
\item Datenbankdeklaration in der DDL des DBMS
\item Realisierung der Integritätssicherung
\item Definition der Benutzersichten
\end { itemize*}
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Physischer Entwurf}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Ergänzen des physischen Entwurfs um Zugriffsunterstützung
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Zugriffspfad: Datenstruktur für zusätzlichen schlüsselbasierten Zugriff auf Tupel
2021-02-18 19:20:56 +00:00
\item meist als B*-Baum realisiert
\end { itemize*}
\item Sprachmittel: Speicherstruktursprache SSL
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Implementierung \& Wartung}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Wartung; weitere Optimierung der physischen Ebene
2021-02-18 19:20:56 +00:00
\item Anpassung an neue Anforderungen und Systemplattformen
\item Portierung auf neue Datenbankmanagementsysteme...
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
2021-02-19 16:25:56 +00:00
\subsection { Kapazitätsändernde Abbildungen}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Kap.\textbf { erhöhend} : Abbildung auf R mit genau einem Schlüssel
\item Kap.\textbf { vermindernd} : Relationsschema mit einem Schlüssel
\item Kap.\textbf { erhaltend} : mit Schlüssel beider Entity Typen im Relationsschema als neuer Schlüssel
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\subsection { ER-auf-RM Abbildung}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item neues Relationenschema mit allen Attributen des Beziehungstyps, zusätzlich Übernahme aller Primärschlüssel der Entity-Typen
2021-02-18 19:20:56 +00:00
\item Festlegung der Schlüssel:
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item m:n-Beziehung: beide Primärschlüssel zusammen werden Schlüssel
\item 1:n-Beziehung: Primärschlüssel der n-Seite (Seite ohne Pfeilspitze) wird Schlüssel
\item 1:1-Beziehung: beide Primärschlüssel werden je ein Schlüssel, der Primärschlüssel wird dann aus diesen Schlüsseln gewählt
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item optionale Beziehungen $ [ 0 , 1 ] $ o. $ [ 0 ,n ] $ werden nicht verschmolzen
\item bei Kardinalitäten $ [ 1 , 1 ] $ oder $ [ 1 ,n ] $ Verschmelzung möglich
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item $ 1 :n $ : Entity-Relationenschema der n-Seite integrieren
\item $ 1 : 1 $ : beide Entity-Relationenschemata integrieren
2021-02-17 11:17:57 +00:00
\end { itemize*}
\end { itemize*}
2021-02-18 19:20:56 +00:00
\subsection { Transformationseigenschaften}
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Abhänggikeitstreue (T1)
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Menge der Abhängigkeiten äquivalent zu der Menge der Schlüsselbedingungen im resultierenden Datenbankschema
\item S charakterisiert vollständig F genau dann, wenn $ F \equiv \{ K \rightarrow R | ( R, \bf { K } ) \in S, K \in \bf { K } \} $
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item Verbundtreue (T2)
2021-02-18 19:20:56 +00:00
\begin { itemize*}
\item Originalrelationen können durch den Verbund der Basisrelationen wiedergewonnen werden
2021-02-19 16:25:56 +00:00
\item nicht verbundtreu $ F = \{ A \rightarrow B, C \rightarrow B \} $
\item verbundtreu $ F" = \{ A \rightarrow B, B \rightarrow C \} $
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item Mehrwertige Abhängigkeit (MVD)
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item innerhalb einer Relation r wird einem Attributwert von X eine Menge von Y-Werten zugeordnet, unabhängig von den Werten der restlichen Attribute $ \rightarrow $ Vierte Normalform
2021-02-19 16:25:56 +00:00
\item Beseitigung von Redundanzen: keine zwei MVDs zwischen Attributen
2021-02-18 19:20:56 +00:00
\item Elimination der rechten Seite einer der beiden mehrwertigen Abhängigkeiten,
\item linke Seite mit dieser rechten Seite in neue Relation kopiert
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item Verbundabhängigkeit (JD): R kann ohne Informationsverlust in $ R _ 1 ,..., R _ p $ aufgetrennt werden: $ \bowtie [ R _ 1 ,..., R _ p ] $
\item Inklusionsabhängigkeit (IND): auf der rechten Seite einer Fremdschlüsselabhängigkeit nicht unbedingt der Primärschlüssel
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\paragraph { Ableitungsregel}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item F1: Reflexivität $ X \supseteq Y \Rightarrow X \rightarrow Y $
\item F2: Augumentation $ \{ X \rightarrow Y \} \Rightarrow XZ \rightarrow YZ, \text { sowie } XZ \rightarrow Y $
\item F3: Transitivität $ \{ X \rightarrow Y,Y \rightarrow Z \} \Rightarrow X \rightarrow Y $
\item F4: Dekomposition $ \{ X \rightarrow YZ \} \Rightarrow X \rightarrow Y $
\item F5: Vereinigung $ \{ X \rightarrow Y, X \rightarrow Z \} \Rightarrow X \rightarrow YZ $
\item F6: Pseudotransitivität $ \{ X \rightarrow Y, WY \rightarrow Z \} \Rightarrow WX \rightarrow Z $
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
F1-F3 bekannt als Armstrong-Axiome
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item gültig (sound): Regeln leiten keine FDs ab, die logisch nicht impliziert
\item vollständig (complete): alle implizierten FDs werden abgeleitet
2021-02-19 16:25:56 +00:00
\item unabhängig (independent) oder auch bzgl. $ \subseteq $
2021-02-18 19:20:56 +00:00
\item minimal: keine Regel kann weggelassen werden
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
B-Axiome oder RAP-Regeln
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item R Reflexivität $ \{ \} \Rightarrow X \rightarrow X $
\item A Akkumulation $ \{ X \rightarrow YZ, Z \rightarrow AW \} \Rightarrow X \rightarrow YZA $
\item P Projektivität $ \{ X \rightarrow YZ \} \Rightarrow X \rightarrow Y $
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Membership Problem} Kann eine bestimmte FD $ X \rightarrow Y $ aus der vorgegebenen Menge F abgeleitet werden, d.h. wird sie von F impliziert? $ X \rightarrow Y \in F ^ + $
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
\paragraph { Reduktionsoperationen} Entfernen überflüssiger Attribute auf linker bzw. rechter Seite von FDs.
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
\paragraph { Unwesentliche Attribute} A heißt unwesentlich in $ X \rightarrow Y $ bzgl. F, wenn
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item A kann aus der FD $ X \rightarrow Y $ entfernt werden, ohne dass sich die Hülle von F ändert
2021-02-18 19:20:56 +00:00
\item FD $ X \rightarrow Y $ heißt linksreduziert, wenn kein Attribut in X unwesentlich ist
\item FD $ X \rightarrow Y $ heißt rechtsreduziert, wenn kein Attribut in Y unwesentlich ist
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
\paragraph { Minimale Überdeckung} Eine minimale Überdeckung ist eine Überdeckung, die eine minimale Anzahl von FDs enthält
\paragraph { Äquivalenzklassen} FDs mit äquivalenten linken Seiten werden zu einer Äquivalenzklasse zusammengefasst
\subsection { Entwurfsverfahren}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item T1: S charakterisiert vollständig F
\item S1: S ist in 3NF bezüglich F
\item T2: Dekomosition von $ U $ in $ R _ 1 ,...,R _ p $ ist verbundtreu bezüglich F
\item S2: Minimalität, d.h. $ \not \exists S":S" $ erfüllt T1,S1,T2 und $ |S"|<|S| $
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\section { Algebra \& Kalkül}
\begin { description*}
\item [Anfrage] Folge von Operationen, die aus Basisrelationen eine Ergebnisrelation berechnet
\item [Sicht] Folge von Operationen, die unter Sichtnamen langfristig abgespeichert wird und unter diesem Namen wieder aufgerufen werden kann; ergibt eine Sichtrelation
\item [Snapshot] Ergebnisrelation einer Anfrage, die unter Snapshot-Namen abgelegt wird, aber nie ein zweites Mal berechnet wird
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
\paragraph { Kriterien für Anfragesprachen}
\begin { description*}
\item [Ad-Hoc-Formulierung] Benutzer soll eine Anfrage formulieren können, ohne ein vollständiges Programm schreiben zu müssen
\item [Deskriptivität] Benutzer soll formulieren „Was will ich haben?“
\item [Mengenorientiertheit] jede Operation soll auf Mengen von Daten gleichzeitig arbeiten
\item [Abgeschlossenheit] Ergebnis ist wieder Relation und kann als Eingabe für nächste Anfrage verwendet werden
\item [Adäquatheit] alle Konstrukte des zugrundeliegenden Datenmodells werden unterstützt
\item [Orthogonalität] Sprachkonstrukte sind in ähnlichen Situationen auch ähnlich anwendbar
\item [Optimierbarkeit] Sprache besteht aus wenigen Operationen, für die es Optimierungsregeln gibt
\item [Effizienz] jede Operation ist effizient ausführbar (Komplexität max $ \leq O ( n ^ 2 ) $ )
\item [Sicherheit] keine Anfrage, die syntaktisch korrekt ist, darf in eine Endlosschleife geraten oder ein unendliches Ergebnis liefern
\item [Eingeschränktheit] Anfragesprache darf keine komplette Programmiersprache sein
\item [Vollständigkeit] Sprache muss mindestens die Anfragen einer Standardsprache ausdrücken können
\begin { description*}
\item [Minimale Relationenalgebra] $ \Omega = \pi , \sigma , \bowtie , \beta , \cup , - $
\item [unabhängig] kein Operator kann weggelassen werden
\item [Relationale Vollständigkeit] jede andere Menge von Operationen genauso mächtig wie $ \Omega $
\item [strenge relationale Vollständigkeit] zu jedem Ausdruck mit Operatoren aus $ \Omega $ gibt es einen Ausdruck auch mit der anderen Menge von Operationen
\end { description*}
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
\paragraph { Verbundvarianten}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Gleichverbund: Gleichheitsbedingung über explizit angegebene und evtl. verschiedene Attribute $ r ( R ) \bowtie _ { C = D } r ( S ) $
\item Theta-Verbund ($ \Theta $ -join): beliebige Verbundbedingung $ r ( R ) \bowtie _ { C>D } r ( S ) $
\item Semi-Verbund: nur Attribute eines Operanden erscheinen im Ergebnis $ r ( L ) \bowtie r ( R ) = \pi _ L ( r ( L ) \bowtie r ( R ) ) $
\item äußere Verbunde (engl. outer join)
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item voller ä.V. übernimmt alle Tupel beider Operanden
\item linker ä.V. übernimmt alle Tupel des linken Operanden
\item rechter ä.V. übernimmt alle Tupel des rechten Operanden
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\end { itemize*}
\subsection { Anfragekalküle}
\begin { description*}
\item [Kalkül] eine formale logische Sprache zur Formulierung von Aussagen
\item [Ziel] Kalkül zur Formulierung von Datenbank-Anfragen
\item [allgemeines Kalkül]
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Anfrage hat die Form $ \{ f ( \bar { x } ) | p ( \bar { x } ) \} $
\begin { itemize*}
\item x bezeichnet Menge von freien Variablen
\item Funktion f bezeichnet Ergebnisfunktion über $ \bar { x } $
\item p Selektionsprädikat über freien Variablen $ \bar { x } $
\end { itemize*}
\item Bestimme aller Belegungen der freien Variablen in x, für die das Prädikat p wahr wird.
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Relationale Kalküle]
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Bereichskalkül: Variablen nehmen Werte elementarer Datentypen (Bereiche) an
\item Bereichskalkül ist streng relational vollständig, d.h. zu jedem Term $ \tau $ der Relationenalgebra gibt es einen äquivalenten (sicheren) Ausdruck $ \eta $ des Bereichskalküls.
\item Atomare Formeln: $ \{ x _ 1 ,..., x _ n \| \phi ( x _ 1 ,..., x _ n ) \} $
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Basiskalkül]
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Einschränkung des Bereichskalküls: nur Konstanten, keine Funktionen
\item Tupelkalkül: Variablen variieren über Tupelwerte
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Semantisch sichere Anfragen] Anfragen, die für jeden Datenbankzustand $ \sigma ( R ) $ ein endliches Ergebnis liefern
\item [Syntaktisch sichere Anfragen] Anfragen, die syntaktischen Einschränkungen unterliegen, um die semantische Sicherheit zu erzwingen
\end { description*}
\paragraph { Transaktion, Integrität \& Trigger}
\begin { description*}
\item [Typintegrität] Angabe von Wertebereichen zu Attributen; Erlauben/Verbieten von Nullwerten
\item [Schlüsselintegrität] Angabe eines Schlüssels für eine Relation
\item [Referentielle Integrität] die Angabe von Fremdschlüsseln
\item [Semantische Integrität] Korrekter (konsistenter) DB-Zustand nach Ende der Transaktion
\item [Ablaufintegrität] Fehler durch "gleichzeitigen" Zugriff mehrerer Benutzer auf dieselben Daten vermeiden
\end { description*}
\paragraph { Transaktionen fordern ACID Eigenschaften}
\begin { description*}
\item [Atomicity] Transaktion wird entweder ganz oder gar nicht ausgeführt
\item [Consistency] Datenbank ist vor Beginn und nach Beendigung einer Transaktion jeweils in einem konsistenten Zustand
\item [Isolation] Nutzer, der mit einer Datenbank arbeitet, sollte den Eindruck haben, dass er mit dieser Datenbank alleine arbeitet
\item [Durability] nach erfolgreichem Abschluss einer Transaktion muss das Ergebnis dieser Transaktion „dauerhaft“ in der Datenbank gespeichert werden
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
Kommandos einer Transaktionssprache
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Beginn einer Transaktion: Begin-of-Transaction-Kommando BOT
\item commit: die Transaktion soll erfolgreich beendet werden
\item abort: die Transaktion soll abgebrochen werden
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
Probleme im Mehrbenutzerbetrieb
\begin { description*}
\item [Nonrepeatable Read] gleiche Leseanweisung führt zu nicht wiederholbaren Ergebnissen
\item [Dirty read] rechnen mit Wert einer anderen Transaktion die abgebrochen wird
\item [Phantom-Problem] liest Wert anderer Transaktion ohne zu erkennen, dass andere Transaktion noch nicht abgeschlossen
\item [Lost Update] updates gehen verloren, wenn gleiche Variablen gleicheitig beschrieben werden (oder kurz nacheinander)
\item [Deadlock] ein oder mehrere Transaktionen warten, einen LOCK auf Datenbankobjekte abzusetzen und behindern sich gegenseitig
\item [Startvation] Warteschlange für gesperrte Objekte unfair abgearbeitet. Transaktion wartet endlos
\end { description*}
Isolationsebenen
\begin { description*}
\item [read uncommitted]
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item schwächste Stufe: Zugriff auf nicht geschriebene Daten, nur für read only Transaktionen
\item statistische und ähnliche Transaktionen (ungefährer Überblick, nicht korrekte Werte)
\item keine Sperren $ \rightarrow $ effizient ausführbar, keine anderen Transaktionen werden behindert
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [read committed] nur Lesen endgültig geschriebener Werte, aber nonrepeatable read möglich
\item [repeatable read] kein nonrepeatable read, aber Phantomproblem kann auftreten
\item [serializable] garantierte Serialisierbarkeit
\end { description*}
\paragraph { Integritätsbedingungen in SQL}
\begin { description*}
\item [not null] Nullwerte verboten
\item [default] Angabe von Default-Werten
\item [check] (search-condition) festlegung lokaler Integritätsbedingungen innerhalb der zu definierenden Wertebereiche, Attribute und Relationenschemata
\item [primary key] Angabe eines Primärschlüssel
\item [foreign key] Angabe der referentiellen Integrität
\item [create domain] Festlegung eines benutzerdefinierten Wertebereichs
\end { description*}
\paragraph { Erhaltung der referentiellen Integrität}
\begin { description*}
\item [on update $\mid$ delete] Angabe eines Auslöseereignisses, das die Überprüfung der Bedingung anstößt
\item [cascade $\mid$ set null $\mid$ set default $\mid$ no action] Behandlung einiger Integritätsverletzungen pflanzt sich über mehrere Stufen fort
\item [deferred $\mid$ immediate] legt Überprüfungszeitpunkt für eine Bedingung fest
\item [deferred] Zurückstellen an das Ende der Transaktion
\item [immediate] sofortige Prüfung bei jeder relevanten Datenbankänderung
\end { description*}
\section { Sichten und Zugriffskontrolle}
\begin { itemize*}
\item Sichten sind externe DB-Schemata folgend der 3-Ebenen-Schemaarchitektur
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Sichtdefinition
\item Relationenschema (implizit oder explizit)
\item Berechnungsvorschrift für virtuelle Relation, etwa SQL-Anfrage
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item Vorteile
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Vereinfachung von Anfragen für den Benutzer der Datenbank, etwa indem oft benötigte Teilanfragen als Sicht realisiert werden
\item Möglichkeit der Strukturierung der Datenbankbeschreibung, zugeschnitten auf Benutzerklassen
\item logische Datenunabhängigkeit ermöglicht Stabilität der Schnittstelle für Anwendungen gegenüber Änderungen der Datenbankstruktur
\item Beschränkung von Zugriffen auf eine Datenbank im Zusammenhang mit der Zugriffskontrolle
2021-02-17 11:17:57 +00:00
\end { itemize*}
\end { itemize*}
2021-02-19 16:25:56 +00:00
\subsection { Änderungen auf Sichten}
Kriterien
\begin { description*}
\item [Effektkonformität] Benutzer sieht Effekt als wäre die Änderung auf der Sichtrelation direkt ausgeführt worden
\item [Minimalität] Basisdatenbank sollte nur minimal geändert werden, um den erwähnten Effekt zu erhalten
\item [Konsistenzerhaltung] Änderung einer Sicht darf zu keinen Integritätsverletzungen der Basisdatenbank führen
\item [Datenschutz] Wird die Sicht aus Datenschutzgründen eingeführt, darf der bewusst ausgeblendete Teil der Basisdatenbank von Änderungen der Sicht nicht betroffen werden
\end { description*}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
Klassifikation der Problembereiche
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Verletzung der Schemadefinition
\item Datenschutz: Seiteneffekte auf nicht-sichtbaren Teil der Datenbank vermeiden
\item nicht immer eindeutige Transformation: Auswahlproblem
\item Aggregierungssichten: keine sinnvolle Transformation möglich
\item elementare Sichtänderung soll genau einer atomaren Änderung auf Basisrelation entsprechen: 1:1-Beziehung zwischen Sichttupeln und Tupeln der Basisrelation
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
Einschränkungen für Sichtänderungen
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item änderbar nur Selektions- und Projektionssichten
\item 1:1-Zuordnung von Sichttupeln zu Basistupeln: kein distinct in Projektionssichten
\item Arithmetik und Aggregatfunktionen im select-Teil sind verboten
\item genau eine Referenz auf einen Relationsnamen im from-Teil erlaubt
\item keine Unteranfragen mit „Selbstbezug“ im where-Teil erlaubt
\item group by und having verboten
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
Statistische Datenbanken
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Einzeleinträge unterliegen Datenschutz, aber statistische Informationen allen Benutzern zugänglich
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item keine Anfragen, die weniger als n Tupel selektieren
\item statistische Anfragen nicht erlauben, die paarweise einen Durchschnitt von mehr als m vorgegebenen Tupeln betreffen
\item Data Swapping: Vertauschen von Attributwerten einzelner Tupel
\item Generalisierung: Attributwerte durch allgemeinere Werte ersetzen, die einer Generalisierungshierarchie entnommen sind (Alter 30-40, Weglassen von Stellen PLZ)
\item Löschen von Tupeln, welche die k-Anonymität verletzen und damit identifizierbar sind
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item k-Anonymität: ein bestimmter Sachverhalt kann nicht zwischen einer vorgegebenen Anzahl k von Tupeln unterschieden werden
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\subsection { Datenmodelle für NoSQL}
\begin { description*}
\item [KV-Stores] binäre Relationen, bestehend aus einem Zugriffsschlüssel (dem Key) und den Nutzdaten (dem Value)
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item binäre Daten ohne Einschränkung,
\item Dateien oder Dokumente, $ \rightarrow $ Document Databases
\item oder schwachstrukturierte Tupel $ \rightarrow $ Wide Column Store
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Wide Column] KV-Store mit schwachstrukturiertem Tupel als Value = Liste von Attributname-Attributwert-Paaren
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item schwache Typisierung für Attributwerte (auch Wiederholgruppen)
\item nicht alle Einträge haben die selben Attributnamen
\item Hinzufügen eines neuen Attributs unproblematisch
\item Nullwerte aus SQL ersetzt durch fehlende Einträge
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Document Stores] KV-Store mit (hierarchisch) strukturiertem Dokument als Value
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item JSON-Format: geschachtelte Wide Column-Daten
\item XML (eher unüblich auf KV-Stores)
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Graph Stores] spezielle Form der Datenrepräsentation = Graphen, insb. Beziehungen zwischen Objekten
\begin { description*}
\item [Tiefensuche (DFS)] zunächst rekursiv alle Kindknoten besuchen bevor alle Geschwisterknoten besucht werden (Bestimmung der Zusammenhangskomponente)
\item [Breitensuche (BFS)] zunächst alle Geschwisterknoten besuchen bevor die Kindknoten besucht werden (Bestimmung des kürzesten Weges)
\end { description*}
\item [Subjekt-Prädikat-Objekt-Modell: RDF]
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Sprache zur Repräsentation von Informationen über (Web)-Ressourcen
\item zentraler Bestandteil von Semantic Web, Linked (Open) Data
\item Repräsentation von Daten, aber auch Wissensrepräsentation (z.B. Ontologie)
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item [Property-Graph-Modell] Knoten und (gerichtete) Kanten mit Eigenschaften (Properties)
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item Elemente: Nodes, Relationships, Properties, Labels
\item Properties = Key-Value-Paare: Key (=String), Value (=Java-Datentypen + Felder)
\item Nodes mit Labels ($ \approx $ Klassenname)
\item Relationships: sind gerichtet, mit Namen und ggf. Properties
\item Anfragen $ ( e:ERZEUGER ) - [ :LiegtIn ] - > ( a:ANBAUGEBIET \{ gebiet: "Napa Valley" \} ) $
\item match: Beispielmuster für Matching
\item return: Festlegung der Rückgabedaten (Projektion)
\item where: Filterbedingung für „gematchte“ Daten
\item create: Erzeugen von Knoten oder Beziehungen
\item set: Ändern von Property-Werten
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\end { description*}
2021-02-18 19:20:56 +00:00
2021-02-19 16:25:56 +00:00
Ontologie = formale Spezifikation einer Konzeptualisierung, d.h. einer Repräsentation von Begriffen (Konzepten) und deren Beziehungen
2021-02-18 19:20:56 +00:00
2021-02-19 16:25:56 +00:00
Vokabular: vordefinierte Klassen und Eigenschaften
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
\section { Anwendungsprogrammierung}
2021-02-18 19:20:56 +00:00
2021-02-19 16:25:56 +00:00
\subsection { Programmiersprachenanbindung}
\begin { itemize*}
\item prozedurale oder CALL-Schnittstellen (call level interface)
\item Einbettung einer DB-Sprache in Programmiersprachen
\item Spracherweiterungen und neue Sprachentwicklungen
\end { itemize*}
2021-02-18 19:20:56 +00:00
2021-02-19 16:25:56 +00:00
Datenbankzugriffsschnittstelle
\begin { description}
\item [Java] JDBC
\item [Embedded SQL für Java] SQLJ
\item [LINQ] Language Integrated Query; Einbettung einer DB-Sprache in eine Programmiersprache (C\# )
\item [Hibernate] Java-Framework für objekt-relationales Mapping
\begin { itemize*}
\item DriverManager: Einstiegspunkt, Laden von Treibern
\item Connection: Datenbankverbindung
\item Statement: Ausführung von Anweisungen über eine Verbindung
\item ResultSet: verwaltet Ergebnisse einer Anfrage, Zugriff auf einzelne Spalten
\end { itemize*}
\end { description}
2021-02-18 19:20:56 +00:00
2021-02-19 16:25:56 +00:00
\paragraph { Transaktionssteuerung}
\begin { itemize*}
\item Methoden von Connection
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item commit ()
\item rollback ()
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\item Auto-Commit-Modus
2021-02-18 19:20:56 +00:00
\begin { itemize*}
2021-02-19 16:25:56 +00:00
\item implizites Commit nach jeder Anweisung
\item Transaktion besteht nur aus einer Anweisung
\item Umschalten mittels setAutoCommit (boolean)
2021-02-18 19:20:56 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\end { itemize*}
2021-02-18 19:20:56 +00:00
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
\paragraph { Ausnahmebehandlung}
2021-02-17 11:17:57 +00:00
\begin { itemize*}
2021-02-18 19:20:56 +00:00
\item Auslösen einer Ausnahme (Condition) "signal ConditionName;"
\item Deklarieren von Ausnahmen
2021-02-17 11:17:57 +00:00
\end { itemize*}
2021-02-19 16:25:56 +00:00
\begin { lstlisting} [
language=SQL,
showspaces=false,
basicstyle=\ttfamily ,
commentstyle=\color { gray}
]
$ declare fehlendes _ weingut condition;
declare ungueltige_ region
condition for sqlstate value "40123";$
\end { lstlisting}
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
\paragraph { Funktionen}
2021-02-19 16:25:56 +00:00
\begin { lstlisting} [
language=JAVA,
showspaces=false,
basicstyle=\ttfamily ,
commentstyle=\color { gray}
]
create function geschmack (rz int)
returns varchar(20)
begin
2021-02-18 19:20:56 +00:00
return case
2021-02-19 16:25:56 +00:00
when rz <= 9 then "Trocken"
when rz > 9 and rz <= 18 then "Halbtrocken"
when rz > 18 and rz <= 45 then "Lieblich"
else "Suess"
2021-02-18 19:20:56 +00:00
end
2021-02-19 16:25:56 +00:00
end
//Aufruf innerhalb einer Anfrage
select Name, Weingut, geschmack(Restzucker) from WEINE
where Farbe = "Rot" and geschmack(Restzucker) = "Trocken"
\end { lstlisting}
2021-02-17 11:17:57 +00:00
2021-02-18 19:20:56 +00:00
\paragraph { Prozeduren}
Prozedurdefinition
2021-02-19 16:25:56 +00:00
\begin { lstlisting} [
language=SQL,
showspaces=false,
basicstyle=\ttfamily ,
commentstyle=\color { gray}
]
create procedure weinliste (in erz varchar(30),
2021-02-18 19:20:56 +00:00
out wliste varchar(500))
2021-02-17 11:17:57 +00:00
begin
2021-02-19 16:25:56 +00:00
declare pos integer default 0;
for w as WeinCurs cursor for
select Name from WEINE where Weingut = erz
do xy
end for;
end;
end;
// Nutzung ueber call-Anweisung
declare wliste varchar(500);
call weinliste ("Helena", wliste);
\end { lstlisting}
2021-02-17 11:17:57 +00:00
2021-02-19 16:25:56 +00:00
Eigenschaften von Prozeduren, die Anfrageausführung und -optimierung beeinflussen
\begin { description*}
\item [deterministic] Routine liefert für gleiche Parameter gleiche Ergebnisse
\item [no sql] Routine enthält keine SQL-Anweisungen
\item [contains sql] Routine enthält SQL-Anweisungen (Standard für SQL-Routinen)
\item [reads sql data] Routine führt SQL-Anfragen (select-Anweisungen) aus
\item [modifies sql data] Routine, die DML-Anweisungen (insert, update, delete) enthält
\end { description*}
2021-02-17 11:17:57 +00:00
\end { multicols}
2021-02-25 14:54:38 +00:00
\newpage
\begin { centering}
\section { Klausurvorbereitung}
\end { centering}
\begin { multicols*} { 2}
\section { Entity-Relationship-Diagramm}
\includegraphics [width=\textwidth/5] { Assets/DB_ ERD_ 01.png}
\includegraphics [width=\textwidth/5] { Assets/DB_ ERD_ 02.png}
\section { relationale Algebra}
\scriptsize {
$ \sigma _ { \{ Datum = 14 . 12 . 2017 \} } ( PRUEFUNG ) \bowtie ( \pi _ { \{ Matrikel, Name \} } ( STUDENT ) ) $
}
\section { Bereichskalkül}
Bereichskalkül: $ KUNDE ( x,y,z ) $ vs. Tupelkalkül: $ KUNDE ( k ) $
Ein Ausdruck hat die Form:$ \{ x 1 , x 2 , ... | \phi ( x 1 , x 2 , ... ) \} $
\vspace { 3mm}
Beispiel: Kunden mit Bestellung
$ KUNDE ( kdnr, kname, adresse, ort ) $ und $ AUFTRAG ( auftragsnr, kdnr, warennr, menge ) $
Kunden mit Bestellung: $ \{ x,y,z| KUNDE ( x,y,z, \_ ) \wedge AUFTRAG ( \_ ,x, \_ , \_ ) \} $
\section { SQL Anfrage}
\begin { lstlisting} [
language=SQL,
showspaces=false
]
SELECT Matrikel, Name FROM Student WHERE Matrikel>2010;
\end { lstlisting}
\section { Integrität}
\begin { description}
\item [Nutzerdefinierte Domäne] eines Attributs, d.h. bestimmte Werte
\item [Primärschlüssel PRIMARY KEY] nicht null, existiert und ist unique
\item [Fremdschlüssel FOREIGN KEY] wie primary key aus anderer tabelle
\item [CHECK-Bedingungen] werte vor insert prüfen
\item [ASSERTIONs]
\item [Trigger]
\end { description}
\section { CLOSURE-Algorithmus / RAP-Regeln}
\begin { tabular} { c|c|l}
R & Reflexivität & $ \{ \} \Rightarrow X \rightarrow X $ \\
A & Akkumulation & $ \{ X \rightarrow YZ, Z \rightarrow AW \} \Rightarrow X \rightarrow YZA $ \\
P & Projektivität & $ \{ X \rightarrow YZ \} \Rightarrow X \rightarrow Y $
\end { tabular}
\section { Normalformen}
\begin { description*}
\item [1.NF] Wertebereiche der Merkmale sind atomar (es gibt keine zusammengesetzten Werte).
\item [2.NF] 1. NF + Nichtschlüsselmerkmale sind von allen Schlüsselmerkmalen voll funktional abhängig.
\item [3.NF] 2. NF + kein Nichtschlüsselmerkmal ist von irgendeinem Schlüssel transitiv abhängig.
\item [Boyce Codd] 3.NF + entgernen funktionaler Abhängigkeiten
\item [4.NF] BC + Abhängigkeiten von mehrwertigen Attributmengen trivial und Attributmenge der Schlüsselkandidat
\end { description*}
2021-03-09 10:30:00 +00:00
\section { Konsultation}
Mehrere theoretische Fragen? Nicht multiple choice wie in Moodle sondern zB Definitionen erklären (was ist Transaktion/Sicht?)
ERD->Relationenschema
bei 1:N Beziehung kommt Schlüssel von N Seite
bei M:N Beziehung kommen Schlüssel von beiden Seiten
bei 1:1 Beziehung kann Schlüssel von entweder einer oder der anderen seite gewählt werden
2021-02-25 14:54:38 +00:00
\end { multicols*}
2021-02-17 11:17:57 +00:00
\end { document}