Dbs1 Cheat Sheet by tarinya via cheatography.com/25055/cs/6582/ DB Entwurfsprozess DML (Data Manipulation) DQL // Aggregatfunktionen DELETE FROM angestellter WHERE SELECT MAX( Salaer ) FROM persNr=1100; Angestellter; INSERT INTO Abteilung (Name, SELECT MIN( Salaer ) FROM AbtrNr) VALUES ('Entwicklung', Angestellter; 20); SELECT AVG( Salaer ) FROM UPDATE test SET name = "a" WHERE Angestellter; id=1; SELECT SUM( Salaer ) AS "Salaersumme" FROM Angestellter; DQL // JOINs SELECT SELECT name, COUNT(projnr) Abbildungsregeln SELECT PZ.PersNr, proj.bezeichnung, 1..* PK von 1 ist FK von * Zeitanteil, ang.Name FROM n:m Beziehungstabelle mit projektZuteilung AS PZ zusammengesetztem PK (FK der beiden INNER JOIN angestellter AS ang ON Tabellen) ang.PersNr = PZ.PersNr zur einschränkung nicht WHERE sondern from projektzuteilung inner join angestellter on projektzuteilung.persnr = angestellter.persnr group by name; INNER JOIN projekt AS proj ON HAVING! ANSI-3 Ebenenmodell PZ.ProjNr=proj.ProjNr nur attribute in group by können verwendet externen Sicht einer Benutzerklasse auf WHERE (PZ.ProjNr=25) OR Ebene eine Teilmenge der Datenbank (PZ.ProjNr=30) konzeption logische Struktur der Daten ORDER BY proj.ProjNr, ang.Name; Speicherungsstrukturen DQL // Subqueries elle Ebene interne Ebene SELECT Name FROM Angestellter A Vorteile: einzelne Bereiche umstrukturieren, WHERE EXISTS ohne Auswirkungen auf restliche Teile ( SELECT * FROM ProjektZuteilung DDL (Data Definition) WHERE PersNr = A.PersNr ); SELECT ang.Name, Salaer FROM Angestellter as ang INNER JOIN Abteilung as abt ON ..having count(*) < 2; ..having name like 'M% Data Control Language (DCL) CREATE ROLE user WITH LOGIN PASSWORD 'pw'; ALTER ROLE user CREATEROLE, CREATEDB; DROP ROLE AngProj; Index abt.AbtNr=ang.AbtNr WHERE Index-Sequential Access Method (ISAM) abt.Name='Entwicklung' AND Salaer - Daten über Indexspalten asc sortiert = CREATE database/view | ALTER, DROP | ( SELECT MIN (Salaer) ...references a(a) ON DELETE CASCADE/SET FROM Angestellter as ang INNER JOIN NULL werden. Abteilung as abt ON abt.AbtNr=ang.AbtNr WHERE abt.Name='Entwicklung'); + Einfügen/Suchen: schnell - aktualisieren: schlecht B-Baum (Balanced) - für grosse Datenmengen Heap (=Java Linked List) Suchbaum (=Java Tree) CREATE INDEX <IndexName> ON korreliert = subquery ist abhängig, i.e. nicht <Table(attr)>; alleine ausführbar Index lohnt sich für : Schlüssel, Häufiger Vergl. unkorreliert = subquery unabhängig mit Konstanten (zb Jahr = 2000) By tarinya Published 31st January, 2016. Sponsored by ApolloPad.com cheatography.com/tarinya/ Last updated 29th January, 2016. Everyone has a novel in them. Finish Yours! Page 1 of 3. https://apollopad.com Dbs1 Cheat Sheet by tarinya via cheatography.com/25055/cs/6582/ B-Tree einfügen Views Serialisierbarkeitsgraph CREATE VIEW AngPublic (Persnr, Name, Tel, Wohnort) AS SELECT Persnr, Name, Tel, Wohnort FROM Angestellter; Window Functions //alle namen mit salär&differenz zum nächsten SELECT * FROM AngPublic ORDER BY Name; DROP VIEW AngPublic; SELECT name, salaer, (salaer - virtuelle Tabelle, basierend auf anderen lead(salaer, 1) OVER(ORDER BY Tabellen/Views. salaer desc)) AS "differenz" FROM angestellter ORDER BY 2 DESC LIMIT 5; BibliotheksDB werden mit Select-Anweisung definiert Nutzen: Datenkapselung, Benutzeranpassung(Vereinfachung), Datenschutz //alle Vor-&Nachnamen mit ihrer Anzahl Transactions SELECT nachname, vorname, COUNT(*) OVER (PARTITION BY vorname) AS Anzahl FROM person; Funktionen, die auf ein „Daten-Fenster“ (d.h. umgebende Tupel bezogen auf die aktuelle Zeile) angewendet werden. Ähnlich wie AggregatsF. aber Zeilen behalten separaten Informationsgehalt Common Table Expressions (CTE) WITH angestelltemitprojekten AS ( BEGIN ISOLATION LEVEL SERIALIZABLE; SAVEPOINT one; ROLLBACK TO one; COMMIT; Isolationslvl: Read Uncommitted = read nicht synch. UML Read Committed = read nur kurz synch. Repeatable Read = zugegr. rows sind synch. Serializable = vollstä. Isolation Isolationsfehler SELECT a.name, proj.bezeichnung FROM angestellter a JOIN projzut pz ON a.persnr=pz.persnr JOIN projekt proj ON pz.projnr=proj.projnr ) Dirty = Lese Daten von anderer nicht committed Transaktion Fuzzy = Lese gleiche Daten mehrmals --> Locking andere Werte 2- Sobald die Transaktion ein Lock SELECT * FROM Phantom = Select entdecke plötzlich Phase freigegeben hat, darf sie keine angestelltemitprojekten; neue/gelöschte Rows Locking weiteren Locks beziehen Strict 2- Alle gehaltenen Sperren werden erst Phase nach Ende der Transaktion Locking freigegeben CTE's (“WITH” Queries) ermöglichen Definition von Hilfs-Queries in bzw. vor einer grösseren Query By tarinya Published 31st January, 2016. Sponsored by ApolloPad.com cheatography.com/tarinya/ Last updated 29th January, 2016. Everyone has a novel in them. Finish Yours! Page 2 of 3. https://apollopad.com Dbs1 Cheat Sheet by tarinya via cheatography.com/25055/cs/6582/ Locking (cont) Normalformen xlock Exclusive Lock für 1.NF Attriutwerte atomar schreibe-/lesezugriff 2. NF Nichtschlüsselattribut von slock Shared Lock für lesezugriff Schlüssel voll funktional abhängig Attribut muss vom ganzen wenn slock(x) vergeben, muss andere Schlüssel abhängen nicht nur von Transaktion mit xlock(x) warten Teilen Datenintegrität Datenkonsistenz 2.NF {Autor} -> Adresse von Autor funktional {Adresse} abhängig, lesen: "bestimmt eindeutig" Datensicherheit Datenschutz Datenunabhängigkeit DBMS Funktionen: Transaktionen, Mehrbenutzerbetrieb, Sicherheit, BackUp/Recovery ACID-Kriterien SQL Injections / Prepared Statement i.e. PK aus 1 Attribut --> immer Anforderungen Datenbank Redundanzfreiheit JDBC Isolationslevel 3. NF kein Nichtschlüsselattribut von Schlüssel transitiv abhängig Nutzen: Redundanzen erkennen & Anomalien (Einfüge-, Lösch-, Änderungs-) verhindern Problemlösung: 1)prepared statements verwenden 2)Benutzerrechte möglichst einschränken 3) SQL steuerzeichen escapen (aus ' ; --> \' \; ) Determinante: min. Attributmenge, von der andere Attr. funktional abhängen JDBC update zb ISBN | Ausleiher | Autor --> Determinante ISBN NF Bsp JDBC MetaData Relationale Algebra Voraussetzung für Verlässlichkeit von Systemen und Transaktionen Relationale Schreibweise Tabellenname (id INTEGER PK, JDBC connection.getMetaData() => DatabaseMetaData, gibt Infos über DB (Produktename,Driver,unterstützte name TEXT(20) NOT NULL, Datentypen...) abteilung NOT NULL REFERENCES abteilung); PK attribute unterrstreichen FK attribute kursiv oder gestrichelt unterstreichen By tarinya Published 31st January, 2016. Sponsored by ApolloPad.com cheatography.com/tarinya/ Last updated 29th January, 2016. Everyone has a novel in them. Finish Yours! Page 3 of 3. https://apollopad.com