Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdGuido Sanders Laatst gewijzigd meer dan 10 jaar geleden
1
Relationele databases: Fysiek databaseontwerp en SQL
Database, Document and Content Management Relationele databases: Fysiek databaseontwerp en SQL Hoofdstuk 6
2
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
3
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
4
Fysieke ontwerp van databases
Overzicht informatie- vergaring domeinanalyse functionele analyse behoefteanalyse conceptueel ontwerp conceptueel model (bijvoorbeeld EER-diagram) functionele beschrijving databasemodel- onafhankelijk logisch ontwerp dbms- onafhankelijk logisch databaseschema (bijvoorbeeld relationeel) gedragspecificaties fysieke ontwerp DDL-scripts implementatie van gedrag
5
Fysieke ontwerp van databases
EER-diagram logisch relationeel databaseontwerp relationeel databaseschema gedragspecificaties reverse engineering fysiek relationeel databaseontwerp DDL-scripts cataloog extern te implementeren gedragspecificaties
6
Fysieke ontwerp van databases
DDL-script ‘forward engineering’ ‘reverse engineering’
7
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
8
Praktijk: SQL-dialecten
DDL DML SQL/PSM Praktijk: SQL-dialecten SQL in MSAccess SQL-99 SQL in Oracle SQL in SQLServer
9
Gereserveerde woorden
SQL BNF-notatie Identificatoren Gereserveerde woorden notatie betekenis x y x wordt gevolgd door y x | y x of y (keuze) [ x ] x of ledig (x is optioneel) { x } x moet voorkomen (x is vereist) (…) eindig aantal keer herhalen van wat er tussen de haken staat Voorbeeld: a[b]{c|d}([*e…]) ‘ac’, ‘abd’, ‘ac*e’ en ‘abc*e*e*e*e’
10
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
11
Databases Domeinen Datadefinitietaal
Aanmaken CREATE SCHEMA naam [AUTHORIZATION maker] Verwijderen DROP SCHEMA naam [RESTRICT|CASCADE] Domeinen Aanmaken CREATE DOMAIN naam [AS] datatype [DEFAULT defaultwaarde] [CHECK (logische_expressie)] Verwijderen DROP DOMAIN naam [RESTRICT|CASCADE]
12
Standaard atomaire datatypes van SQL
Datadefinitietaal Standaard atomaire datatypes van SQL datatype beschrijving boolean waarheidswaarde uit driewaardige logica (true, false of null) char[(n)] karaktersequentie met vaste lengte n varchar[(n)] karaktersequentie met variabele lengte die maximaal n is numeric[(p[,s])] exact getal met p cijfers, waarvan s na de komma decimal[(p[,s])] idem als numeric[(p[,s])] integer grote gehele getallen smallint kleine gehele getallen (tussen en 32767) float[(p)] reëel getal in wetenschappelijke notatie van de vorm mEe; het getal wordt berekend uit m.10e; p is de precisie van m; voorbeelden zijn -5E9 en 3.2E-3 real reëel getal met enkele precisie double precision reëel getal met dubbele precisie date datum met jaar (year), maand (month) en dag (day) velden time tijd met uur (hour), minuut (minute) en seconde (second) velden timestamp combinatie van datum en tijd interval tijdinterval
13
Datadefinitietaal Voorbeelden
CREATE DOMAIN geslacht AS char DEFAULT ‘M’ CHECK (VALUE IN (‘M’, ‘V’)); CREATE DOMAIN hobby AS varchar CHECK (VALUE IN (SELECT Naam FROM Hobbies)); CREATE DOMAIN jaar AS integer CHECK (VALUE BETWEEN 0 AND 2100);
14
Relaties Datadefinitietaal
Aanmaken CREATE TABLE naam ( ({kolomnaam datatype [NOT NULL][UNIQUE] [DEFAULT defaultwaarde][CHECK(logische_expressie)]}[,…]) {PRIMARY KEY(lijst_van_kolomnamen)[,]} ([UNIQUE(lijst_van_kolomnamen)][,…]) ([FOREIGN KEY(lijst_van_kolomnamen) REFERENCES tabelnaam [ON DELETE actie][ON UPDATE actie]][,…]) ([CHECK(logische_expressie)][,…]) )
15
Datadefinitietaal Acties bij vreemde sleutels: Voor het verwijderen (ON DELETE) of aanpassen (ON UPDATE) van corresponderende primaire sleutelwaarden NO ACTION RESTRICT CASCADE SET NULL SET DEFAULT
16
Datadefinitietaal Voorbeeld CREATE TABLE Schilderij( S_ID char(3), Naam varchar NOT NULL, Artiest char(3), Periode jaar, Waarde real CHECK( VALUE > 0 ), Eigenaar varchar, PRIMARY KEY(S_ID), FOREIGN KEY(Artiest) REFERENCES Artiest, FOREIGN KEY(Eigenaar) REFERENCES Eigenaar)
17
Datadefinitietaal Aanpassen ALTER TABLE naam {ADD [COLUMN] kolomnaam datatype [NOT NULL][UNIQUE] [DEFAULT defaultwaarde][CHECK(logische_expressie)] | DROP [COLUMN] kolomnaam [RESTRICT|CASCADE] | ADD [CONSTRAINT [restrictienaam]] restrictieoptie | DROP CONSTRAINT restrictienaam [RESTRICT|CASCADE] | ALTER [COLUMN] kolomnaam SET DEFAULT defaultoptie | ALTER [COLUMN] kolomnaam DROP DEFAULT} Voorbeelden ALTER TABLE Schilderij ADD COLUMN Stijl varchar DEFAULT ‘Klassiek’ CHECK(VALUE IN (‘Klassiek’, ‘Modern’, ‘Eigentijds’)) ALTER TABLE Schilderij ALTER COLUMN Stijl SET DEFAULT ‘Eigentijds’
18
Indexen Views Datadefinitietaal
Aanmaken CREATE [UNIQUE] INDEX indexnaam ON tabelnaam ((kolomnaam [ASC|DESC][,…])) Verwijderen DROP INDEX indexnaam Views Aanmaken CREATE VIEW viewnaam [((nieuwe_kolomnaam [,…]))] AS definiërende_expressie [WITH CHECK OPTION] Verwijderen DROP VIEW viewnaam [RESTRICT|CASCADE]
19
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
20
Instructies voor het toevoegen, aanpassen en verwijderen van data
Datamanipulatietaal Instructies voor het toevoegen, aanpassen en verwijderen van data Toevoegen van data Toevoeging van een tuple met expliciete opgave van de attribuutwaarden INSERT INTO naam [(kolomlijst)] VALUES (Lijst_met_attribuutwaarden) Voorbeeld INSERT INTO Schilderij (S_ID, Naam, Periode, Waarde) VALUES(‘S01’, ‘Vissershuis’, 1882, ) Toevoeging van tuples die afkomstig zijn van een andere relatie INSERT INTO naam [(kolomlijst)] (select_instructie) Voorbeeld INSERT INTO Schilderij (SELECT * FROM oud_schilderij WHERE Periode < 1800)
21
Datamanipulatietaal Toevoeging van data die afkomstig zijn uit een databestand LOAD FROM bestand [DELIMITER karakter] INSERT INTO naam [(kolomlijst)] Voorbeeld LOAD FROM ‘backup.csv’ DELIMITER ‘,’ INSERT INTO Schilderij Aanpassen van data UPDATE naam SET ({kolomnaam=waarde}[,…]) [WHERE zoekconditie] Voorbeelden UPDATE Schilderij SET Waarde = WHERE S_ID = ‘S01’ UPDATE Schilderij SET Waarde = Waarde * 1.01
22
Verwijderen van data DELETE FROM naam [WHERE zoekconditie] Voorbeelden
Datamanipulatietaal Verwijderen van data DELETE FROM naam [WHERE zoekconditie] Voorbeelden DELETE FROM Schilderij WHERE S_ID = ‘S01’ DELETE FROM Schilderij WHERE Eigenaar = ‘Boymans’ DELETE FROM Schilderij
23
Datamanipulatietaal Instructies voor het opzoeken van data SELECT [ALL|DISTINCT]{*|(kolomexpressie [AS nieuwe_naam][,…])} FROM ({naam}[alias][,…]) [WHERE zoekconditie] [{GROUP BY kolomlijst}[HAVING zoekconditie]] [ORDER BY kolomlijst]
24
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
25
Verwerking van DML-instructies
Overzicht DML-instructies data DBMS gebruiker of toepassingsprogramma SQL-validatie algebraïsche expressie SQL-optimalisatie queryplan SQL-uitvoering resultaat
26
Verwerking van DML-instructies
Validatie en omzetting van een DML-instructie Vertalen Toevoeg- en verwijderinstructies INSERT INTO R1 VALUES (v1,v2,…,vn) unie: (R1 UNION R2) waarbij R2 bestaat uit één tuple dat opgebouwd wordt uit v1,v2,…,vn (R2) (R1 UNION R2) DELETE FROM R WHERE c verschil: R MINUS (R WHERE c) Vertaling DML-instructie
27
Verwerking van DML-instructies
Opzoekinstructies Stap Vertaling FROM R1, R2,…,Rn Cartesisch product: Expressie1 = (R1 TIMES R2 TIMES … TIMES Rn) WHERE c1 GROUP BY A1, A2,…,Am HAVING c2 SELECT A1, A2,…,Ap selectie: Expressie2 = (Expressie1 WHERE c1) groeperen: (op basis van gelijke waarden voor A1, A2,…,An) Expressie3 = (Expressie2 GROUP (A1, A2,…,An)) Expressie4 = (Expressie3 WHERE c2) projectie: Expressie5 = (Expressie4 {A1, A2,…,Ap})
28
Verwerking van DML-instructies
Voorbeeld SELECT Schilderij.Naam, Artiest.Naam, Artiest.Voornaam FROM Schilderij, Artiest WHERE Schilderij.Artiest=Artiest.A_ID AND Schilderij.Periode BETWEEN 1800 AND 1899 Deze query wordt volgens de gegeven stapsgewijze vertaling omgezet naar de expressie: (((Schilderij TIMES Artiest) WHERE Schilderij.Artiest=Artiest.A_ID AND Schilderij.Periode BETWEEN 1800 AND 1899) {Schilderij.Naam, Artiest.Naam, Artiest.Voornaam})
29
Verwerking van DML-instructies
Optimalisatie Queryplan voorbeeld: (((Schilderij TIMES ARTIEST) WHERE Schilderij.Artiest=Artiest.A_ID AND Schilderij.Periode BETWEEN 1800 AND 1899) {Schilderij.Naam, Artiest.Naam, Artiest.Voornaam}) versus ((((Schilderij WHERE Periode BETWEEN 1800 AND 1899) TIMES ARTIEST) WHERE Schilderij.Artiest=Artiest.A_ID) {Schilderij.Naam, Artiest.Naam, Artiest.Voornaam})
30
Verwerking van DML-instructies
Hints voor optimalisatie Het is belangrijk om de query goed te begrijpen en te weten wat de query verondersteld is te doen. Desnoods moet de query voor de analyse worden opgesplitst. Het is belangrijk om de relaties te kennen waarop de query inwerkt. Welke attributen zijn er? Welke datatypes worden gebruikt? Hoeveel tuples zijn er? Stel de query in vraag: Zijn alle gevraagde attributen nodig? Zijn er geen onnodige voorwaarden in de ‘WHERE’ en ‘HAVING’ gedeelten? Zijn er geen onnodige relaties opgenomen in het ‘FROM’ gedeelte? Moeten de resultaten wel worden gesorteerd?
31
Verwerking van DML-instructies
Kan het ‘WHERE’-gedeelte optimaal gebruik maken van de beschikbare indexen? Bij sommige condities zoals ‘IS NULL’, ‘OR’, ‘<>’, ‘NOT’, ‘NOT IN’, ‘NOT EXISTS’, ‘NOT LIKE’ en ‘LIKE ‘%vrouw’’ kunnen indexen soms niet worden gebruikt. Herschrijven van de query kan performantiewinst opleveren. Tracht te achterhalen hoe belangrijk de query is. Hoe dikwijls wordt de query uitgevoerd? Als de query gewoonlijk heel veel resultaten teruggeeft, kan het nuttig zijn om te overwegen om het toepassing te herontwerpen. Analyseer het queryplan. Als blijkt dat bepaalde indexen niet worden gebruikt in het queryplan, kan het nuttig zijn om het gebruik ervan af te dwingen. Sommige systemen laten het (de DBA) toe om expliciet bij een query op te geven dat een index moet worden gebruikt. Een andere mogelijkheid is om de query-instructie te herschrijven.
32
Fysieke ontwerp van databases SQL Datadefinitietaal
Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”
33
Specificeren wat wordt gezocht, niet hoe het moet worden gezocht.
“Query-By-Example” Grafische templates Specificeren wat wordt gezocht, niet hoe het moet worden gezocht. Tabel Schilderij primaire sleutel = {S_ID} vreemde sleutels = {Artiest} en {Eigenaar} Tabel Artiest primaire sleutel = {A_ID} Tabel Eigenaar primaire sleutel = {Naam} S_ID Naam Artiest Periode Waarde Eigenaar: _ART > Voornaam Geboren P. Gestorven Plaats Land A_ID
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.