Datamodellering en –verwerking 8C020 college 4

Slides:



Advertisements
Verwante presentaties
SQL deel 2: datamodel ontwerp
Advertisements

Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.
Meerdere tabellen: Relaties en Joins
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
Databases Informatica Ga verder met een muisklik. SQL FCO DBMS NE FA
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
Datamodellering en –verwerking 8C020 college 3
HALLO OPLETTEN : Waarom sql DOEN : Introductie opdracht
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 - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Normaliseren Datamodellering 2006.
Databases.
<Mdl01 hoorcollege 1>
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 - -
Normalisatie Relationeel databaseontwerp:
Opleiding Kunstmatige Intelligentie cursus Databases voor AI
Vrij Technisch Instituut - Hasselt
HALLO OPLETTEN : Waarom sql DOEN : Introductie opdracht
Vorige week: Referentiele integriteit
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
Workshop PHP Een productencatalogus Met database.
Statistische functies (aggregaatfuncties)
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
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.
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.
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.
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.
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.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
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.
Databases.
SQL Cursus deel
Informatica-Actief Thema: Databases en informatiemodellering
LauwersCollege Buitenpost Informatica
Databases.
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.
– Software development fundamentals
Databases SQL.
Transcript van de presentatie:

Datamodellering en –verwerking 8C020 college 4

Terugblik college 3 Relationeel Model Extra verhaal: Turing machines, Cellulaire automaten, Game of Life Transformatie van ERM naar Relationeel Model Transformatie van entiteiten en relaties Opdracht Oefening: Zeikenhuis (RM)

Onderwerpen college 4 Normalisatie Querytalen SQL Inleiding Data definitie Data manipulatie Apsecten van SQL Oefeningen

Goed gestructureerd bij het ontwerpen van relaties streef je naar een minimum aan redundantie en de situatie dat gebruikers rijen kunnen toevoegen, veranderen, of wegnemen zonder dat er fouten ontstaan  

Een niet goed gestructureerde relatie WN2 WNID NAAM AFD SALARIS CURSUS DATUM 100 Anna Bruinsma Verkoop 50.000 PR 6-6-94 Word 1-12-94 140 Carla Dik Administratie 41.000 Belastingen 25-8-94 110 Eef Groen Informatiesystemen 49.000 C++ 13-11-94 190 Henk Israël Inkoop 39.500 Logistiek 8-3-94 150 Janny Kramer 45.000 Workflow 11-12-94

Anomalieën anomalie van toevoegen nieuwe werknemer toevoegen een waarde voor beide cursus en wind moet er ingevoerd worden werknemer zonder cursus? anomalie van verwijderen verwijderen gegevens werknemer als werknemer 140 wordt verwijderd zijn we de informatie kwijt dat er op 25-8-94 iemand een cursus heeft afgerond anomalie van wijzigen veranderen van salaris moet in elk van de rijen voor de weknemer gebeuren niet efficient

Normalisatie Probleem WN2 bevat gegevens over twee entiteiten Oplossing Verdeel zo’n relatie in twee relaties: WN1 en WN-CURSUS

Normalisatie WN1 WNID NAAM AFD SALARIS 100 Anna Bruinsma Verkoop 50.000 140 Carla Dik Administratie 41.000 110 Eef Groen Informatiesystemen 49.000 190 Henk Israël Inkoop 39.500 150 Janny Kramer 45.000   WN-CURSUS WNID CURSUS DATUM 100 PR 6-6-94 Word 1-12-94 140 Belastingen 25-8-94 110 C++ 13-11-94 190 Logistiek 8-3-94 150 Workflow 11-12-94

Software Life Cycle/Fasering analyseren Omgevings anlyse, ontwikkelingsplan (kosten en tijd) eisen Eisen, planning en begroting, haalbarheidsanalyse Conceptueel model specificeren Iplementatiemodel, handleidigen, testmodel ontwerpen coderen Code, onderhoudshandeling testen tesrapporten invoeren Installatie, acceptierapport onderhouden Correctief, preventief, modificatief

Querytaal de wijze van verwerken van gegevens met een database hangt af van de eigenschappen van de database de eigenschappen van de taal en het gereedschap voor het verwerken   een querytaal (eigenlijk query- en updatetaal) is een taal voor het specificeren van de definitie en manipulatie van data

Querytaal als interface een querytaal biedt een interface tussen DBMS en gebruiker sommige querymechanismen zijn intuïtief en eenvoudig QBE (Query By Example) sommige querytalen zijn uitgebreider en krachtiger en lijken meer op programmeertalen (''wel wat, niet hoe'') SQL een querytaal heeft een duale rol: definitie manipulatie

SQL SQL (Structured Query Language) is geintroduceerd door IBM, 1979 San Jose Research Laboratory Sequel (voorouder), begin jaren ‘70 SQL is de meest gebruikte querytaal en de de-facto standaard er zijn veel dialecten en varianten van SQL beschikbaar

SQL data-definitie het definiëren van relaties en databases en het veranderen van definities data-manipulatie formuleren van queries toevoegen van gegevens verwijderen van gegevens wijzigen van gegevens

Taal en DBMS een querytaal is nauw verbonden met een DBMS om gegevens te gaan definiëren zijn meestal privileges (autorisatie) nodig SQL (of de SQL-omgeving) biedt faciliteiten voor de toegang tot de gegevens eerst inloggen op het DBMS Interactief gebruik

Definiëren van een database Coderen/implementatie fase van de “life cycle” we gebruiken de volgende opdracht om een database aan te maken met de naam ziekenhuis   CREATE DATABASE ziekenhuis ANSI-standaard gebruikt schema in plaats van database CREATE SCHEMA ziekenhuis

Definiëren van een tabel we beginnen met de volgende uitdrukking als we een tabel willen definiëren met gegevens over patiënten   CREATE TABLE patienten het DBMS weet dan dat er een tabel gaat zijn met gegevens over patiënten

Attributen en domeinen we gebruiken de volgende uitdrukking om vast te leggen dat we een attribuut hebben voor patiëntennummer met als domein alle rijtjes van 5 karakters en dat bovendien een primaire sleutel is  patnr char(5) not null unique de naam van het attribuut het domein van het attribuut integer smallint float real date mag het attribuut null-waarden hebben? moeten de waarden in verschillende records verschillend zijn?

Volledige definitie van een tabel CREATE TABLE patienten ( patnr char(5) not null unique, naam char(20), voornaam char(15), huisarts integer not null, gebdatum date );

Veranderen van definities verwijderen van een database DROP DATABASE ziekenhuis;   verwijderen van een tabel DROP TABLE patienten; veranderen van een tabel ALTER TABLE patienten DROP huisarts; ALTER TABLE patienten ADD aantkind integer;

Onderhouden van privileges SQL biedt commando’s voor het onderhouden van de toegangsrechten   GRANT SELECT .. GRANT INSERT .. GRANT UPDATE .. GRANT DELETE ..

View, index view een imaginaire, niet echt bestaande tabel die door het DBMS wordt afgeleid van bestaande tabellen en net als een gewone tabel is te gebruiken  index een DBMS-mechanisme om snelle toegang te bieden tot gegevens standaard is er bijvoorbeeld een index gebaseerd op de primaire sleutel

Data-manipulatie data-manipulatie is niet mogelijk zonder data-definitie in de praktijk zijn deze activiteiten soms gescheiden (bijvoorbeeld bij verschillende gebruikers)   de doelstelling van data-manipulatie is om gegevens te inspecteren wat is de waarde van ...? veranderen vervang de waarde van ... door ...

Voorbeeld tabel voor patienten patnr naam voornaam huisarts gebdatum 12345 Appels Arno 13 03-05-68 23456 Peren Pom 23-06-70 34567 Storms Pim 14 13-06-36 12346 23-12-45 24564 Janssen Jeff 15 01-07-39 76543 Brandsma Hein 01-11-71  

SELECT FROM eerst specificeren we welke attributen we willen hebben   SELECT patnr, naam dan duiden we aan uit welke tabel de gegevens komen FROM patienten de volledige query ziet er dan als volgt uit FROM patienten;

Voorbeeld de query SELECT patnr, naam FROM patienten; toegepast op   de query SELECT patnr, naam FROM patienten;  toegepast op patnr naam voornaam huisarts gebdatum 12345 Appels Arno 13 03-05-68 23456 Peren Pom 23-06-70 34567 Storms Pim 14 13-06-36 12346 23-12-45 24564 Janssen Jeff 15 01-07-39 76543 Brandsma Hein 01-11-71 patnr naam 12345 Appels 23456 Peren 34567 Storms 12346 24564 Janssen 76543 Brandsma levert op

DISTINCT, * de tabellen in SQL bevatten dubbele rijen dus ook de antwoorden op queries bevatten dubbele waarden met DISTINCT worden dubbele waarden uitgesloten   SELECT DISTINCT naam FROM patienten; * met * worden alle attributen aangeduid SELECT *

WHERE met behulp van een WHERE-uitdrukking kunnen we een voorwaarde vastleggen voor de selectie van rijen uit een tabel   SELECT patnr, naam FROM patienten WHERE huisarts = 13; 1. beschouw stuk voor stuk de rijen uit de tabel van FROM 2. verifieer of de rij voldoet aan de voorwaarde van WHERE 3. geef voor de overgebleven rijen de attributen van SELECT

Voorbeeld SELECT patnr, naam FROM patienten WHERE huisarts = 13; voornaam huisarts gebdatum 12345 Appels Arno 13 03-05-68 23456 Peren Pom 23-06-70 34567 Storms Pim 14 13-06-36 12346 23-12-45 24564 Janssen Jeff 15 01-07-39 76543 Brandsma Hein 01-11-71 resultaat patnr naam 12345 Appels 23456 Peren

AND en OR voorwaarden in de WHERE-regel kunnen gecombineerd worden met AND en OR   SELECT patnr, naam FROM patienten WHERE huisarts = 3 AND gebdatum = '01-01-94'; SELECT patnr, huisarts WHERE gebdatum = '31-12-93' OR gebdatum = '01-01-94';

Opgave 5.1 wat drukt de volgende query uit? SELECT patnr, huisarts   SELECT patnr, huisarts FROM patienten WHERE gebdatum = '31-12-93' AND gebdatum = '01-01-94';

!= het symbool != wordt gebruikt voor de ongelijkheid   SELECT patnr, naam FROM patienten WHERE naam != 'De Groot';

NOT het symbool NOT wordt gebruikt voor de ontkenning SELECT patnr   SELECT patnr FROM patienten WHERE NOT(gebdatum ='31-12-93' OR gebdatum = '01-01-94');

LIKE het symbool LIKE wordt gebruikt voor bijna-gelijk SELECT naam   SELECT naam FROM patienten WHERE naam LIKE 'J%'; of ... WHERE naam LIKE 'J__s';

Opgave 5.2 wat drukt de volgende query uit? SELECT naam FROM patienten   wat drukt de volgende query uit? SELECT naam FROM patienten WHERE voornaam != 'Bas';

Voorbeeld we hebben een relatie (tabel) ouders met attributen ouder en kind   ouders(ouder,kind) opgave 5.3 wat drukt de volgende query uit? SELECT ouder FROM ouders WHERE kind != 'Bas';

BETWEEN het symbool BETWEEN wordt gebruikt voor intervallen   SELECT naam FROM patienten WHERE huisarts BETWEEN 7 AND 10;

IN het symbool IN wordt gebruikt voor verzamelingen SELECT *   SELECT * FROM patienten WHERE gebdatum IN (%90,%91,%92);

UNION het symbool UNION wordt gebruikt voor de vereniging   SELECT naam, huisarts FROM patienten WHERE gebdatum IN (%90,%91,%92) UNION WHERE voornaam = 'Jan';

Veranderen van gegevens je wil niet alleen opgeslagen informatie opvragen maar ook opgeslagen informatie veranderen (onderhoud)   SQL biedt commando's voor het verwijderen, toevoegen en wijzigen van gegevens

DELETE met het DELETE-command verwijderen we rijen uit een tabel   DELETE FROM patienten WHERE patnr = '9399'; WHERE naam = 'Appels';    DELETE FROM patienten;

INSERT met het INSERT-commando voegen we een record toe aan een tabel   INSERT INTO patienten VALUES('9401','Dikker','Ruud', 12,25-09-69);

UPDATE met het UPDATE-commando wijzigen we (waarden van) records   UPDATE patienten SET huisarts = 25 WHERE huisarts = 20;

Join - voorbeeld hanr hanaam haadres haplaats 13 B. Brandsma Brink 89 Patnr pnaam padres pwoonpl huisarts geb 12345 Appels Brink 12 Son 13 03-05-68 23456 Peren Markt 1 23-06-70 34567 Storms Laan 88 Oss 14 13-06-36 12346 Laan 86 23-12-45 24564 Janssen Weg 4a Almere 15 01-07-39 76543 Brandsma Weg 67 01-11-71 hanr hanaam haadres haplaats 13 B. Brandsma Brink 89 Son 14 S. Storms Laan 84 Oss 15 G. de Groot Weg 17 Lelystad 16 G. Groten Weg 19 Almere

Join het leggen van een verbinding tussen tabellen kan met behulp van een join-operatie   SELECT pnaam, hanaam FROM patienten, huisartsen WHERE patienten.pwoonpl = huisartsen.haplaats; 1. beschouw stuk voor stuk de rijen uit de eerste FROM tabel 2. beschouw stuk voor stuk de rijen uit de tweede FROM tabel 3. verifieer of de combinatie voldoet aan de WHERE regel 4. geef voor de goede combinaties de SELECT attributen

Join pnaam hanaam Appels B. Brandsma Peren Storms S. Storms Janssen G. Groten Brandsma geef de namen van patiënten en de namen van huisartsen waarvoor geldt dat de patiënt woont in de plaats waar de huisarts praktijk houdt

Join in principe krijgen we bij een join combinaties van willekeurige tupels  meestal hebben we behoefte aan combinaties van gerelateerde tupels   SELECT pnaam, hanaam FROM patienten, huisartsen WHERE patienten.huisarts = huisartsen.hanr; 1. beschouw stuk voor stuk de rijen uit de eerste FROM tabel 2. beschouw stuk voor stuk de rijen uit de tweede FROM tabel 3. verifieer of de combinatie voldoet aan de WHERE regel 4. geef voor de goede combinaties de SELECT attributen

Join geef de namen van patiënten en de namen van hun huisartsen pnaam hanaam Appels B. Brandsma Peren Storms S. Storms Janssen G. de Groot Brandsma geef de namen van patiënten en de namen van hun huisartsen

Join SELECT pnaam, hanaam FROM patienten, huisartsen WHERE patienten.huisarts = huisartsen.hanr AND patienten.woonpl = huisartsen.haplaats; pnaam hanaam Appels B. Brandsma Peren Storms S. Storms geef de namen van patiënten en de namen van hun huisartsen voor die patiënten waarvoor geldt dat zij wonen in de plaats waar hun huisarts praktijk houdt

Join - voorbeeld hanr hanaam haadres haplaats 13 B. Brandsma Brink 89 Patnr pnaam padres pwoonpl huisarts geb 12345 Appels Brink 12 Son 13 03-05-68 23456 Peren Markt 1 23-06-70 34567 Storms Laan 88 Oss 14 13-06-36 12346 Laan 86 23-12-45 24564 Janssen Weg 4a Almere 15 01-07-39 76543 Brandsma Weg 67 01-11-71 hanr hanaam haadres haplaats 13 B. Brandsma Brink 89 Son 14 S. Storms Laan 84 Oss 15 G. de Groot Weg 17 Lelystad 16 G. Groten Weg 19 Almere

Join voorbeeld SELECT * FROM patienten, huisartsen;   SELECT * FROM patienten, huisartsen; FROM patienten, huisartsen WHERE patienten.huisarts = huisartsen.hanr;

Subqueries binnen queries kunnen weer queries gebruikt worden SELECT pnaam FROM patienten WHERE huisarts = SELECT hanr FROM huisartsen WHERE hanaam = 'Brandsma'; subqueries in een tabel SELECT huisarts WHERE patnr = '9912';

Subqeries behalve de operator = kunnen we ook andere operatoren gebruiken om queries met elkaar te relateren SELECT * FROM patienten WHERE huisarts IN SELECT hanr FROM huisartsen WHERE haplaats = 'Eindhoven'; SELECT pnaam WHERE EXISTS (SELECT hanr WHERE patienten.padres = huisartsen.haadres);

Opgave 5.4 wat drukt de volgende query uit? SELECT pnaam   SELECT pnaam FROM patienten WHERE NOT huisarts IN SELECT hanr FROM huisartsen WHERE haplaats = 'Eindhoven';

Voorbeeld we hebben een relatie (tabel) ouders met attributen ouder en kind en een relatie personen met attributen naam en leeftijd ouders(ouder,kind) personen(naam,leeftijd)  opgave 5.5 wat drukt de volgende query uit? SELECT ouder FROM ouders WHERE NOT kind IN SELECT naam FROM personen WHERE leeftijd = '6'; en wat als er NOT in de laatste regel staat?

Opgave5.6 wat drukt de volgende query uit? SELECT pnaam FROM patienten   SELECT pnaam FROM patienten WHERE huisarts IN SELECT hanr FROM huisartsen WHERE NOT hanaam IN SELECT hanaam WHERE haplaats = 'Eindhoven';

Notatie als we in een query meerdere keren dezelfde relatie gebruiken moeten we aangeven welke attributen bij welke relaties horen   SELECT x.pnaam, y.pnaam FROM patienten x, patienten y WHERE x.huisarts = y.huisarts;

Voorbeeld we hebben een relatie (tabel) ouders met attributen ouder en kind ouders(ouder,kind)   opgave 5.7.a wat drukt de volgende query uit? SELECT x.ouder, y.kind FROM ouders x, ouders y WHERE x.kind = y.ouder;  opgave 5.7.b FROM ouders x, ouders y;

Opgave 5.8 wat drukt de volgende query uit? SELECT ouder FROM ouders   SELECT ouder FROM ouders WHERE kind IN FROM ouders; en wat met WHERE NOT kind IN ?

Opgave 5.9 wat drukt de volgende query uit? SELECT ouder FROM ouders   SELECT ouder FROM ouders WHERE NOT ouder IN WHERE kind IN SELECT naam FROM personen WHERE leeftijd = '3';

Opgave 5.10 druk in SQL uit: geef van alle ouders de leeftijden    geef van alle ouders en grootouders de leeftijden  geef alle personen die ouder zijn dan Bas en Anna

Functies het is mogelijk met functies acties uit te voeren op groepen van gegevens   AVG(..) SUM(..) MAX(..) MIN(..) COUNT(*) SELECT MAX(leeftijd) FROM personen WHERE naam = 'Anna'; SELECT MIN(leeftijd) FROM personen, ouders WHERE personen.naam = ouders.kind

Queryoptimalisatie de formulering van queries kan (bijvoorbeeld met joins en subqueries) tot lastige uitdrukkingen leiden   query-optimalisatie betekent dat de DBMS-implementatie zorgt voor de vertaling naar een equivalente uitdrukking die sneller en efficiënter verwerkt kan worden waarschuwing in de theorie is sprake van verzamelingen dus geen dubbele rijen en waarden in een SQL implementatie is sprake van tabellen met dubbele rijen