---
# System prepended metadata

title: Vallah ich will nicht

---

# 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:

![](https://i.imgur.com/scUGfSd.png)

**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

![](https://i.imgur.com/WhpPh43.png)

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

![](https://i.imgur.com/IJd3zMj.png)


### 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.:

![](https://i.imgur.com/J7HNXzJ.png)


#### 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

![](https://i.imgur.com/6kjnaMS.png)

### 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

![](https://i.imgur.com/g8rnsLP.png)

#### 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
![](https://i.imgur.com/vAZDnu3.png)

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

