ANALYSE 3 INFANL01-3 WEEK CMI Informatica
ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Anatomy van de SELECT statement ▸ Natural JOINS ▸ Hiërarchie en recursieve relaties ▸ Tijdaspecten ▸ Generics ▸ Integriteit regels en constraints
VORIGE LES
Wat is een relationele database (RDBMS)? Een RDBMS is een systeem : met gegevens in de vorm van tabellen waarin SQL wordt gebruikt om tabellen te manipuleren SQL
Relationele Algebra: selectie (SELECT... WHERE..) SELECT * FROM verz WHERE naam = ‘jan’ selectie van rijen die aan voorwaarde voldoen
Relationele Algebra: vereniging (UNION) SELECT * FROM verz UNION SELECT * FROM wegb voorwaarde: aantal en domein v/d attributen komt overeen
Relationele Algebra: verschil (EXCEPT) SELECT * FROM verz EXCEPT SELECT * FROM wegb volgorde is van belang ! (verz - wegb) <> (wegb-verz)
Relationele Algebra: doorsnede (INTERSECT) SELECT * FROM verz INTERSECT SELECT * FROM wegb
Relationele Algebra: projectie (SELECT) SELECT kenteken FROM verz
Relationele Algebra: product of JOIN SELECT * FROM man, vrouw alle mogelijke combinaties!
SELECT STATEMENT
SELECT (1) ::= [ ]
SELECT (2) SELECTPNAAM,LEEFTIJD [kolommen] FROM PATIENT [tabel] WHERE LEEFTIJD > 50; [voorwaarde voor rij]
SELECT instructie: volgorde van uitvoeren (intern) SELECT [kolommen] [3] FROM [tabellen][1] WHERE [voorwaarde voor rij][2] ORDER BY [kolom][4] 1. FROM2. WHERE a b 3. SELECT4. ORDER BY
SELECT instructie: volgorde (voorbeeld) SELECTANO, ANAAM FROM A WHERE KLEUR=‘Blauw’ ORDER BY ANAAM 1. FROM A 2. WHERE KLEUR=‘Blauw’ 3. SELECT ANO, ANAAM 4. ORDER BY ANAAM
SELECT instructie: FROM component (definitie) ::= FROM [{, }...] ::= [[AS] ] ::= [.] tabelnaam
SELECT instructie: FROM component (voorbeeld) SELECT teamnr, naam FROM teams AS t,spelers AS s WHERE t.spelersnr = s.spelersnr Dit is een voorbeeld van een natural join
SELECT instructie: WHERE (operatoren etc) vergelijking: = = <> AND, OR, NOT BETWEEN, IN, LIKE, NULL IN met subquery vergelijkingsoperator met subquery ANY, ALL EXISTS
SELECT instructie: WHERE (voorbeelden) WHERE GEB_DATUM > ‘ ’ AND NOT NAAM = ‘Haas’; WHERE GEB_DATUM BETWEEN ‘ ’ AND ‘ ’; WHERE NAAM IN (‘Smit’,’Jansen’,’Zwart’);
SELECT instructie: WHERE (IN met subquery) SELECT naam AS aanvoerder FROM spelers WHERE spelersnr IN (SELECT spelersnr FROM teams);
SELECT instructie: WHERE (EXISTS) SELECT naam AS aanvoerder FROM spelers WHERE EXISTS (SELECT * FROM teams WHERE spelersnr=spelers.spelersnr);
SELECT instructie: WHERE (ALL) SELECT naam+’ is het oudst’ AS oudste, geb_datum FROM spelers WHERE geb_datum <= ALL (SELECT geb_datum FROM spelers);
Natural JOIN verschillende typen JOIN later behandeld natural join: SELECT student.snaam,opleiding.onaam FROM student, opleiding WHERE student.opl=opleiding.opl;
Natural join in stapjes: 1. FROM - input SELECT.... FROM teams AS t,spelers AS s
Natural join in stapjes: 2. FROM - resultaat SELECT... FROM teams AS t, spelers AS s
Natural join in stapjes: 3. WHERE - input WHERE t.spelersnr = s.spelersnr;
Natural join in stapjes: 4. WHERE - resultaat SELECT... FROM teams AS t, spelers AS s WHERE t.spelersnr = s.spelersnr;
Natural join in stapjes: 5. SELECT - resultaat SELECT t.teamnr as teamnr, naam as aanvoerder FROM teams AS t, spelers AS s WHERE t.spelersnr = s.spelersnr;
ERD
Modeleren van hiërarchie Wat zijn voorbeelden van hiërarchieën voor relaties? organisaties en afdelingen categorieën en subcategorie andere voorbeelden uit je project ? Hoe kun je deze data modelleren? Hoeveel entiteiten heb je nodig?
Modeleren van hiërarchie
Modeleren van recursieve relaties Een recursieve of zelf-refererende relatie. In een relationeel database model kan een entiteit relatie hebben met zichzelf.
Modeleren van hiërarchie met recursieve relatie
Tijdaspecten - Audit trails (Logs) - Geschiedenis van de data
Generieke data modellen zijn classificaties(generalisatie) van een aantal sub entiteiten die een set van dezelfde attributen hebben In generieke data modellen worden ook afwijkende attributen per entiteit type opgenomen in dezelfde entiteit Generieke modellen reduceren het aantal entiteiten in je data model Opdracht: maak een ERD waarbij de verschillende entiteit types in een entiteit opgenomen worden.
Generieke data modellen (uitwerking) Wat zijn de voor- en nadelen van de generalisatie?
Integriteit regels en constraints 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