ANALYSE 3 INFANL01-3 WEEK 7 01-02-2014 CMI Informatica.

Slides:



Advertisements
Verwante presentaties
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Advertisements

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Relationele databases en
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
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 - -
Het selecteren van data uit meerdere gekoppelde tabellen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Relationele Databases
Databases.
<Mdl01 hoorcollege 1>
Base: bewerkingen 2 soorten - Oplopend- Aflopend.
LauwersCollege Buitenpost Informatica
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.
Relationele databases: Fysiek databaseontwerp en SQL
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Normalisatie Relationeel databaseontwerp:
Vorige week: Referentiele integriteit
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
Databases I Relationeel Model Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Workshop PHP Een productencatalogus Met database.
Databases.
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.
LauwersCollege Buitenpost Informatica
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Join Indices … as a tool for Spatial Datamining. Inhoud Inleiding Spatial Relations (Spatial) Join Index Implementatie Conclusie.
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.
Hoofdstuk 11 Databasemanagementsystem. hoofdstuk 112 STROKENDIAGRAMMEN llnrvoornaamtussenvachternaamstraathuisnummerpostcodeplaatstelefoongeslachtgebdatumklas.
2 August SQL Les August Agenda Herhaling Herhaling Cursors Cursors MS SQL Server and MS Excel MS SQL Server and MS Excel Oefeningen.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
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.
BIMAIV03 Les A1 BIMAIV03 Les A1 Databases. De gegevens in een database vormen de grondstof voor informatie De informatie wordt opgevraagd in de taal met.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 2 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 ▸
1 KPN Mobiel – Introductie Repository Object Browser & Designer 10 Designer 10g & Repository Object Browser Maandag 28 februari 2005 Lucas Jellema (AMIS)
EERDER….. Tabellen rij (record, tuple, occurence) kolom (attribuut, veld) tabel (relatie) tabelstructuur : patient(PAT#,PNAAM,LEEFTIJD,GESLACHT,ARTS)
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
SQL Performance Analyzer Inschatten performance impact van wijzigingen Bram van der Vos
Databases.
– Software development fundamentals
SQL Cursus deel
LauwersCollege Buitenpost Informatica
Moving objects in a geo-DBMS
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 en Datanormalisatie
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
– Software development fundamentals
SQL Les May 2019.
Transcript van de presentatie:

ANALYSE 3 INFANL01-3 WEEK CMI Informatica

ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Autorisatie ▸ Query optimalisatie (indexes, explain, explain extended) ▸ Optimaliseren van instructies

VORIGE LES

Subqueries Inleiding Single-row Muliple-row (vs JOINs) Correlated

Subqueries (single-row)

Subqueries (multiple-row) Multiple-row subqueries zijn gebaseerd op de vergelijkingsoperatoren (IN, ANY, EXISTS, ALL) Het resultaat van de subquery is meer dan een rij Afhankelijk van de operator zijn er verschillende resultaten bij NULL

Voorbeeld: SELECT … FROM … WHERE IN IN : WHERE IN IN wordt gebruikt in WHERE (rij-voorwaarde) om de rijen te selecteren met een attribuut-waarde die voorkomt in de verzameling attribuut waarden. kan een letterlijk lijstje zijn (1,2,3) of het resultaat van een SELECT SELECT * FROM spelers WHERE spelersnr IN (1,2,3); SELECT naam AS aanvoerder FROM spelers WHERE spelersnr IN (SELECT spelersnr FROM teams);

Subqueries (correlated) Correlated subquery is een subquery die waarden gebruikt van de outer-query. De subquery wordt eenmaal geëvalueerd voor elk rij van de outer-query.

VIEWs Wat is een VIEW?  een view is een ‘virtuele’ tabel,  die is gebaseerd op ‘echte’ basistabellen (dwz tabellen die gegevens bevatten) Waarom VIEWs?  VIEWs kunnen worden gebruikt om gegevens uit verschillende tabellen te halen.  Gebruikers kunnen dezelfde data op verschillende manieren zien.  VIEWs bieden groepen gebruikers toegang tot gegevens op basis van hun permissies of criteria

Hoe definieer je een VIEW? (voorbeelden) CREATE VIEW wedstrijdspelers AS SELECT * FROM spelers WHERE bondsnr IS NOT NULL; CREATE VIEW aanvoerders AS SELECT naam, teamnr, divisie FROM spelers,teams WHERE spelers.spelersnr=teams.spelersnr;

VIEWs VIEWs zijn altijd actueel wijzigingen in onderliggende tabellen zijn direct in een VIEW terug te zien Sommige VIEWs zijn wijzigbaar. Dat wil zeggen, je kunt ze gebruiken in queries als UPDATE, DELETE Voorwaarde: er moet een één-op-één relatie tussen de rijen in het VIEW en de rijen in de onderliggende tabel. Heeft een view een één-op-één relatie als deze constructies gebruikt? Aggregate functions (SUM(), MIN(), MAX(), COUNT(), enz.) DISTINCT GROUP BY HAVING Enz.

Transactie Een transactie bestaat uit een aantal samenhangende wijzigingen in een database, waarbij ervoor gezorgd wordt dat deze wijzigingen ofwel allemaal plaatsvinden, ofwel geen van alle. Een transactie bestaat uit de volgende instructies: START TRANSACTION: Begint een transactie COMMIT: representeert de tijdspunt waar de het resultaat van de transactie opgeslagen kan worden en het eind van de transactie ROLLBACK: verwijdert alle verandering aan de data tot een bepaalde tijdspunt of tot het begin van de transactie SAVEPOINT: een markeringstijdspunt binnen de transactie

Voorbeeld Welke data worden opgeslagen in de tabel myTable na deze transaction? 1. START TRANSACTION; 2. INSERT INTO myTable(col1, col2) VALUES(10, 10); 3. SAVEPOINT my_savepoint_1; 4. INSERT INTO myTable(col1, col2) VALUES(20, 20); 5. SAVEPOINT my_savepoint_2; 6. INSERT INTO myTable(col1, col2) VALUES(30, 30); 7. ROLLBACK TO SAVEPOINT my_savepoint_1; 8. INSERT INTO myTable(col1, col2) VALUES(40, 40); 9. COMMIT;

AUTORISATIE

Privileges op databases Data beveiliging is essentieel voor organisaties Er zijn twee soorten beveiligingen voor databases Systeem beveiliging Aanmaken van users, wachtwoorden enz. Data beveiliging Welke operaties mag een user doen op een bepaalde tabel of een view Implementatie kan verschillen per soort database

Rollen vs Users (systeem beveiliging) ▸ Database systemen geven de mogelijkheid om users aan te maken ▸ CREATE USER username ▸ RENAME USER username TO username2 ▸ DROP USER username ▸ Postgres en Oracle gebruiken het concept ROLE ▸ Een ROLE kan een gebruiker zijn maar ook een groep van gebruikers

Privileges (data beveiliging) Rechten toekennen: GRANT [type van permissie ] ON [database naam].[tabel name] FROM [gebruikersnaam] Rechten verwijderen GRANT [type van permissie ] ON [database naam].[tabel name] FROM [gebruikersnaam] Typen van permissies: CREATE: geeft de gebruiker aanmaak rechten voor tabellen of DROP: geeft de gebruiker verwijder rechten voor tabellen of databases DELETE: geeft de gebruiker verwijder rechten voor rijen INSERT: geeft de gebruiker verwijder rechten voor rijen SELECT: geeft de gebruiker leesrechten op tabellen UPDATE: geeft de gebruiker wijzigrechten op rijden GRANT OPTION: gebruiker kan andere gebruikers aanmaken en verwijderen ALL PRIVILEGES

Veiligheid - Bad practices ▸ Slecht gebruik om maar 1 user te gebruiken voor alles ▸ De ware identiteit is vaak niet terug te herleiden op de persoon ▸ (bv root -> wie is dat?) ▸ Wie heeft mijn tabellen verwijderd!?!?! ▸ Vaak zijn database-users hyper-privileged ▸ Gebrek aan of luie DB-ADMINS / configuratie managers ▸ erg lastig om permissies langdurig te beheren (wanneer mag iemand minder?) ▸ 3 rd party code is ‘eigenaar’ (maker) van het schema/db

Maak je DB ‘nooit’ publiekelijk beschikbaar ▸ Databases horen niet publiekelijk bereikbaar te zijn ▸ Best/better practice ▸ root account alleen vanaf ▸ Als het moet, dan read-only user voor public access ▸ Veel diagnostische tools beschikbaar (bv SQLMAP)

SEQUENCES

In standaard SQL Een sequence:  databaseobject  reeks nummers  genereren Let op!  veel varianten MySQL gebruikt de attribute AUTO_INCREMENT ipv. SEQUENCES CREATE TABEL table( id INT AUTO_INCREMENT, naam VARCHAR(10) NOT NULL)

SEQUENCES Een alternatief voor de SEQUENCE is het concept van de IDENTITY.

SEQUENCES Vuistregels:  Gebruik voor iedere tabel een eigen sequence  Gebruik per tabel maximaal 1 sequence  Sequence = PK = NOT NULL

INDEX

Inleiding Stel data van de tabellen customers en orders beschikken over veel rijen We willen het resultaat van deze query sneller maken SELECT * FROM customers, orders WHERE customers.customerNumber = orders.customerNumber; Wat zijn de mogelijkheden om het resultaat sneller te krijgen?

Index ▸ Een index wordt gebruikt in twee gevallen: ▸ Om de performance van een SELECT query te verbeteren ▸ Unieke waarden te waarborgen ▸ Een index bestaat uit waarden van kolommen en een verwijs naar de rij in de tabel ▸ Een index is logisch en fysiek onafhankelijk van een tabel ▸ Ze kunnen aangemaakt en verwijdert worden zonder een effect te hebben op de data ▸ Een index wordt op een kolom of meerdere kolommen aangemaakt

Index typen Uniek Databases maken automatisch een index aan voor kolommen die PRIMARY KEY of UNIQUE constraint zijn Niet uniek Indexes kunnen manueel aangemaakt worden Je kan bijvoorbeeld een index aanmaken op FOREIGN KEY kolom om het zoeken naar rijen te verbeteren Bij een composite index is de volgorde van de kolommen van belang. CREATE INDEX indexnaam ON tabelnaam(col1,col2,…)

Gebruik van indexes ▸ Wanneer toe te passen ▸ Een of meerdere kolommen worden vaak gebruikt ▸ Bijvoorbeeld bij WHERE of JOIN ▸ Andere redenen? ▸ Nadelen van indexes ▸ Als je verschillende DML operaties (INSERT,DELETE,UPDATE) toepast, dan wordt je index ook geactualiseerd => performance impact

QUERY OPTIMALISATIE

Optimalisatie factoren Deze factoren spelen in de regel een rol in de uitvoering van je query Snelheid van je hardschrijf Snelheid van je CPU Snelheid van je memory Snelheid van je netwerk Interne implementatie van de gekozen database server Bijvoorbeeld: instelling van je server (config). Default instellingen leveren niet per definitie optimale performance. Implementatie van je database (indexes, permissies, constraints) Enz.

Query evaluatie en uitvoering Hoe gaat de server met queries om? Parsing en vertaling Vertalen van de query naar een interne structuur op basis van een “parse tree” Daarna wordt het vertaald naar relationele algebra expressies Parser checkt de syntax en valideert de relaties, attributen en permissies Evaluatie De zogenaamd “query execution engine” voert alle uitvoeringsplannen uit en levert de resultaten. Elk uitvoeringsplan onderscheidt zich in keuze van de low level operatie Optimalisatie : Welk plan of combinatie van plannen is het snelst

Query evaluatie en uitvoering

EXPLAIN vs EXPLAIN EXTENDED EXPLAIN SELECT * FROM tbl_name Toont hoe de query wordt uitgevoerd door de server. De query optimizer maakt o.a gebruikt van statistische data over de tabellen (bijv. aantal rijen) De query wordt niet daadwerkelijk uitgevoerd. Output verschilt per database server EXPLAIN EXTENDED SELECT * FROM tbl_name… Toont aanvullend de ingeschatte percentage van de rijen die daadwerkelijk worden gefilterd(specifiek voor MySQL)

Analyze ANALYZE TABLE tbl_name ▸ Statistiek over tabellen zoals: ▸ Aantal rijen ▸ Gemiddelde tijd lengte ▸ Statistiek over kolommen zoals ▸ Aantal unieke waarden per kolom ▸ Aantal NULLs per kolom ▸ Er zijn nog meer statistieken die bijgehouden worden dan de bovengenoemde

Oefening Stap 1: actualiseer de statistieken van je tabellen ANALYZE TABLE orderdetails Stap 2: voer deze query uit: EXPLAIN SELECT * FROM orderdetails d INNER JOIN orders o ON d.orderNumber = o.orderNumber INNER JOIN products p ON p.productCode = d.productCode INNER JOIN productlines l ON p.productLine = l.productLine INNER JOIN customers c ON c.customerNumber = o.customerNumber WHERE o.orderNumber = Stap 2: kijk naar de output Stap 3: kijk in de documentatie van je database server naar de interpretatie van de output (bekijk de documentatie van EXPLAIN) Je kan gebruikte indexes verwijderen en de output van je query vergelijken met de vorige

Testen

Database testen ▸ Waarom wil je testen? ▸ Wat kun je testen en hoe? ▸ Constraints zijn belangrijk om de database te ontwerpen, de mogelijkheid te bieden om de semantiek van de data te bepalen en te waarborgen. ▸ Er zijn vier verschillende integriteit regels voor data: Domein integriteit Entiteit integriteit Referentiele integriteit Gebruiker-specifieke integriteit

Domein integriteit ▸ Een domein bepaald de waarde van attributes: ▸ Datatypes en lengte ▸ Null waardes ▸ Toegestane waardes ▸ Standaard waardes CREATE TABLE dbo.Payroll ( ID int PRIMARY KEY, PositionID INT, SalaryType nvarchar(10), Salary decimal(9,2) CHECK (Salary < ) ); Welke waardes kun je bij salary opslaan?

Entiteit integriteit Iedere entiteit moet een attribuut of combinatie van attributen hebben waarmee elk tupel (rij) als uniek en aanwezig te identificeren is. Dat attribuut is de primary key of primaire sleutel.

Referentiele Integriteit ▸ spelernsnr in TEAMS verwijst altijd naar een bestaand spelersnr in SPELERS primary keyforeign key

Referentiele Integriteit ▸ spelernsnr in TEAMS verwijst altijd naar een bestaand ▸ spelersnr in SPELERS, dus moeten gesynchroniseerd ▸ blijven primary keyforeign key

CREATE TABLE teams ( teamnr SMALLINT NOT NULL, spelersnrSMALLINT NOT NULL, divisieCHAR(6) NOT NULL, PRIMARY KEY (teamnr), FOREIGN KEY (spelersnr) REFERENCES spelers (spelersnr) ); Referentiele Integriteit : referenties aangeven bij CREATE

Referentiele Integriteit refererende acties ▸ default (SOLID):  ON UPDATE RESTRICT  ON DELETE RESTRICT (dwz wijzigen/verwijderen van een spelersnr in de SPELERS tabel wordt tegengehouden als spelersnr in TEAMS voorkomt)

Referentiele Integriteit refererende acties ▸ alternatief 1: ON UPDATE CASCADE ON DELETE CASCADE (dwz update/delete van een spelersnr in de SPELERS tabel triggert automatisch een update/delete in TEAMS) ▸ alternatief 2:  ON UPDATE SET NULL  ON DELETE SET NULL

Testverslag Twee soort data gebruiken: Data die voldoet aan de integriteitsregels Data die niet voldoen aan de integriteit regels