College 3 Hoofdstuk 3: Basis concepten van een relationele database tabel attribuutwaarden: domeinen, null entity integrity en referential integrity data manipulatie in een relationele database
De elementen van een tabel/ relation tabelkop: schema heading attribuut, veldnaam, Kolomkop attribute record, entiteit, rij, tupel Tuple, row record Set body Veldwaarde value Kolom column NB Attribuut heeft een domein
Domeinen Domein van een attribuut kan specifieker zijn dan alleen een datatype, zoals number, string of date - Range van mogelijke waarden - Keuzelijst van waarden Verwijzende sleutel: waarde uit andere tabel (Access: lookup-field – DEMO) Nog meer semantiek wenselijk maar meestal niet goed te definiëren in een database: - Verder onderscheid: lengtemaat, gewichtsmaat e.d. - Mogelijke operaties gekoppeld aan domein
Null Null (een leeg veld) kan bij vrijwel elk datatype gebruikt worden (boolean?) Wat kan null betekenen? - waarde ontbreekt nog of is onbekend - attribuut bij deze entiteit niet van toepassing Null is geen waarde, wordt niet gebruikt bij berekeningen (gemiddelde, etc) null is niet 0 (number), is niet “” (string) Null wordt niet gebruikt bij vergelijkingen als leeftijd < 10, aantal = 0 Je kunt alleen testen: is null of is not null
Sleutels in een tabel Kandidaatsleutel: een attribuut of een minimale combinatie van attributen die te gebruiken is om een entiteit uniek te identificeren Primaire sleutel: de kandidaatsleutel die gekozen is om de entiteit uniek te identificeren Alternatieve sleutel: een (eventuele) andere sleutel naast de primaire sleutel Verwijzende/ refererende sleutel (foreign key) een attribuut dat verwijst naar een entiteit in een andere tabel, doordat het gelijk is aan de primaire sleutel van die andere tabel. Bij de keuze van sleutels moet niet alleen naar de huidige concrete data gekeken worden, maar over alle mogelijkheden worden nagedacht!
Sets in een RDBS Een database bevat een set tabelschema’s (entiteitsklassen) Een tabelschema (entiteitsklasse) bevat een set attribuutnamen met hun domein Een tabel bevat een set records (entiteiten) Een record bevat een set waarden gekoppeld aan attribuutnamen Een resultaat van een view of query is een tabel NB hoewel settheorie de basis is van het relationeel model wordt in Access niet altijd in sets gewerkt en kun je toch duplicaat records krijgen, gebruik zo nodig DISTINCT(ROW).
Verzamelingen Het relationeel model is gebaseerd op de verzamelingenleer. Een verzameling (set) bestaat uit 0 - N () elementen. Het aantal elementen: de kardinaliteit van de set. Een element kan zelf weer een set zijn. {} lege set {1,8,3} een set met 3 elementen {{2,4},{1,8}} een set met twee sets als elementen De elementen van een set zijn ongeordend {1,8,3} = {8,1,3} De elementen van een set zijn uniek (vgl groep individuen) {1,8,3,3,1} = {1,8,3}
Operaties op sets: Venndiagram 3 2 sets, b.v. studenten en barkeepers Samenvoegen van twee sets: vereniging / union A B {1,2,5,6} {2,6,7} = {1,2,5,6,7} Gemeenschappelijke deel van twee sets: doorsnede / intersection A B {1,2,5,6} {2,6,7} = {2,6} verschil / difference / minus bij twee sets: A - B {1,2,5,6} – {2,6,7} = {1,5} 1 2 7 5 6 s b 3 1 2 7 5 6 b s 3 1 2 7 5 6 s b
Overzicht operaties op tabellen Setoperaties op meer dan 1 tabel union, intersection, minus Relationele operaties op 1 tabel restrict project Relationele operaties meer dan 1 tabel product join (meerdere vormen) divide NB tabel kan hierbij basistabel zijn, maar ook een view of een via een query geconstrueerde combinatie van tabellen
Setoperaties op twee tabellen: UNION Vereniging entiteiten uit twee tabellen met zelfde schema VB: samenvoegen van 2 ledenlijsten Naam Adres Wpl Naam Adres Wpl AA Aweg 1 A AA Aweg 1 A BB Bweg 2 B DD Dweg 4 D CC Cweg 3 C union EE Eweg 5 E Naam Adres Wpl AA Aweg 1 A BB Bweg 2 B CC Cweg 3 C DD Dweg 4 D EE Eweg 5 E ADO VVV
Setoperaties op hele tabellen: INTERSECTION Doorsnede gemeensch. elementen uit twee tabellen VB: vergelijken van 2 ledenlijsten: wie is van beide lid? Naam Adres Wpl Naam Adres Wpl AA Aweg 1 A AA Aweg 1 A BB Bweg 2 B DD Dweg 4 D CC Cweg 3 C intersection EE Eweg 5 E Naam Adres Wpl AA Aweg 1 A VVV ADO
Setoperaties op hele tabellen: MINUS Difference/except/minus verschil tussen twee tabellen VB: wie is wel van VVV maar niet van ADO lid? VVV ADO Naam Adres Wpl Naam Adres Wpl AA Aweg 1 A AA Aweg 1 A BB Bweg 2 B DD Dweg 4 D CC Cweg 3 C VVV-ADO EE Eweg 5 E Naam Adres Wpl BB Bweg 2 B CC Cweg 3 C
Relationele operaties op 1 tabel Relationele operaties zijn gebaseerd op de tabel, oftewel de relatie Restrict: selectie van bepaalde records uit een tabel via condities Project: selectie van de te tonen velden van een tabel
Restrictie en projectie restrictie: de set beperken tot de rijen die aan een voorwaarde voldoen Naam Adres Wpl Naam Adres Wpl AA Aweg 1 A restrictie AA Aweg 1 A BB Bweg 2 B Wpl = A DD Dweg 4 A CC Cweg 3 C DD Dweg 4 A projectie: de set beperken tot bepaalde kolommen Naam Adres Wpl Naam Wpl AA Aweg 1 A AA A BB Bweg 2 B projectie BB B CC Cweg 3 C Naam, Wpl CC C DD Dweg 4 A DD A
Combinaties van restricties (Vereniging) keus tussen verschillende restricties OR b.v. Welke planten zijn rood OF paars? Welke planten zijn bollen OF bloeien in maart? (Intersectie) meerdere restricties tegelijk AND b.v. Welke planten zijn bollen EN bloeien in maart? (Verschil) positive en negatieve restrictie (AND NOT) maar bloeien NIET in maart?
Relationele operaties op meer dan 1 tabel product join (meerdere vormen) divide
Cartesisch product van tabellen Product/ de entiteiten uit twee tabellen in alle mogelijke Times combinaties samenvoegen tot een nieuwe entiteit VB : gemengd spel VNaam VLft MNaam MLft V1 28 M1 28 V2 24 M2 18 V3 18 product VNaam VLft Mnaam MLft V1 28 M1 28 V2 24 M1 28 V3 18 M1 28 V1 28 M2 18 V2 24 M2 18 V3 18 M2 18
Joins: combineren op voorwaarde Zelden wil je alle mogelijke combinaties van entiteiten uit twee tabellen, je zoekt meestal naar feitelijke combinaties, die al via een verwijzende sleutel zijn vastgelegd Een product dat beperkt wordt door eisen t.a.v. attribuutwaarden in de 2 tabellen heet een join. Voorbeeld: niet elke combinatie van een BOEK en een UITGEVER maar de combinatie van de feitelijke uitgever met het boek Restrictie van deze join: de verwijzende sleutel naar de uitgever van het boek in tabel BOEKEN moet gelijk zijn aan de primaire sleutel van de uitgever in tabel UITGEVER
Joins-1: Equi-join Equi join product van tabellen met restrictie: alleen de rijen met een gelijke waarde voor een gelijk attribuut (gewoonlijk sleutel/verwijzende sleutel) VB: Geef alle paren met gelijke leeftijd: VNaam VLft MNaam MLft V1 28 M1 28 V2 24 M2 18 V3 18 equi-join VLft=MLft VNaam VLft Mnaam Lft V1 28 M1 28 V3 18 M2 18
Joins-2: Natural join BOOKS Equi-join, maar dubbele kolom maar eenmaal: NATURAL JOIN! PUBLISHERS EQUI-JOIN BOOKS - PUBLISHERS
Joins-3: Theta-join Theta join: product van 2 tabellen met restrictie: alleen rijen met ongelijke waarde voor een gelijk attribuut ( < , > , =<, => ) VB: Geef alle paren waarbij de man ouder is dan de vrouw VNaam VLft MNaam MLft V1 28 M1 28 V2 24 M2 18 V3 18 theta join MLft > VLft VNaam VLft Mnaam MLft V2 24 M1 28 V3 18 M1 28
Joins-4: Alle vormen Inner join of kortweg join product van 2 (of meer) tabellen: alle velden samengevoegd restrictie: rijen met gelijke waarde voor een (of meer) attributen Natural join : inner join, maar naast restrictie ook projectie: de gelijke kolom(men) maar 1 keer in resultaattabel Left/right outer join: van één tabel alle records, van de ander de bestaande combinaties, verder lege velden (Full outer join: left + right outer join) Theta join Combineren op restrictie ongelijke waarde Self join (tabel dupliceren) Een tabel combineren met zichzelf
Opties voor een relatie -1 Jointype definieren in relatieschema of QBE (Access) Wil je, als je de relatie boek-uitgever gebruikt 1. alleen de bestaande combinaties van beiden zien? 2. alle boeken, en alleen de bijbehorende uitgevers? 3. alle uitgevers, en alleen de bijbehorende boeken? 1 is de equi-join, 2 en 3 zijn left/right outer joins geen full outer join mogelijk Default in Access is 1, maar soms is een andere keus nuttig, dan kun je b.v. zoeken naar de uitgevers zonder boeken.
Opties voor een relatie – 2 Enforce Referential Integrity? Het sleutelveld moet altijd naar een bestaande entiteit verwijzen vb de uitgeverscode in BOEKEN moet in UITGEVERS staan Cascade Update Related Fields? Als het originele veld gewijzigd wordt (naamsverandering, nieuwe codering), verandert het bijbehorende sleutelveld mee vb de uitgevercode wordt veranderd, de refererende sleutel ook Cascade Delete Related Records? Als de oorspronkelijke entiteit wordt verwijderd, verdwijnen de gerelateerde records ook vb als een uitgever wordt geschrapt, dan verdwijnen zijn boeken
Nog een relationele operator: Divide Een complexe operator, maar soms nuttig, voor vragen als: wie heeft alle propedeusevakken gehaald? wie verkoopt alle houtsoorten? Je hebt een studentresultatentabel met studenten en gehaalde vakken en een tabel met propedeusevakken en “deelt” de studenten door de propedeusevakken geef de studenten uit de studentresultatentabel voor wie voor alle propedeusevakken een (pos) resultaat staat
Operatoren en Access restrict, project en join zijn minimale eisen, union en minus zijn aanvullende eisen voor relationeel compleet systeem intersect en divide: uit de andere operatoren intersect: zie pg 59, kan dit korter? divide: ziet iemand hier kans toe? In Access SQL zijn beschikbaar: restrict, project, join en union daar moet je minus, intersect en divide op andere manieren formuleren