Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

IS: Datenbanken, © Till Hänisch 2000 SQL Structured Query Language.

Ähnliche Präsentationen


Präsentation zum Thema: "IS: Datenbanken, © Till Hänisch 2000 SQL Structured Query Language."—  Präsentation transkript:

1 IS: Datenbanken, © Till Hänisch 2000 SQL Structured Query Language

2 IS: Datenbanken, © Till Hänisch 2000 SELECT Holt Datensätze (Tupel) aus DB, genauer Erzeugt neue (temporäre) Relation aus bestehenden SELECT [ALL|DISTINCT] Attributliste FROM R 1,...,R n [WHERE Prädikat] [ORDER BY A1 [ASC|DESC][{,Ai [ASC|DESC]}]] Funktion: ALL (default) liefert auch Duplikate (Gegensatz zur Relationenalgebra) DISTINCT liefert nur unterschiedliche Tupel Attributliste: R j.A ji,... oder falls eindeutig auch nur A ji,... oder R j.A ji [AS] Aliasname oder R j.* (alle Attribute von Rj)

3 IS: Datenbanken, © Till Hänisch 2000 SELECT contd. Prädikat Attribute Konstanten Operatoren =, <>, >, =,…, AND, OR, NOT Funktionen SELECT ist Projektion, WHERE clause ist Selektion Vollständige Definition des SELECT Statements ist zu unübersichtlich Darstellung an Beispielen

4 IS: Datenbanken, © Till Hänisch 2000 Beispieltabellen SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- --------- --------- -------- --------- --------- --------- 7369 SMITH CLERK 7902 17.12.80 800 20 7499 ALLEN SALESMAN 7698 20.02.81 1600 300 30 7521 WARD SALESMAN 7698 22.02.81 1250 500 30 7566 JONES MANAGER 7839 02.04.81 2975 20 7654 MARTIN SALESMAN 7698 28.09.81 1250 1400 30 7698 BLAKE MANAGER 7839 01.05.81 2850 30 7782 CLARK MANAGER 7839 09.06.81 2450 10 7788 SCOTT ANALYST 7566 09.12.82 3000 20 7839 KING PRESIDENT 17.11.81 5000 10 7844 TURNER SALESMAN 7698 08.09.81 1500 0 30 7876 ADAMS CLERK 7788 12.01.83 1100 20 7900 JAMES CLERK 7698 03.12.81 950 30 7902 FORD ANALYST 7566 03.12.81 3000 20 7934 MILLER CLERK 7782 23.01.82 1300 10 SQL> select * from dept; DEPTNO DNAME LOC --------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> select * from salgrade; GRADE LOSAL HISAL --------- --------- --------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

5 IS: Datenbanken, © Till Hänisch 2000 SELECT auf eine Tabelle SELECT * FROM EMP gibt Tabelle EMP vollständig aus Projektion = SELECT A 1,...,A n FROM R mit Selektion: Alle Mitarbeiter in Dept 20 SELECT ename FROM emp WHERE deptno=20; Alle Mitarbeiter mit Gehalt größer gleich 2000 SELECT ename FROM emp WHERE sal >= 2000; Alle Mitarbeiter mit Gehalt zwischen 2000 und 3000 SELECT ename FROM emp WHERE sal >= 2000 AND sal <= 3000; oder SELECT ename FROM emp where sal BETWEEN 2000 AND 3000; Alle Mitarbeiter, die nicht in dept 20 oder 30 arbeiten SELECT ename FROM emp WHERE deptno <> 20 AND deptno <> 30; oder SELECT ename FROM emp WHERE NOT (deptno = 20 OR deptno = 30); oder SELECT ename FROM emp WHERE NOT(deptno = 20 OR deptno = 30); oder SELECT ename FROM emp WHERE deptno NOT IN (20,30);

6 IS: Datenbanken, © Till Hänisch 2000 Strings werden durch ' terminiert manche DB (z.B. mysql) erlauben auch " Maximallänge beschränkt (je nach DB, mysql 255, ORACLE 4000,...) Schreibweise (Groß- Kleinschreibung) bei Suche je nach System relevant Datentyp VARCHAR für variable Länge, CHAR für feste Länge Exakter Vergleich mit "=", LIKE bei Wildcards SELECT ename FROM emp WHERE ename = "SMITH"; Alle Mitarbeiter, deren Name mit "S" anfängt SELECT ename FROM emp WHERE ename LIKE 'S%'; "%" steht für beliebige Zeichenfolge "_" für ein einzelnes Zeichen

7 IS: Datenbanken, © Till Hänisch 2000 Datumswerte Datentyp DATE oder DATETIME Schwierig, da kein allgemein akzeptiertes Datumsformat !!! implizite Konvertierung möglich, aber unsicher, z.B. SELECT ename FROM emp WHERE hiredate > '1982-01-05'; 1. Mai oder 5. Januar ? Sybase:... WHERE hiredate > CONVERT(DATETIME,'01-05-1980',110) Format 110: USA MM-DD-YYYY Format 112: ISO YYYYMMDD Oracle:... WHERE hiredate > TO_DATE(01-05-1980','mm-dd-yyyy') mysql:... WHERE hiredate > '1980-01-05'

8 IS: Datenbanken, © Till Hänisch 2000 numerische Werte verschiedene Datentypen ganze Zahlen INTEGER[(Länge)] NUMERIC, DECIMAL[(Länge[,Nachkomma])] festgelegte Präzision Festkommazahlen, z.B. Währung Fließkommazahlen FLOAT,... eher ungebräuchlich bei DB meist ist definierte Genauigkeit gefordert

9 IS: Datenbanken, © Till Hänisch 2000 Sortierung Standard garantiert keine Reihenfolge der Ergebnistupel (Meistens werden Tupel in der Reihenfolge der Erstellung geliefert, aber nicht immer). Wenn bestimmte Reihenfolge gewünscht: ORDER BY SELECT ename,sal FROM emp ORDER BY sal; sortiert die Tupel nach sal (Wie ?) Reihenfolge durch modifier ASC (ascending, aufsteigend) oder DESC (descending, absteigend). Default ist ASC Mitarbeiter mit Gehalt, höchstes zuerst: SELECT ename,sal FROM emp ORDER BY sal DESC; Mehrere Kriterien möglich, z.B. abteilungsweise nach Gehalt sortiert: SELECT ename,deptno,sal FROM emp ORDER BY deptno ASC, sal DESC; Zunächst wird nach dem ersten Kriterium sortiert, innerhalb gleicher Werte nach dem zweiten usw.

10 IS: Datenbanken, © Till Hänisch 2000 Arithmetische Ausdrücke in Attributliste, WHERE-clause, ORDER BY z.B. SELECT ename,sal+comm FROM emp; Spaltennamen sind hier komplex (oder leer, je nach DB), deshalb üblicherweise Aliasnamen z.B. SELECT ename,sal+comm AS total FROM emp; Arithmetische Operatoren +,-,*,/ zusätzlich (nur teilweise standardisiert) viele Funktionen SELECT sin(sal) FROM emp; wichtig sind hauptssächlich String-Funktionen SELECT SUBSTRING(ename,1,2) FROM emp; (bei ORACLE SUBSTR) SELECT LENGTH(ename) FROM emp; (bei SYBASE DATA_LENGTH) SELECT LEFT(ename,1) FROM emp; (erster Buchstabe) SELECT RIGHT(ename,1) FROM emp; (letzter Buchstabe) SELECT LOWER(ename) FROM emp; (Kleinbuchstaben) SELECT UPPER(ename) FROM emp; (Großbuchstaben) SELECT SOUNDEX(ename) FROM emp; (Soundex-Algorithmus) usw.

11 IS: Datenbanken, © Till Hänisch 2000 JOINS Verknüpfung mehrerer Relationen über (spezielle) Attribute SELECT Attributliste FROM R 1,...,R n WHERE R i.A ij =R k.A kl AND R m.A mn =R o.A op... "="-Operator : Equi-Join, sonst Non-Equi-Join z.B. Mitarbeiter mit Abteilung und Gehaltsstufe SELECT ename,sal,grade,dname FROM emp, salgrade, dept WHERE emp.deptno=dept.deptno AND emp.sal BETWEEN salgrade.losal AND salgrade.hisal; Korrelationsvariablen SELECT e.ename,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno; nötig, falls eine Relation mehrfach in Join vorkommt, z.B. alle Mitarbeiter, die mehr verdienen, als ihr Manager SELECT e.ename, e.sal, m.ename, m.sal FROM emp e, emp m WHERE e.mgr=m.empno AND e.sal > m.sal;

12 IS: Datenbanken, © Till Hänisch 2000 OUTER JOIN Liste aller Angestellten mit dem jeweiligen Manager SELECT e.ename, m.ename FROM emp e, emp m WHERE e.mgr = m.empno;  ‘King’ fehlt, weil dort mgr = NULL ist.  emps, die keinen mgr haben, fehlen. Was tun? --> OUTER JOIN SELECT e.ename,m.ename FROM emp e LEFT OUTER JOIN emp m ON e.mgr=m.empno; WHERE e.mgr * = m.empno; Andere Notation: WHERE e.mgr (+)= m.empno (ORACLE) WHERE e.mgr *= m.empno (Sybase) Varianten: LEFT OUTER JOIN RIGHT JOIN INNER JOIN ist der normale Join Verallgemeinerte JOIN-Syntax nach SQL 92 SELECT e.ename, d.dname FROM emp e JOIN dept d ON deptno = d.deptno

13 IS: Datenbanken, © Till Hänisch 2000 Subqueries Die WHERE-clause kann sich auf eine andere (Sub-) Query beziehen. Formen: SELECT Attributliste FROM R 1,...,R n WHERE [NOT] EXISTS (SELECT…) SELECT Attributliste FROM R 1,...,R n WHERE A ji (=|<>| =| ) ANY|ALL (SELECT…) SELECT Attributliste FROM R 1,...,R n WHERE A ji [NOT] IN (SELECT…) Alle Mitarbeiter mit demselben Job wie ‘Jones’ SELECT ename, job FROM emp WHERE job = ANY (SELECT job FROM emp WHERE ename = ‘JONES’); Alle Mitarbeiter, die mehr verdienen als irgendein Mitarbeiter von dept 30 SELECT ename, sal FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 30); Alle Mitarbeiter, die mehr verdienen, als jeder in dept 30 SELECT ename, sal FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 30);

14 IS: Datenbanken, © Till Hänisch 2000 Subqueries contd. IN == “= ANY”, NOT IN == „<> ALL“ z.B. alle Mitarbeiter mit einen Job, den es in dept 30 nicht gibt SELECT ename, job FROM emp WHERE job NOT IN (SELECT job FROM emp WHERE deptno = ‘30’); Alle Mitarebiter, die mindestens einen anderen managen SELECT ename, job FROM emp e WHERE EXISTS (SELECT * FROM emp WHERE mgr = e.empno); Anmerkung: Diese Subquery muss für jeden Tupel der Hauptquery ausgeführt werden (da in der FROM-Clause der Subquery auf ein Attribut der Hauptquery Bezug genommen wird).  Correlated Subquery  Achtung: Performance geht bei großen Datenmengen in den Keller Deshalb: Correlated Subqueries durch Joins ersetzen. SELECT m.ename, m.job FROM emp m, emp e WHERE e.mgr = m.empno; Doppelte werden ausgegeben, daher mit DISTINCT: SELECT DISTINCT m.ename, m.job FROM emp m, emp e WHERE e.mgr = m.empno; Mitarbeiter mit dem höchsten Gehalt: SELECT ename, sal FROM emp e WHERE NOT EXISTS (SELECT * FROM emp WHERE sal > e.sal);

15 IS: Datenbanken, © Till Hänisch 2000 Aggregatfunktionen Oft sind nicht die einzelnen Tupel, sondern nur eine Zusammenfassung des Inhalts von Interesse -> Aggregate Functions Wichtige Aggregate Functions: COUNT (*) Zahl der Tupel COUNT ([DISTINCT] Attribut) Zahl der verschiedenen Attributwerte (<> NULL) MAX () MIN () AVG () Durchschnitt SUM () z.B. Zahl der Mitarbeiter: SELECT COUNT(*) FROM emp; Zahl der unterschiedlichen Jobs: SELECT COUNT(DISTINCT job) FROM emp; Angestellter mit höchstem Gehalt: SELECT ename, sal FROM emp WHERE sal >= (SELECT MAX (sal) FROM emp);

16 IS: Datenbanken, © Till Hänisch 2000 Aggregatfunktionen contd. Durchschnittliches Gehalt / Abteilung?  Gruppierung von Aggregatfunktion SELECT deptno, AVG (sal) FROM emp GROUP BY deptno; Struktur: SELECT … FROM … WHERE … GROUP BY Gruppierungsausdruck HAVING Gruppierungsbedingung ORDER BY … GROUP BY bewirkt interne Teilmengenbildung, Aggregatfunktionen wirken jeweils auf diese Teilmengen. Unterschied WHERE vs. HAVING Mit WHERE werden Zeilen eliminiert. Mit HAVING können ganz Teilmengen (Gruppen) eliminiert werden. Durchschnittliches Gehalt je Abteilung mit mindestens 5 Mitarbeitern: SELECT deptno, AVG (sal) FROM emp GROUP BY deptno HAVING COUNT(*) >= 5; Jobs mit Durchschnittsgehalt, das größer ist, als das Durchschnittsgehalt der Manager SELECT job, AVG (sal) FROM emp GROUP BY job HAVING AVG (sal) > (SELECT AVG (sal) FROM emp WHERE job = ‘MANAGER’);

17 IS: Datenbanken, © Till Hänisch 2000 Mengenoperationen SELECT-Statements liefern Relationen (= Mengen) zurück, diese können mit den üblichen Mengenoperationen verknüpft werden SELECT statement UNION | INTERCEPT | MINUS/EXCEPT SELECT statement Person Name Student Dozent Seme ster Gehal t Verwendung z.B. bei Spezialisierung: Namensliste aller Personen SELECT Name,email FROM Dozent UNION SELECT Name,email FROM Student ORDER BY Name; Alle jobs, die es sowohl in Dept 20 als auch in Dept 30 gibt: SELECT DISTINCT job FROM emp WHERE deptno=20 INTERSECT SELECT DISTINCT job FROM emp WHERE deptno=30; Anm:mysql unterstützt dies nicht, Sybase nur UNION

18 IS: Datenbanken, © Till Hänisch 2000 DML, INSERT Wie kömmen die Daten in die Tabellen rein ?,werden gelöscht, geändert,... DML (Data Manipulation Language) INSERT fügt Datensätze zu einer Tabelle hinzu INSER INTO table [(col-list)] VALUES (Werteliste) oder INSER INTO table [(col-list)] SELECT stmt. Falls nur für einen Teil der Spalten Werte angegeben werden, werden diese in col-list definiert. Z.B. Tabelle Person (Name, Vornane, Alter) INSERT INTO Person (Name, Vorname) VALUES (’Hänisch’, ’Till’) INSERT INTO Person (Name) SELECT ename FROM emp INSERT INTO Person VALUES (‘Hänisch’, ‘Till’, ‘33’)

19 IS: Datenbanken, © Till Hänisch 2000 DELETE Löscht Datensätze aus einerTabelle DELETE FROM table [WHERE clause] z.B lösche alle Datensätze in der Tabelle emp DELETE FROM emp WHERE clause wie bei SELECT Statement Lösche alle Angestellten, die mehr verdienen als ihr Chef DELETE FROM emp WHERE empno IN (SELECT e.empno FROM emp e, emp m WHERE e.mgr = m.empno AND e.sal > m.sal) Duplikate aus Tabelle Person (id, Name) löschen: DELETE FROM Person WHERE id = (SELECT MAX (id) FROM Person GROUP BY Name HAVING COUNT(*) > 1)

20 IS: Datenbanken, © Till Hänisch 2000 UPDATE Ändert existierende Tupel UPDATE table SET col = expression {, col = expression} [WHERE clause] z.B. erhöhen des Gehalts der Angestelten um 10%, die weniger als der Durchschnitt verdienen: UPDATE emp SET sal = 1.1 * sal WHERE sal < (SELECT AVG (sal) FROM emp) Anmerkung: Während des Updates ändert sich der Durchschnitt!!! Daher: Die Subquery wird vor dem UPDATE durchgeführt.

21 IS: Datenbanken, © Till Hänisch 2000 DDL Data Definition Language Anlegen von Tabellen Befehle: CREATE, DROP, ALTER Hier nur auszugsweise, im wesentlichen CREATE TABLE (Rest in Datenbanken II) Anmerkung: Es existieren grafische Tools für DDL, nur eingeschränkt sinnvoll (insbesondere bei Wiederverwendung,...) DROP TABLE name  Tabelle löschen Tabelle anlegen: Welche Information sind nötig ? Name, Attribute + Datentypen, Constraints

22 IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL], [colconstraint] tableconsraint := CONSTRAINT name constraint-definition colconstraint := constraint-definition (später mehr) CREATE TABLE Person ( name VARCHAR (30), id INT ); mysql> describe person; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(30) | YES | | NULL | | | id | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+

23 IS: Datenbanken, © Till Hänisch 2000 Datentypen Hier nur auszugsweise für Sybase, Oracle, Details siehe Dokumentation CHAR(n)String fester Länge (n), CHAR (1) für Boolean VARCHAR (n)String variabler Länge, max. n Zeichen übliche Zeichenketten, Maximallänge typ. beschränkt Aussprache: „vare-care“, „var car“ „var char“ DATETIMEDatum + Uhrzeit, bei Oracle: DATE Anmerkung: Format unterschiedlich, einstellbar DECIMAL (p,s)Festkommazahl (exakt), z.B. bei Geld, Währung DECIMAL (10,2), Oracle: NUMBER FLOAT (l)Fließkommazahl, eher selten bei Datenbanken INTganze Zahl, typ. 32 Bit, Oracle: INTEGER Zusätzlich je nach System Datentypen für größere Objekte (Texte, Bilder,...) TEXT,IMAGE (Sybase), MEMO (Access), BLOB/CLOB (Oracle, mysql) mit spezifischen Einschränkungen (z.B. kein Index,...)

24 IS: Datenbanken, © Till Hänisch 2000 Constraints PRIMARY KEY CREATE TABLE Person ( name VARCHAR (100) NOT NULL, vorname VARCHAR (40) NOT NULL, PersonAlter INTEGER NULL, PRIMARY KEY (name, vorname) ); Besserer Stil (constraints sollten benannt werden): CREATE TABLE Person ( name VARCHAR (100) NOT NULL, vorname VARCHAR (40) NOT NULL, PersonAlter INTEGER NULL, CONSTRAINT pk_person PRIMARY KEY (name, vorname) ); Da Entities und Relationships auf Relationen abgebildet werden, sind Beziehungen (Relationships) nicht mehr direkt erkennbar !! Um diese zu definieren (und insb. nur gültige Beziehungen zuzulassen, können FOREIGN KEY Constraints verwendet werden. FKs verweisen auf den PK einer anderen Relation.

25 IS: Datenbanken, © Till Hänisch 2000 FOREIGN Key constraints CREATE TABLE telefon ( nummer VARCHAR (20) NOT NULL, art CHAR (1) NOT NULL, name VARCHAR (100) NOT NULL, vorname VARCHAR (40) NOT NULL, CONSTRAINT fk_telefon_person FOREIGN KEY (name, vorname) REFERENCES person (name, vorname) ); ^ Bei nicht zusammengesetzten PKs ist einfachere Schreibweise möglich: CREATE TABLE Telefon ( Nummer VARCHAR(30) NOT NULL, Art CHAR(1) NOT NULL, Person INTEGER CONSTRAINT fk_telefon_person REFERENCES Person(ID) );

26 IS: Datenbanken, © Till Hänisch 2000 andere Constraints UNIQUEWerte der entsprechenden Columns müssen eindeutig sein (PRIMARY KEY impliziert UNIQUE) Eindeutigkeit von Candidate Keys, z.B. Person (ID) U_Person UNIQUE (name, vorname) DEFAULTStandardwert, häufig durch systemspezifische Funktionen wie User,..., z.B. Protokollierung CREATE TABLE Log( action INTEGER NOT NULL, who VARCHAR(100) DEFAULT USER); INSERT INTO Log(action) VALUES(42); CHECKBedingung für ein Attribut z.B. bei Person ( PersonAlter INT NOT NULL CHECK (alter > 18) etwa bei CHAR(1) als Boolean-Ersatz flag CHAR (1) NOT NULL CHECK (flag IN (’Y’, ’N’)) Bei „modernen“ SQL Dialekten auch Subqueries zulässig, z.B. Preis DECIMAL (10,2) CHECK (preis >= (SELECT stmt.))

27 IS: Datenbanken, © Till Hänisch 2000 Zugriffskontrolle Jeder Benutzer hat volle Verfügungsgewalt (Lesen, Schreiben, Ändern,...) über die von ihm erzeugten Objekte, andere Benutzer haben keinen Zugriff Benutzer kann Rechte an seinen Objekten für andere freigeben (und wieder sperren) GRANT/REVOKE Privileg {,Privileg} ON objekt TO user {,user} spezieller "Benutzer" PUBLIC steht für alle Benutzer Privileg = SELECT,INSERT,UPDATE,DELETE z.B. GRANT SELECT ON emp TO PUBLIC; Zugriff auf Objekte anderer Benutzer erfolgt durch Qualifizierung mit dem Benutzernamen, z.B. Tabelle "geheim" des Benutzers "max" SELECT * FROM max.geheim;

28 IS: Datenbanken, © Till Hänisch 2000 Views View = „virtuelle“, d.h. abgeleitete Relation Aus einer oder mehreren Relationen wird durch Query eine neue „virtuelle“ erzeugt: CREATE TABLE name SELECT...physikalische Relation CREATE VIEW name AS SELECT...virtuelle Relation Wenn sich Tupel der Basisrelation(en) ändern, dann ändert sich automatisch auch der Inhalt des Views. Anmerkung: View-Relationen existieren physikalisch nur als Definition, die Tupel werden bei jedem Zugriff berechnet.  Performance View -> Abkürzung (ähnlich Makro) Wozu? Vorformulierung von (häufig benötigten, komplexen) Anfragen z.B. Gehalt der Angestellten CREATE VIEW Gehalt AS SELECT sal+ISNULL(comm,0) AS Total FROM emp; (Sybase) CREATE VIEW Gehalt AS SELECT sal+NVL(comm,0) AS Total FROM emp; (Oracle) Abstraktion von Details (NULL,…), Definition von Business Rules (Gehalt = sal+comm) an einer Stelle

29 IS: Datenbanken, © Till Hänisch 2000 Views contd. Denormalisierung, z.B. emp,dept CREATE VIEW Angest AS SELECT e.empno,e.ename, d.deptno,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno; Verschiedene Sichten auf Daten (Datenschutz, Vertraulichkeit, Übersicht,...) z.B. Tabelle emp enthält Gehalt, dies darf jedoch nur für Personalabteilung sichtbar sein. Sekretariate benötigen aber Liste der Mitarbeiter. Lösung ? Entweder zusätzliche (redundante) Tabelle, die nur die zugänglichen Informationen enthält, oder CREATE VIEW emp_base AS SELECT ename,empno,deptno,job FROM emp; (vertikaler Ausschnitt) oder: Sekretariat soll vollst. emp-Tabelle, aber nur für die eigene Abteilung sehen (Die Funktion USER liefert unter Sybase den Namen des aktuellen Users zurück) CREATE TABLE userdept (name varchar(20), deptno INTEGER); INSERT INTO userdept VALUES('ba',30); CREATE VIEW myemp AS SELECT * FROM emp WHERE deptno = ANY (SELECT deptno FROM userdept WHERE name=USER) (horizontaler Ausschnitt)

30 IS: Datenbanken, © Till Hänisch 2000 Views Zusammenfassung Views sind sehr mächtiges Konzept teilweise Probleme bei Implementierung Performance, Einschränkungen INSERT,UPDATE,DELETE mit Einschränkungen auch auf Views (typ. eine Basisrelation, Query enthält keine Expressions, Aggregate,...) WITH CHECK Option ORACLE Instead of Trigger erlauben weitergehenden Einsatz von Views mysql unterstützt keine Views

31 IS: Datenbanken, © Till Hänisch 2000 Open ends Indices Schneller Zugriff auf ausgewählte Datensätze (insb. bei Joins) Wie "findet" das DBMS einen Datensatz ? (z.B. deptno=40) sequentielles Durchlaufen aller Datensätze (full table scan) einfach, "alle" Bedingungen, Funktionen möglich, bei großen Tabellen langsam, Dauer steigt linear mit der Zahl der Zeilen Verwendung eines Index (analog Buch) geeignete, üblicherweise sortierte Speicherung der verschiedenen Einträge (typ. B* Baum, Hash) Schnell (Zugriffsdauer etwa unabhängig von der Zahl der Datensätze, etwa linear mit der Zahl der Treffer) Nur bestimmte Funktionen möglich, nicht etwa LIKE '%xx',... Overhead bei DML (INSERT,UPDATE,...) CREATE [UNIQUE] INDEX name ON table(Feld1,Feld2,...); DROP INDEX name;

32 IS: Datenbanken, © Till Hänisch 2000 Open ends contd. Trigger Für best. Ereignisse (INSERT,UPDATE,...) kann zu einer Tabelle Code hinterlegt werden, der beim Eintreffen ausgeführt wird Darstellung von Business Rules, Konsistenzbedingungen, Protokollierung,... Physikalisches Datenmodell Bisher: logisches Datenmodell: Relationen jetzt: Relationale Datenbank: SQL Auswahl der Datentypen Abbildung von Relationships ggf. Denormalisierung, Einführung von Views,... Abbildung von Business Rules (Constraints, Views, Trigger, stored procedures,...) ( ) Indices physikalische Speicherung (Verteilung, Blockgrößen,...)...


Herunterladen ppt "IS: Datenbanken, © Till Hänisch 2000 SQL Structured Query Language."

Ähnliche Präsentationen


Google-Anzeigen