Week 3 BIMAIV03 Les B3 BIMAIV03 Les B3
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
Uitwerking opdracht 1 CREATE TABLE orders (klantnr TEXT(10), aantal INTEGER, CHECK ((SELECT SUM(aantal) FROM orders) <= 300)); klantnraantal klnr klnr klnr10037
Uitwerking opdracht 1 vervolg INSERT INTO orders VALUES('KLNR1004', 5); klantnraantal klnr klnr klnr10037 INSERT INTO orders VALUES('KLNR1004', 3);
Uitwerking opdracht 1 vervolg2 UPDATE orders SET aantal = 140 WHERE klantnr = 'klnr1001'; klantnraantal klnr klnr klnr10037 UPDATE orders SET aantal = 140 WHERE klantnr = 'klnr1002';
Referentiële integriteit 1 datumthuisuitdpvdpt 06 feb 2005RKC WaalwijkFC Groningen30 06 feb 2005FC UtrechtNAC20 06 feb 2005AjaxFC Twente12 06 feb 2005VitesseRoda JC30 30 jan 2005AjaxADO Den Haag00 30 jan 2005NACSC Heerenveen11 30 jan 2005RKC WaalwijkPSV14 29 jan 2005VitesseRBC Roosendaal WEDSTRIJD club ADO Den Haag Ajax AZ De Graafschap FC Den Bosch FC Groningen FC Twente FC Utrecht --- EREDIVISIE
studentnrmodcodedatumcijfer INFA0117 nov INFA0117 nov INFA0102 jul INFA0117 nov INFA0117 nov INFA0130 jan MM0116 nov INFA0117 nov Referentiële integriteit 2 CIJFERLIJST STUDENT studentnrnaamrest van de gegevens Hendriks Haringa Willemsen Gorkom Heijtinga Dorp Klaassen Jennings
studentnrmodcodedatumcijfer INFA0117 nov INFA0117 nov INFA0102 jul INFA0117 nov INFA0117 nov INFA0130 jan MM0116 nov INFA0117 nov Referentiële integriteit 3 CIJFERLIJST ModCodeNaamSpt ARCHArchitectuur1 INFA01Informatiekunde1 INFA02Informatiekunde1 --- MODUUL
studentnrmodcodedatumcijfer INFA0117 nov INFA0117 nov INFA0102 jul INFA0117 nov INFA0117 nov INFA0130 jan MM0116 nov INFA0117 nov Referentiële integriteit 4 CIJFERLIJST TENTAMEN- PLANNING modcodedatumn_surv ARCH16 nov INFA0117 nov INFA0130 jan
Referentiële integriteit 5 Cijferlijst Student Moduul
Referentiële integriteit 5a Cijferlijst Student Moduul Tentamen- planning
Referentiële integriteit 6 Wedstrijd Eredivisie
Referentiële integriteit 7 Referentiële integriteit kan worden afgedwongen met behulp van CHECK-constraints. Dat is niet verstandig; het kan anders... CREATE TABLE wedstrijd (datum DATE, thuis TEXT(20) REFERENCES eredivisie(club), uit TEXT(20) REFERENCES eredivisie(club), dpv INTEGER, dpt INTEGER);
Referentiële integriteit 8 CREATE TABLE wedstrijd (datum DATE, thuis TEXT(20) CONSTRAINT ach REFERENCES eredivisie(club), uit TEXT(20) CONSTRAINT oei REFERENCES eredivisie(club), dpv INTEGER, dpt INTEGER);
Referentiële integriteit 9 CREATE TABLE wedstrijd (datum DATE, thuis TEXT(20), uit TEXT(20), dpv INTEGER, dpt INTEGER, FOREIGN KEY (thuis) REFERENCES eredivisie(club), FOREIGN KEY (uit) REFERENCES eredivisie(club));
Referentiële integriteit en een kolom CLUB bevat die daarin óf als PRIMARY KEY óf als UNIQUE gedefinieerd is In alle gevallen geldt dat de tabel EREDIVISIE moet bestaan...
Referentiële integriteit 11 We denken ons de tabellen club Ajax PSV NAC AZ datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSVAjax20 03 okt 2004AZAjax00 28 aug 2004NACPSV22 22 aug 2004AjaxNAC62 21 aug 2004PSVAZ51 EREDIVISIE WEDSTRIJD
Referentiële integriteit 11 club Ajax PSV NAC AZ datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSVAjax20 03 okt 2004AZAjax00 28 aug 2004NACPSV22 22 aug 2004AjaxNAC62 21 aug 2004PSVAZ51 EREDIVISIE WEDSTRIJD UPDATE eredivisie SET club = 'Roda JC' WHERE club = 'Ajax'; DELETE FROM eredivisie WHERE club = 'Ajax';
Referentiële integriteit 11 club Ajax PSV NAC AZ datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSVAjax20 03 okt 2004AZAjax00 28 aug 2004NACPSV22 22 aug 2004AjaxNAC62 21 aug 2004PSVAZ51 EREDIVISIE WEDSTRIJD INSERT INTO wedstrijd VALUES (#14 feb 2005#, 'NEC', 'Ajax', 2, 3);
ON UPDATE CASCADE 1 We definiëren WEDSTRIJD als CREATE TABLE wedstrijd (datum DATE, thuis TEXT(20), uit TEXT(20), dpv INTEGER, dpt INTEGER, FOREIGN KEY (thuis) REFERENCES eredivisie(club) ON UPDATE CASCADE, FOREIGN KEY (uit) REFERENCES eredivisie(club) ON UPDATE CASCADE);
ON UPDATE CASCADE 2 We denken ons de tabellen club Ajax PSV NAC AZ datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSVAjax20 03 okt 2004AZAjax00 28 aug 2004NACPSV22 22 aug 2004AjaxNAC62 21 aug 2004PSVAZ51 EREDIVISIE WEDSTRIJD En geven de instructie UPDATE eredivisie SET club = 'ADO' WHERE club = 'Ajax'; ADO
We definiëren WEDSTRIJD als CREATE TABLE wedstrijd (datum DATE, thuis TEXT(20), uit TEXT(20), dpv INTEGER, dpt INTEGER, FOREIGN KEY (thuis) REFERENCES eredivisie(club) ON DELETE CASCADE, FOREIGN KEY (uit) REFERENCES eredivisie(club) ON DELETE CASCADE);
ON DELETE CASCADE 2 We denken ons de tabellen club Ajax PSV NAC AZ datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSVAjax20 03 okt 2004AZAjax00 28 aug 2004NACPSV22 22 aug 2004AjaxNAC62 21 aug 2004PSVAZ51 EREDIVISIE WEDSTRIJD En geven de instructie DELETE FROM eredivisie WHERE club = 'Ajax';
ON DELETE CASCADE 3 Het resultaat club PSV NAC AZ EREDIVISIE datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 28 aug 2004NACPSV22 21 aug 2004PSVAZ51 WEDSTRIJD
ON DELETE SET NULL 1 We definiëren WEDSTRIJD als CREATE TABLE wedstrijd (datum DATE, thuis TEXT(20), uit TEXT(20), dpv INTEGER, dpt INTEGER, FOREIGN KEY (thuis) REFERENCES eredivisie(club) ON DELETE SET NULL, FOREIGN KEY (uit) REFERENCES eredivisie(club) ON DELETE SET NULL);
ON DELETE SET NULL 2 We denken ons de tabellen club Ajax PSV NAC AZ datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSVAjax20 03 okt 2004AZAjax00 28 aug 2004NACPSV22 22 aug 2004AjaxNAC62 21 aug 2004PSVAZ51 EREDIVISIE WEDSTRIJD En geven de instructie DELETE FROM eredivisie WHERE club = 'Ajax';
ON DELETE SET NULL 3 Het resultaat club PSV NAC AZ EREDIVISIE datumthuisuitdpvdpt 22 jan 2005PSVNAC40 13 nov 2004NACAZ03 24 okt 2004PSV20 03 okt 2004AZ00 28 aug 2004NACPSV22 22 aug 2004NAC62 21 aug 2004PSVAZ51 WEDSTRIJD
Structuur van tabellen wijzigen Een kolom aan een tabel toevoegen ALTER TABLE eredivisie ADD COLUMN stadion TEXT(25); ALTER TABLE eredivisie ADD COLUMN stadion TEXT(25); club Ajax PSV NAC AZ club Ajax PSV NAC AZ stadion
Structuur van tabellen wijzigen Een kolom uit een tabel verwijderen ALTER TABLE eredivisie DROP COLUMN stadion; ALTER TABLE eredivisie DROP COLUMN stadion; club Ajax PSV NAC AZ club Ajax PSV NAC AZ stadion
Structuur van tabellen wijzigen Dit kan niet. Er wordt in de definitie van WEDSTRIJD twee keer naar verwezen. ALTER TABLE eredivisie DROP COLUMN club; ALTER TABLE eredivisie DROP COLUMN club;
Structuur van tabellen wijzigen U kunt een kolomtype wijzigen met ALTER TABLE wedstrijd ALTER COLUMN datum TEXT(20); ALTER TABLE wedstrijd ALTER COLUMN datum TEXT(20); Dit gaat alleen goed als de gegevens te converteren zijn. Als dat niet mogelijk is gaat de wijziging niet door.
Structuur van tabellen wijzigen U kunt een constraint aan een tabel toevoegen met ALTER TABLE wedstrijd ADD CONSTRAINT a1 PRIMARY KEY (datum, thuis); ALTER TABLE wedstrijd ADD CONSTRAINT a1 PRIMARY KEY (datum, thuis); Merk op dat de constraint een naam moet hebben (hier a1).
Structuur van tabellen wijzigen U kunt een constraint verwijderen met ALTER TABLE wedstrijd DROP CONSTRAINT a1; ALTER TABLE wedstrijd DROP CONSTRAINT a1;