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 tabelnaam kolomnamen datatypen sleutel (primary key) kolombeperking tabelbeperking
CREATE TABLE boek (boeknr TEXT(5), titel TEXT(35), uitgever TEXT(10), prijs CURRENCY); Voorbeeld 1 boeknrtiteluitgever 02001Hack, Hacker, HackstAcServ 02002Warez voor DummiesBezBij 02013Het ABC van EmPeeDrieAcServ prijs 29,00 24,50 13,95 BOEK... CREATE TABLE boek (boeknr TEXT(5) PRIMARY KEY, titel TEXT(35), uitgever TEXT(10), prijs CURRENCY); kolombeperking
Alternatief boeknrtiteluitgever 02001Hack, Hacker, HackstAcServ 02002Warez voor DummiesBezBij 02013Het ABC van EmPeeDrieAcServ prijs 29,00 24,50 13,95 BOEK... CREATE TABLE boek (boeknr TEXT(5), titel TEXT(35), uitgever TEXT(10), prijs CURRENCY, PRIMARY KEY (boeknr)); tabelbeperking
Sleutel (6) CREATE TABLE soccerdreams (maand TEXT(10) PRIMARY KEY, naam TEXT(15) PRIMARY KEY, pt INTEGER); SOCCERDREAMS naampt Kluivert Davids Kluivert maand mei juni... sleutel
Sleutel (7) CREATE TABLE soccerdreams (maand TEXT(10), naam TEXT(15), pt INTEGER, PRIMARY KEY (maand, naam)); hier alleen tableconstraint mogelijk SOCCERDREAMS naampt Kluivert Davids Kluivert maand mei juni...
Samengestelde sleutel PEILING DatumPartijAantal 13 nov 2006CDA46 13 nov 2006VVD24 13 nov 2006PvdA33 15 nov 2006CDA44 15 nov 2006VVD22 15 nov 2006PvdA32 20 nov 2006CDA42 20 nov 2006VVD20 20 nov 2006PvdA38 CREATE TABLE peiling (datum DATE, partij TEXT(5), aantal INTEGER, PRIMARY KEY (datum, partij));
Maar als er meerdere kandidaatsleutels zijn? datumthuis FC Groningen Feyenoord NAC voor uit Ajax PSV AZ... tegen alternatieve sleutels HOLLAND_CASINO
Wat te doen om iets dergelijks te voorkomen? HOLLAND_CASINO datumthuis FC Groningen Feyenoord NAC voor uit Ajax AZ... tegen Mag niet...
Of zelfs dit? HOLLAND_CASINO datumthuis FC Groningen Feyenoord NAC voor uit Ajax PSV AZ... tegen Mag al evenmin
En wat hiervan te denken? HOLLAND_CASINO datumthuis Haarlem Feyenoord NAC voor uit FC Zwolle PSV AZ... tegen Geen EREDIVISIE
Al helemaal te gek... HOLLAND_CASINO datumthuis FC Groningen Feyenoord Ajax voor uit Ajax Feyenoord FC Twente... tegen Ontdek de 2 onmogelijkheden...
Eenvoudig beginnen EUROPA landhoofdstad NederlandAmsterdam BelgiëBrussel FrankrijkParijs... Alternatieve sleutel
UNIQUE CREATE TABLE europa (land TEXT(25) PRIMARY KEY, hoofdstad TEXT(25) UNIQUE); UNIQUE mag ook als tabelconstraint worden meegegeven! CREATE TABLE europa (land TEXT(25) PRIMARY KEY, hoofdstad TEXT(25), UNIQUE (hoofdstad));
... dus ook allemaal tabelconstraints CREATE TABLE europa (land TEXT(25), hoofdstad TEXT(25), PRIMARY KEY (land), UNIQUE (hoofdstad)); U ziet maar…
Naamgeving van CONSTRAINTS (1) CREATE TABLE europa (land TEXT(25), hoofdstad TEXT(25), CONSTRAINT oei PRIMARY KEY (land), CONSTRAINT ach UNIQUE (hoofdstad));
Naamgeving van CONSTRAINTS (2) CREATE TABLE europa (land TEXT(25) CONSTRAINT oei PRIMARY KEY, hoofdstad TEXT(25) CONSTRAINT ach UNIQUE);
Verplicht invullen (1) boeknrtiteluitgever 02018PowerPoint voor DocentenMeulenh 02019Smashing WindowsMeulenh 02013SQL voor Playstation2AcServ prijs 23,95 BOEK... Neem aan dat de titel en de uitgever van elk boek bekend is maar dat we niet van elk boek de prijs hoeven te weten.
Verplicht invullen (2) boeknrtiteluitgever 02018PowerPoint voor DocentenMeulenh 02019Smashing WindowsMeulenh 02013SQL voor Playstation2AcServ prijs 23,95 BOEK... INSERT INTO boek VALUES ('02018', 'Powerpoint voor Docenten', 'Meulenh', NULL); INSERT INTO boek VALUES ('02018', 'Powerpoint voor Docenten', 'Meulenh', NULL);
Verplicht invullen (3) INSERT INTO boek VALUES ('02019', NULL, 'Meulenh', NULL); INSERT INTO boek VALUES ('02019', NULL, 'Meulenh', NULL); boeknrtiteluitgever 02018Powerpoint voor DocentenMeulenh 02019Meulenh 02013SQL voor Playstation2AcServ prijs 23,95 BOEK... Mag niet... Hoe dit te voorkomen?
NOT NULL CREATE TABLE boek (boeknr TEXT(5) PRIMARY KEY, titel TEXT(35) NOT NULL, uitgever TEXT(10) NOT NULL, prijs CURRENCY); NOT NULL is uitsluitend te gebruiken als kolombeperking. NOT NULL is impliciet aanwezig bij kolommen die onderdeel zijn van de PRIMARY KEY. Dit geldt niet voor kolommen die deeluitmaken van een UNIQUE-constraint.
NOT NULL CREATE TABLE europa (land TEXT(25) PRIMARY KEY, hoofdstad TEXT(25) UNIQUE NOT NULL); NOT NULL mag ook als CONSTRAINT whow NOT NULL
Domeinbeperkingen (1) We noemen de range van waarden die een kolom aan mag nemen het DOMEIN van de kolom. Voorbeelden: een tentamencijfer is steeds een geheel getal (type INTEGER) maar niet elk geheel getal is toegestaan; een leverdatum (type DATE) is altijd groter dan de besteldatum; het aantal doelpunten (type INTEGER) is nooit een negatief aantal.
Domeinbeperkingen (2) We kunnen aan het tentamencijfer een voorwaarde stellen. Bijvoorbeeld: cijfer > 0 én cijfer <= 10 cijfer > 0 én cijfer <= 10 of cijfer {1, 2, 3,..., 10} cijfer {1, 2, 3,..., 10} cijfer > 0 AND cijfer <= 10 of cijfer IN (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
CHECK Bij de tabeldefinitie geven we deze voorwaarde mee in de vorm van een CHECK-constraint. CREATE TABLE cijferlijst (studentnr TEXT(7), modcode TEXT(5), datum DATE, cijfer INTEGER, CHECK (cijfer > 0 AND cijfer <= 10)); Let op de haakjes
CHECK (2) CREATE TABLE cijferlijst (studentnr TEXT(7), modcode TEXT(5), datum DATE, cijfer INTEGER NOT NULL, PRIMARY KEY (studentnr, modcode, datum), CHECK (cijfer > 0 AND cijfer <= 10));
CHECK (3) Check-constraints mogen in JetSQL alleen als tabelbeperkingen worden opgegeven. In Jet SQL mogen check-constraints andere tabellen raadplegen of zelfs meerdere rijen uit de tabel zelf betreffen.
Voorbeeld Een zeilcruise in de Caribische Oceaan telt maximaal 20 deelnemers. Voor iedere boeking geldt dat de naam en verdere persoonsgegevens van de deelnemer genoteerd worden. De tabel die zo ontstaat kan maximaal 20 rijen bevatten. Hoe realiseer je dit? CREATE TABLE cruise (nr TEXT(7) PRIMARY KEY, naam TEXT(20), CHECK ((SELECT COUNT(*) FROM cruise) < 21));
Opdracht 1 Van een artikel mogen maximaal 300 stuks verkocht worden. Verschillende klanten bestellen een aantal van dit artikel. Realiseer deze beperking voor onderstaande tabel. klantnraantal KLNR KLNR KLNR