# 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