|
1..*
|
PK von 1 ist FK von *
|
|
n:m
|
Beziehungstabelle mit zusammengesetztem PK (FK der beiden Tabellen)
|
|
externen Ebene
|
Sicht einer Benutzerklasse auf eine Teilmenge der Datenbank
|
|
konzeptionelle Ebene
|
logische Struktur der Daten
|
|
interne Ebene
|
Speicherungsstrukturen
|
DELETE FROM angestellter WHERE persNr=1100;
INSERT INTO Abteilung (Name, AbtrNr) VALUES ('Entwicklung', 20);
UPDATE test SET name = "a" WHERE id=1;
SELECT PZ.PersNr, proj.bezeichnung, Zeitanteil, ang.Name FROM projektZuteilung AS PZ
INNER JOIN angestellter AS ang ON ang.PersNr = PZ.PersNr
INNER JOIN projekt AS proj ON PZ.ProjNr=proj.ProjNr
WHERE (PZ.ProjNr=25) OR (PZ.ProjNr=30)
ORDER BY proj.ProjNr, ang.Name;
SELECT Name FROM Angestellter A WHERE EXISTS
( SELECT * FROM ProjektZuteilung WHERE PersNr = A.PersNr );
SELECT ang.Name, Salaer
FROM Angestellter as ang INNER JOIN Abteilung as abt ON abt.AbtNr=ang.AbtNr WHERE abt.Name='Entwicklung' AND Salaer =
( SELECT MIN (Salaer)
FROM Angestellter as ang INNER JOIN Abteilung as abt ON abt.AbtNr=ang.AbtNr WHERE abt.Name='Entwicklung');
SELECT MAX( Salaer ) FROM Angestellter;
SELECT MIN( Salaer ) FROM Angestellter;
SELECT AVG( Salaer ) FROM Angestellter;
SELECT SUM( Salaer ) AS "Salaersumme" FROM Angestellter; SELECT SELECT name, COUNT(projnr) from projektzuteilung inner join angestellter on projektzuteilung.persnr = angestellter.persnr group by name;
..having count(*) < 2; ..having name like 'M%
CREATE ROLE user WITH LOGIN PASSWORD 'pw';
ALTER ROLE user CREATEROLE, CREATEDB;
DROP ROLE AngProj;
CREATE INDEX <IndexName> ON <Table(attr)>;
//alle namen mit salär&differenz zum nächsten
SELECT name, salaer, (salaer - lead(salaer, 1) OVER(ORDER BY salaer desc)) AS "differenz" FROM angestellter ORDER BY 2 DESC LIMIT 5;
//alle Vor-&Nachnamen mit ihrer Anzahl
SELECT nachname, vorname, COUNT(*) OVER (PARTITION BY vorname) AS Anzahl FROM person;
WITH angestelltemitprojekten AS (
SELECT a.name, proj.bezeichnung
FROM angestellter a
JOIN projzut pz ON a.persnr=pz.persnr
JOIN projekt proj ON pz.projnr=proj.projnr
)
SELECT * FROM angestelltemitprojekten;
CREATE VIEW AngPublic (Persnr, Name, Tel, Wohnort) AS
SELECT Persnr, Name, Tel, Wohnort FROM Angestellter;
SELECT * FROM AngPublic ORDER BY Name;
DROP VIEW AngPublic;
BEGIN ISOLATION LEVEL SERIALIZABLE;
SAVEPOINT one;
ROLLBACK TO one;
COMMIT;
|
2-Phase Locking
|
Sobald die Transaktion ein Lock freigegeben hat, darf sie keine weiteren Locks beziehen
|
|
Strict 2-Phase Locking
|
Alle gehaltenen Sperren werden erst nach Ende der Transaktion freigegeben
|
|
xlock
|
Exclusive Lock für schreibe-/lesezugriff
|
|
slock
|
Shared Lock für lesezugriff
|
|
wenn slock(x) vergeben, muss andere Transaktion mit xlock(x) warten
|
|
|
Redundanzfreiheit
|
|
|
Datenintegrität
|
Datenkonsistenz
|
|
Datensicherheit
|
|
|
Datenschutz
|
|
|
Datenunabhängigkeit
|
|
Tabellenname (id INTEGER PK,
name TEXT(20) NOT NULL,
abteilung NOT NULL REFERENCES abteilung);
|
1.NF
|
Attriutwerte atomar
|
|
2. NF
|
Nichtschlüsselattribut von Schlüssel voll funktional abhängig
Attribut muss vom ganzen Schlüssel abhängen nicht nur von Teilen i.e. PK aus 1 Attribut --> immer 2.NF |
|
{Autor} -> {Adresse}
|
Adresse von Autor funktional abhängig, lesen: "bestimmt eindeutig"
|
|
3. NF
|
kein Nichtschlüsselattribut von Schlüssel transitiv abhängig
|
No comments yet.
Cheatography n. The art of mapping complex subjects into clear, instantly navigable reference guides.