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