definitieve versie 2002 Databases I Relationeel Model Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam Database ontwerp proces Implementation model oude stijl (hiërarchisch) D1 D2 engineering 500,000 E1 E2 E3 John Joe Jack 28-08-1964 04-04-1968 03-09-1969 Mary Sue daughter wife sales E4 E5 200,000 Will 21-03-1971 Suzie Tom Mary daughter son wife Bridget 22-01-1972 Implementation model nieuwe stijl (relationeel) DEPARTMENT D# NAME D1 engineering D2 sales EMPLOYEE E# NAME E1 John E2 Joe E3 Jack E4 Will E5 Bridget BUDGET 500,000 200,000 BDATE 28-08-1964 04-04-1968 03-09-1969 21-03-1971 22-01-1972 D# D1 D1 D1 D2 D2 DEPENDENT E# NAME E3 Mary E3 Sue E4 Suzie E4 Tom E4 Mary REL daughter wife daughter son wife Voorbeeld relatie (fig 7.1) Definitie relatie relatie: een deelverzameling van het Cartesisch product D1 D2 … Dn waarbij Di (i = 1…n) de domeinen zijn en n de graad (degree / arity) is van de relatie { (E1, (E2, (E3, (E4, (E5, John, Joe, Jack, Will, Bridget, 28-08-1964), 04-04-1968), 03-09-1969), 21-03-1971), 22-01-1972) } voor ieder tupel (e, n, b) uit deze relatie moet gelden: – e E# – n NAME – b BDATE Uitgebreide definitie relatie een relatie is: (1) een verzameling (attribuutnaam, domein)-paren waarbij de attribuutnamen uniek zijn en (2) een verzameling tupels, waarbij ieder tupel een verzameling is van geordende paren (attribuutnaam, waarde) waarbij elke attribuutnaam niet meer dan één keer voor mag komen in een tupel en moet voorkomen in de verzameling (attribuutnaam, domein)-paren van de relatie en waarbij de waarde moet komen uit het bij de attribuutnaam vermelde domein Voorbeeld uitgebreide definitie ( {(E#, EMPNRS), {{(E#, E1), {(E#, E2), {(E#, E3), {(E#, E4), {(E#, E5), } ) (NAME, STRING), (NAME, John), (NAME, Joe), (NAME, Jack), (NAME, Will), (NAME, Bridget), (BDATE, DATE)}, (BDATE, 28-08-1964)}, (BDATE, 04-04-1968)}, (BDATE, 03-09-1969)}, (BDATE, 21-03-1971)}, (BDATE, 22-01-1972)} Begrippen en opmerkingen oorspronkelijke eisen attributen relationeel model: – niet composite – niet multi-valued intensie: geeft aan welke toestanden (waarden) en toestandsovergangen toegestaan/mogelijk zijn extensie: – een extensie: een mogelijke/toegestane inhoud – de extensie: de huidige inhoud relatie-schema: beschrijving van de intensie v/e relatie database-schema: beschrijving van de intensie v/e database Keys superkey: verzameling attributen die de tupels van een relatie altijd (d.w.z. voor iedere extensie) uniek identificeert. dus t1,t2R: (t1 t2 t1[SK] t2[SK]) (candidate) key: minimale superkey primary key: specifieke, door de modelleur daartoe aangewezen key foreign key: verzameling van attributen die wordt gebruikt om naar tupels van een (andere) relatie te verwijzen. voorbeeld: Woning(plaats1, straat1, huisnr1,2, postcode2, prijs, naam_makelaar) Makelaar(naam1, telefoon2, KvKnummer3) Primary keys en foreign keys (fig 7.7) Constraints entity integrity: geen enkel tupel mag de waarde null hebben in een attribuut dat tot de primary key behoort key constraint: de attributen van een key moeten (gezamelijk) voor ieder tupel uit de relatie unieke waarden hebben referential integrity: de waarden van foreign keys moeten: – ofwel als sleutelwaarde voorkomen in de relatie waar de FK naar verwijst (d.w.z. FK verwijst naar daadwerkelijk bestaand tupel) – ofwel geheel null zijn (d.w.z. ieder FK-attribuut null) Problemen overlapping foreign keys... voorbeeld: R(A, B, C, D, E) {B, C} FK naar S {C, D, E} FK naar T S(B, C, F) T(C, D, E, G) in verband met referential integrity geldt: geen verwijzing naar tupel van S d.e.s.d.a. geen verwijzing naar tupel van T (want null-waarden mogen uitsluitend als de gehele FK null is) Relatie schema naam v/d relatie namen attributen voor ieder attribuut de naam van het bijbehorende domein (beschreven in aparte domein schema’s) beschrijving intra-relationele constraints – key constraints – overige constraints (als tupel.leeftijd > 23 dan tupel.salaris >= minimumloon) beschrijving van wat er moet gebeuren indien constraints geschonden dreigen te worden Database schema naam v/d database beschrijving alle domeinen (d.w.z. alle domeinschema’s) alle relatieschema’s alle view definities beschrijving inter-relationele constraints beschrijving wat er moet gebeuren als inter-relationele constraints geschonden dreigen te worden Operaties die database wijzigen INSERT – domain constraints – key constraints – entity integrity – referential integrity (van tupel dat wordt toegevoegd) DELETE – referential integrity (van tupels die verwijzen naar tupel dat wordt verwijderd!) MODIFY – domain constraints – referential integrity (van tupel dat wordt gewijzigd) let op: het wijzigen (MODIFY) van attributen van de primary key is hetzelfde als een DELETE + INSERT (identiteit wijzigt) Referential integrity (delete / update) restricted delete of update mag niet worden uitgevoerd nullify zet foreign key van verwijzend tuple op null cascade – bij delete: als tupel t verwijderd wordt, verwijder dan ook alle tupels t’ die naar t verwijzen – bij update: als van tupel t de betreffende key gewijzigd wordt, wijzig dan ook de foreign keys van alle tupels t’ die naar t verwijzen Voorbeeld referential integrity D# D1 D2 E# E1 E2 E3 E4 E5 NAME engineering sales NAME John Joe Jack Will Bridget BUDGET 500,000 200,000 BDATE 28-08-1964 04-04-1968 03-09-1969 21-03-1971 22-01-1972 E# NAME REL D# E3 Mary daughter D1 E3 Sue wife D1 E4 Suzie daughter D1 E4 Tom son D2 E4 Mary wife D2 \ ---> on delete cascade \ ---> on delete nullify Volgende keer nalezen: 7.1 7.2 7.3 + aanvullingen hoofdstuk 7 voorbereiden: aanvullingen hoofdstuk 7 constraints