Relationele databases: Fysiek databaseontwerp en SQL

Slides:



Advertisements
Verwante presentaties
SQL deel 2: datamodel ontwerp
Advertisements

Databases en databasesystemen
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Relationele databases en
Databases Informatica Ga verder met een muisklik. SQL FCO DBMS NE FA
Ronde (Sport & Spel) Quiz Night !
MySQL-acties Klassikaal: Wijnen.sql. 1.Toon alle wijnen die er zijn. Toon de naam, kleur en prijs. SELECT `naam`,`kleur`,`prijs` FROM `wijnen`
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Van Nul naar Drie Normaliseren.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Normaliseren Datamodellering 2006.
<Mdl01 hoorcollege 1>
LauwersCollege Buitenpost Informatica
© GfK 2012 | Title of presentation | DD. Month
LauwersCollege Buitenpost Informatica
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Vorige week: Referentiele integriteit
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
Bewegen Hoofdstuk 3 Beweging Ing. J. van de Worp.
Databases I Relationeel Model Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases en databasesystemen
Workshop PHP Een productencatalogus Met database.
Datamodellen en databasemodellen
1 Controleplan 2005 Raadgevend comité Hotel President – donderdag 21 april 2005.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
De financiële functie: Integrale bedrijfsanalyse©
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
ZijActief Koningslust
LauwersCollege Buitenpost Informatica
7 Databases. SAMENGESTELDE VOORWAARDEN 1 Wat is het adres van Odile Goossens? SELECT adres, woonplaats FROM leden WHERE naam = ‘Goossens’ AND voornaam.
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
7 Databases. STRUCTURED QUERY LANGUAGE Bij het relationele model hoort een programmeertaal waarmee de database benaderd kan worden. In de praktijk wordt.
1 XSLT processing & control Datamodellering 2006.
Vakgroep Telecommunicatie en Informatieverwerking 1 Relationele databases: Het relationeel databasemodel Hoofdstuk 4 Database, Document and Content Management.
24/04/2015IT-Assurance1 IT-Assurance deeltijd 4. Inleiding SQL Introductie in de basisfuncties Bijbehorend lesmateriaal: -AIV-boek van Derksen en Crins.
Overzicht informatie- vergaring conceptueel ontwerp logisch ontwerp
Hoofdstuk 11 Databasemanagementsystem. hoofdstuk 112 STROKENDIAGRAMMEN llnrvoornaamtussenvachternaamstraathuisnummerpostcodeplaatstelefoongeslachtgebdatumklas.
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 3 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 2 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 3 BIMAIV03 Les B3 BIMAIV03 Les B3. Opdracht 1 Van een artikel mogen maximaal 300 stuks verkocht worden. Verschillende klanten bestellen een aantal.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Week 6 BIMAIV03 les B1. DML en DDL ata D anipulation M anguage L ata D efinition D anguage L.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 1 BIMAIV03 Les B2 BIMAIV03 Les B2. Uit het voorgaande... CREATE TABLE... Opdracht om een nieuwe tabel binnen de database te creëren. Aandachtspunten.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
DBS22 - Recap PL/SQL Wilrik R1_4.44
SQL Cursus deel
LauwersCollege Buitenpost Informatica
SQL Les February 2019.
SQL Les 3 17 February 2019.
SQL Les 3 23 February 2019.
SQL Les 7 24 February 2019.
SQL Les 1 5 April 2019.
SQL Les 6 14 April 2019.
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
SQL Les May 2019.
Databases SQL.
Transcript van de presentatie:

Relationele databases: Fysiek databaseontwerp en SQL Database, Document and Content Management Relationele databases: Fysiek databaseontwerp en SQL Hoofdstuk 6

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

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

Fysieke ontwerp van databases EER-diagram logisch relationeel databaseontwerp relationeel databaseschema gedragspecificaties reverse engineering fysiek relationeel databaseontwerp DDL-scripts cataloog extern te implementeren gedragspecificaties

Fysieke ontwerp van databases DDL-script ‘forward engineering’ ‘reverse engineering’

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

Praktijk: SQL-dialecten DDL DML SQL/PSM Praktijk: SQL-dialecten SQL in MSAccess SQL-99 SQL in Oracle SQL in SQLServer

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’

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

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]

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 -32767 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

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);

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)][,…]) )

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

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)

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’

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]

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

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, 16000000) 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)

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 = 20000000 WHERE S_ID = ‘S01’ UPDATE Schilderij SET Waarde = Waarde * 1.01

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

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]

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

Verwerking van DML-instructies Overzicht DML-instructies data DBMS gebruiker of toepassingsprogramma SQL-validatie algebraïsche expressie SQL-optimalisatie queryplan SQL-uitvoering resultaat

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

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})

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})

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})

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?

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.

Fysieke ontwerp van databases SQL Datadefinitietaal Overzicht Fysieke ontwerp van databases SQL Datadefinitietaal Datamanipulatietaal Verwerking van SQL-instructies door een dbms “Query-by-Example”

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 >20000000 Voornaam Geboren P. Gestorven Plaats Land A_ID