# Vallah ich will nicht
## Korb 1
### Datenmodellierung
Was ist Datenmodellierung?
- Prozess der Erstellung eines Datenmodells für eine Datenbank
- Visuelle Darstellung für Datenobjekte, Zuordnungen, Regeln
ERD aus Angabe
#### ERM: Entity-Relationship-Model
Grundlage für Datenbankentwurf
Beispiel:

**Aufgabenstellung**:
1 Mitarbeiter, bestehend aus Name, leitet mehrere Projekte. Ein Projekt besteht aus Name, Datum und Budget.
#### SQL Create Table
```sql
CREATE TABLE employees
( employee_number number(10) NOT NULL,
employee_name varchar2(50) NOT NULL,
department_id number(10),
salary number(6),
CONSTRAINT employees_pk PRIMARY KEY (employee_number),
CONSTRAINT fk_departments
FOREIGN KEY (department_id)
REFERENCES departments(department_id),
check (salary>1000)
);
```
#### Notationen

Wieso gibt es so viele?
Veraltet -> neu immer besser
Oracle nimmt Krähenfuß

### Kardinalität
- 0 zu 1
- 0 zu n
- 1 zu 1
- 1 zu n
- n zu m
#### Constraints
- NULL
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- REFERENCES-Klausel
o „CONSTRAINT abc FOREIGN KEY (xx_id) REFERENCES xy(xx_id)
- CHECK
- DEFAULT
Constraints können benannt oder unbenannt sein:
Bsp.:

#### EBNF
- Erweiterte Backus-Naur-Form
- Metasyntax sprache, um dinge zu beschreiben
```ebnf
digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
digit = "0" | digit excluding zero ;
```
#### Normalformen
Werden bei relationalen Datenbanken angewendet
0. => Excel Tabelle
1. => Alle Spalten werden atomar, nicht weiter aufteilbar
2. => 1. NF + Alle Spalten werden von einem PK abhängig
3. => 2. NF + Alle nicht pk Spalten von einander unabhängig
### NOSQL
Not only SQL
Verwendet nicht relationale Ansätze
#### Arten von NOSQL DBs
- Key-Value: Redis ( Key-Value Pair)
- Document: MongoDb ( Hierarchisch in JSON-basierten Dokumenten innerhalb der Datenbank)
- Wide-Column: Cassandra ( Tabellen, Zeilen und Spalten -> Namen und Format der Spalten kann sich bei jeder Zeile unterscheiden)
- Graph: Neo4j ( Als Knoten gespeichert)
#### CAP:
Consistency, Availability, Partition Tolerance
Nicht möglich, alle 3 Eigenschaften gleichzeitig zu garantieren, sondern nur 2.
* Consistency: Jeder Lesezugriff immer die aktuellsten Daten oder Fehler
* Availability: Für jede Anfrage muss immer eine Antwort bekommen, auch wenn ein Server abstürzt
* Partition Tolerance: System bleibt funktionstüchtig, auch wenn Nachrichten zu spät oder gar nicht (zum Beispiel wegen Netzwerkunterbrechungen zwischen einzelnen Servern) ankommen.
Verschiedene Kombinationen:
* **CA**: Das System gibt immer die aktuellsten Daten zurück und ist immer Verfügbar. Dies wird vor allem bei Datenbanksystemen welche ACID garantieren (RDBMS) gewählt.
* **CP**: Hier wird, wenn Fehler auftritt, ein Fehler oder Timeout zurückgegeben, damit die Konsistenz gegeben bleibt. Das ist zum Beispiel besonders wichtig bei Bankanwendungen. So soll eher etwas nicht zur Verfügung stehen als mit falschen Beträgen oder Ähnlichem arbeiten.
* **AP**: Hier stehen Verfügbarkeit und Ausfalltoleranz im Fokus. Das bekannteste Beispiel für ein AP-System ist das DNS. Aufgrund der hohen Anzahl von Servern ist das System so gut wie immer verfügbar. Wenn einer ausfällt, springt einfach der nächste Server ein. Konsistenz beim DNS ist jedoch nicht gegeben, da es bis zu mehreren Tagen dauern kann, bis diese Änderung in der gesamten Systemhierarchie übernommen wurde.
**Mongo Db = CP
Wieso erfüllt Mongo nicht Availability?**
Mongo unterstützt ein „Single Master“ Modell. Wenn dieser Master Node abstürzt, kann Mongo keine Schreibzugriffe akzeptieren, solange es keinen neuen Master Node gibt.
#### ACID
**Atomicity**: Ganze Transaktion oder nichts
**Consistency**: Daten sind vor und nach Transaktion gültig (Datenintegrität)
**Isolation**: mehrere Transaktionen verhindern sich nicht gegenseitig
**Durability**: Daten nach Commit gehen niemals verloren
NoSQL Datenbanken garantieren nicht immer ACID, da diese für bessere Performance optimiert wurden.
#### BASE (Basically Available Soft state Eventual Consistency)
Gegenstück zu ACID
B A => Basically Available: Mehrere Replikas der DB
S => Soft state: Man bekommt nicht immer die neuesten Daten
E => Eventually Consistent: DB ist nicht immer in einem konsistenten Zustand
#### JSON
JavaScriptObjectNotation
Nachfolger von XML
Dateiformat mit key-value-pairs
#### Mongo
DB => Collection => Document => Fields
Use Cases:
- Unbekanntes Datenmodell
- hohes Schreibaufkommen
- Höhere Performance, da Joins vermieden werden
Replica Sets
## Korb 2
### Datenmodellierung
Entity Relationship Modell => zeigt wie die entities miteinander zusammenhängen und die felder der jeweiligen entity
Generalisierung => Aufteilen und Vererbungen (Person => Schüler und Lehrer)
Supertype => Allgemeinen properties (Person)
Subtype => Extra properties (Schüler)
#### Kardinalität
- 0 zu 1
- 0 zu n
- 1 zu 1
- 1 zu n
- n zu m
#### Organisationsstruktur
EMP-Tabelle => Boss hat keine ManagerId
#### Konzeptionelles Schema
beschreibt einfach die Datenstruktur in einem sehr abstrakten Stil

### Data Warehouse
riesiger Datenspeicher für aktuelle und historische Daten
#### Hauptprozesse
- Datenbeschaffung
- Datenhaltung
- Datenversorgung
- Datenauswertung
#### OLTP OLAP
OLTP => Online Transaction Processing, einfügen und ändern von Daten optimiert
OLAP => Online Analytic Processing, Analyse
Wieso trennt man die zwei:
- komplexe OLAP Anfragen schaden der Performance von OLTP Transaktionen
- OLAP braucht kein ACID
- OLTP-System soll keine historischen Daten enthalten
- Datenredundanz in DWS kontrollierbar und vielleicht notwending
#### Schemas
- Sternschema
- Dimensionstabellen sind nicht normalisiert
- Schneeflockenschema
- basiert auf Sternschema
- Tabellen verwenden Normalformen
- Sternflockenschema
- Mix aus Stern und Schneeflocke
- Nicht jede Dimensionstabelle wird normalisiert
#### Verdichtungsgrad
Wird anhand der Attributen in der group-by Klausel bestimmt
viele => drill down
wenige => roll up (übersichtlicher und verdichtet)
#### Slicing Dicing
Slicing vermindert die angezeigten Jahre
Dicing vermindert die angezeigten Spalten

#### Cube Operator
Erzeugt alle möglichen Kombinationen von Attribute, dass die Aufrufe auf die Faktentabelle reduziert werden
```sql
SELECT
warehouse,
SUM(quantity)
FROM
inventory
GROUP BY
CUBE(warehouse)
ORDER BY
warehouse;
```
## Korb 3
### DML
Data Manipulation Language
Select Insert Update Delete
View => Ansicht auf Tabelle (sql statement schränkt angezeigten spalten ein)
Joins:
A JOIN clause is used to combine rows from two or more tables, based on a related column between them

sub selects (in, exists, not in)
union keyword verbindet selects
#### Skalarfunktionen
- Geben nur einen wert zurück pro Aufruf
- Length
- Decode
- Substr
- intsr
- upper
- lower
#### Gruppenfunktionen
- Fassen zeilen zu Gruppen zusammen und liefern für jede einzelne Gruppe ein Ergebnis
- avg
- sum
- min
- max
- count
## Korb 4
### DCL DDL
Data definition language => Datenstruktur verändern beschreiben entfernen
#### Constraints
- Not null
- primary key
- foreign key
- default
- check (if statement)
- create indexe
- unique
#### Statements
- alter table student
- alter table student modify name varchar2(30) not null
- create
- drop
Data control language => Berechtigungen vergeben entziehen
#### Grant
```sql
grant <permissions> on <table> to <person>
revoke <permissions> on <table> to <person>
```
permission:
- select
- insert
- delete
- ...
- all
#### Rollen
```sql
create role <bezeichnung>
grant <permissions> on<table> to <role>
```
Vorteil: man kann rollen mehreren benutzern geben und hat somit weniger aufwand diese zu verwalten (schüler, lehrer, sysadmin)
#### System privileges
- alter any <object_type>
- create any <object_type>
- drop any <object_type>
### Optimierung von DB
Vermeiden:
- Joins
- Select *
- select distinct
inner joins und indizes benutzen
indizes: lookup table für zeilen, nach welchen oft gesucht wird
#### Oracle Optimizer
- Regelbasierter
- entscheidet nach bestimmten regeln, welcher execution plan ausgeführt wird
- Kostenbasierter
- führt das statement auf die effizienteste weise aus
#### Explain Plans
ein execution plan wird vom Optimierer bei einer DB Anfrage erstellt
explain plan speichert den execution plan in eigene tabelle
hints:
- Mit Hinweisen können Sie Entscheidungen treffen, die normalerweise vom Optimierer getroffen werden.
- Genauer wird es safe nicht verlangt
- no_merge, push_subq, ...
## Korb 6
### XML
extensible Markup Language
vorgänger von json
wurde zum datenaustausch im internet verwendet
man baut sich die tags selber
```xml
<author>
<name></name>
<age></age>
<gender></gender>
</author>
```
DTD => Document Type Definition
Definiert Struktur, Elemente und Attribute eines XML Dokuments
An XML document with correct syntax is called "Well Formed".
An XML document validated against a DTD is both "Well Formed" and "Valid".
XML-Schema
Vorteile zu DTD:
- in XML geschrieben
- unterstützt datatypes
- unterstützt xml namespaces
- erweiterbar
svg => scalable vector graphics
xml basierte markuplanguage für 2d vektorgraphiken
apex verwendet für graphiken
### APEX
Low-Code entwicklungsplattform
läuft in oracle db
#### Architektur
- Browser
- Web Server
- DB
Browser sendet Http Request => Server wandelt Anfrage zu plsql anfrage um => db liefert metadaten zur page zurück => server leitet diese weiter zum browser
#### Aufbau
Application
Page
Region
Item
Validation
Page Processing
### PLSQL
erweitert sql mit prozeduralle features wie z.b error checking, object oriented programming
prozedur function package
trigger => gespeicherte prozedur welche bei bestimmten aufruf durchgeführt wird
trigger mutation => wenn trigger die tabelle aufruft, zu welcher er gehört
zeitgesteurte jobs => dbms_scheduler
### R
Programmiersprache für statistische Berechnungen, Analysen und graphiken usw
r enthält alle libraries, bei python muss man diese extra installieren
Google hat diese mal benutzt um prognosen für virus zu machen
DataScience:
- Informationen aus Daten gewinnen
```r
x <- 1:7; x
Output: [1] 1 2 3 4 5 6 7
matrix(1:9, nrow = 3, ncol = 3)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
```
Das ist die Lösung zum Bild von Nathalie
```r
arbeitszeit <- c(8, 10.5, 11, 9, 6);
names(arbeitszeit) <- c("mo", "di", "mi", "do", "fr");
mean(arbeitszeit);
lt10 <- arbeitszeit < 10;
print(lt10)
print(arbeitszeit[!lt10])
print(min(arbeitszeit))
```
### OR-Mapping
object relational mapper => db zeile zu object in programmiersprache
jpa => java persistance api
sql in java = jpql (java persistence query language)
jpa = spezifikation
hibernate = implementierung vom standard
single table, table per class, joined
## Korb 7
### KIDS :)
#### Vocabulary
Hyperparameters => zusatzparameter wie z.B random_state, n_neighbors
##### Under/Overfitting
Modell ist zu genau oder zu locker für die jeweiligen Trainingsdaten
##### Generalization
Handle unseen data
##### Classification vs Regression
Classification => Labels erraten (ist person schwanger ja nein usw)
Regression => Zahlen erraten (Gehalt, Alter, ...)
#### Preprocessing
Drop null values, columns, rows
imputing => average, most frequent
ordinal => kategorische werte bei denen reihenfolge wichtig ist (noten)
nominale => kategorische werte ohne steigerung bzw. reihenfolge (gender)
scaling:
- min-max
- werte werden zwischen [-1; 1] skaliert
- standardization
- standardabweichung von durchschnitt zwischen [-1; 1]
- robust scaling
- IQR => interquartilsabstand
Situations:
- Unterschiedliche Einheiten bei Zahlen
#### kNN
classification => nimmt n viele nachbarn vom punkt und gibt dem punkt ein label durch das am häufigsten vorkommenden Label
regression => nimmt werte von n vielen nachbaren und weißt mittelwert aus diesen werten den punkt zu
n_neighbors => wie viele nachbarn angeschaut werden
underfitting => hocher wert
overfitting => kleiner wert
scaling => damit abstand zu den punkten verhältnisweise gleich ist und nicht irrational
SMOTE:
- synthetical minority oversampling technique
- SMOTE works by selecting examples that are close in the feature space, drawing a line between the examples in the feature space and drawing a new sample at a point along that line.
#### Performance metrics
Accuracy => richtige schätzungen / anzahl schätzungen
Precision => true positives / (true pos. + neg. pos.), die qualität einer positiven entscheidung
Recall => true pos. / (true pos. + false neg.), wie vollständig das model ist
F1 => 2 / (prec ^ -1 + rec ^ -1), preferred when data is imbalanced, weighted average of prec and rec
confusion matrix binary classification => true positives, fp, false negatives, tn
accuracy schlecht => imbalanced data => 90% false 10% true, einfach auf false guessen und man hat 90% acc.
recall > acc => when you cannot afford to have false positives (corona tests)
prec > acc => when you cannot afford to have an incorrect detection
MAE:
- mean absolute error
- durchschnitt von absoluten fehler
MSE:
- mean squared error
- durchschnitt absoluter fehler hoch zwei, höheres gewicht auf ausreiser
#### Training and testing
Um overfitting zu vermeiden und die Accuracy des Models zu trainieren
Hold out:
- Nicht alle Daten zum trainieren nehmen
- 70/30, 80/20 oder 60 train 20 validation 20 test split
Cross-Validation
- Genau dasselbe, nur werden nicht immer die selben 20% als validation genommen sondern immer unterschiedliche
Stratification: Verteilung der Datensätze (Bei blumen 40 samples von jeder blume z.B.)
Preprocessing train test:
- eigentlich alle methoden auf beide datensätze
- test aber nie fitten usw
#### Decision trees
Entropy: Wie vermischt die Daten sind (hohe rechenkosten wegen log)
Gini impurity: berechnen wie die äste eines baumes erstellt werden sollen um missclassified zu vermeiden
overfitting im tree:
- zu viel depth
- maximale depth bestimmen um dies zu vermeiden
random forests:
- z.B. 100 bäume für modell
- die am öfftesten vorkommenden entscheidungen werden akzeptiert
- overfitting wird eben mit majority vote entschieden
- falls aber overfitting existiert einfach wald größer machen
#### Imbalance
Accuracy nicht gut weil man auf die eine Seite tippen kann die am öftesten vorkommt und dann hat man höher acc. obwohl man eig. ganix kann
Stratification wichtig um ausgewogene Daten zu erzeugen
Oversampling:
- Daten von minority duplizieren
- Nachteile
- wenns schlechte daten sind wirds halt nicht besser
- overfitting
Undersampling:
- Daten von majority löschen
- Nachteile
- Man kann gute Daten verlieren
SMOTE:
- Daten künstlich erzeugen mit Nachbaren und so
- Nachteile
- Overlapping von klassen
- Nicht praktisch für high dimensional data (???)
## Korb 8
### Concurrency
#### Transaktions-Scheduling
- Aggressiver bre
- lässt konflikte zu und versucht diese zu beseitiegen
- konservativer bre
- vermeidet konflikte
- nur geringe parallelität
#### Locking
shared locks: mehrere transaktionen können daten aus tabelle lesen
exclusive locks: nur eine transaktion hat zugriff auf die tabelle, da sie eben daten verändert oder neue daten speichert
- 2-phase locking
- lock table
- update table
- unlock table
- c2pl
- am anfang werden alle sperren gesetzt
- verhindert deadlocks
- hoher verlust an paralellität
- sperren werden vor ende freigegeben
- s2pl
- sperren werden erst am ende freigegeben
#### Dirty
Dirty write: Daten, welche von einer noch nicht fertigen Transaktion stammen, werden überschrieben
Dirty read: Lesen von nicht committeden Daten
#### Timeout
hilft gegen deadlocks