Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer...

116
Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar 2010-11 J. Vennekens

Transcript of Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer...

Page 1: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Associatie KULeuven

Campus De Nayer

Industrieel ingenieur

Opleiding Elektronica-ICT

3e academisch bachelorjaar

Databanken

Academiejaar 2010-11 J. Vennekens

Page 2: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Inhoudsopgave

1 Database management systemen. 11.1 Objectieven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Schema’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Data modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Data definitie taal en data manipulatie taal . . . . . . . . . . . . . . . . . . . . . . 71.5 Database administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.6 De architectuur van een DBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.7 Client-server architectuur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Analyse van gegevens: entity-relationship model 142.1 Entiteiten en entiteit-verzamelingen . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 Attributen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Relaties en relatie-verzamelingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4 Integriteitsbeperkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.5 Primaire sleutels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.6 ER-diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.7 Herleiden van ER-diagrammen naar tabellen . . . . . . . . . . . . . . . . . . . . . 192.8 Generalisatie en specialisatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.9 Aggregatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.10 Voorbeelden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 SQL: Data Definition/Manipulation Language 263.1 Voorbeeld van een eenvoudige databank . . . . . . . . . . . . . . . . . . . . . . . . 263.2 Maken van nieuwe tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.3 Verwijderen van tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.4 Beperkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.5 Invoeren, wijzigen en verwijderen van gegevens. . . . . . . . . . . . . . . . . . . . . 293.6 Inhoud van de tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4 SQL: het vraagtaal gedeelte 324.1 Componenten van de SELECT-instructie . . . . . . . . . . . . . . . . . . . . . . . 324.2 De FROM-component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.3 De WHERE-component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.4 Gegevens uit meerdere tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.5 GROUP BY en HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.6 De subquery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.7 Combineren van select-instructies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.8 Select-instructie : de join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

5 Online analytical processing 485.1 Definities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.2 Een multi-dimensioneel model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.3 Aggregatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.4 Hierarchien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.5 Implementatie issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.6 Laden van een data warehouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6 Information retrieval 576.1 Situering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.2 Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.3 Gelijkaardigheid en relevantie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606.4 Oracle Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

I

Page 3: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

7 SQL: aanvullingen 687.1 Versies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687.2 Gegevens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687.3 Domeinen en tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687.4 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697.5 Beveiliging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707.6 Beperkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717.7 DDL statements voor wijzigingen in structuren . . . . . . . . . . . . . . . . . . . . 727.8 Uitbreidingen in SQL3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

8 PL/SQL 758.1 Structuur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758.2 Declaraties van variabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758.3 Toekenningen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768.4 Controle structuren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778.5 Functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788.6 Intermezzo: bind variabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808.7 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818.8 Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828.9 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848.10 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

9 Analyse van gegevens: normalisatie 889.1 Eerste normaalvorm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889.2 Tweede normaalvorm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899.3 Derde normaalvorm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909.4 Normalisatie: een eindpunt? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919.5 Een tweede voorbeeld op normalisatie. . . . . . . . . . . . . . . . . . . . . . . . . . 919.6 Oefening. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

10 Information retrieval: aanvullingen 9310.1 Indexeren van tekst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9310.2 Tonen van de tekst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9410.3 Parameters bij een context index . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9410.4 Thesaurus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9910.5 Classificeren van documenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

A Oracle SQL*Plus 107

B Oefening: databanken 108B.1 Beschrijving van de gegevens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108B.2 Eenvoudige SQL statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109B.3 Bewerkingen op verzamelingen en views . . . . . . . . . . . . . . . . . . . . . . . . 110B.4 Join van tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110B.5 Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111B.6 Teksten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111B.7 OLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112B.8 Functies en triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

II

Page 4: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

1 Database management systemen.

1.1 Objectieven

Een database management systeem (DBMS) bestaat uit een verzameling inter-gerelateerde dataen een verzameling programma’s om toegang te hebben tot deze data. De verzameling gegevenswordt meestal database genoemd. De belangrijkste doelstelling van een DBMS is een omgeving terealiseren waarin men informatie kan opvragen en aanpassen in de database op een zo gemakkelijken efficient mogelijke manier.

Meestal bestaan er verschillende relaties tussen de verschillende verzamelingen gegevens in eenorganisatie. Bijvoorbeeld bij de verzameling leveranciers en de verzameling klanten kan het zijndat een bepaalde klant ook leverancier is. Wanneer zijn adres op de twee plaatsen gestockeerdwordt, is dit redundantie en kan dit leiden tot tegenstrijdigheden. Wanneer deze gegevens centraalop een plaats gestockeerd worden, spreekt men van een database of gegevensbank.De verschillende applicaties refereren allen naar een en dezelfde database. Dit gebeurt via eengemeenschappelijk software blok voor de file toegang, waarin de sequentiele of directe bestands-organisatie geimplementeerd wordt.Voorbeeld: een applicatie verwerkt een aantal met elkaar verbonden dataelementen uit records diezich in verschillende files bevinden. Hiervoor moeten de indextabellen geraadpleegd worden om defysische lokaties van de verschillende records in de verschillende files te vinden. Dan kunnen dezerecords gelezen worden en kunnen de dataelementen uit deze records gehaald worden. Dus in deprogrammatuur van zo’n applicatie wordt gebruik gemaakt van fysische lokaties en van bestands-en recordstructuren. Wanneer een nieuw dataelement wordt toegevoegd aan een record, wat duseen nieuwe record structuur geeft, moeten alle programma’s die dit record gebruiken aangepastworden; zelfs deze waarvoor het nieuwe dataelement irrelevant is.Ideaal gezien zouden applicatieprogramma’s moeten in staat zijn toegang te krijgen tot gegevensin een database onafhankelijk van de fysische structuur van de gegevensbank. Dus een programmazou moeten in staat zijn enkel die dataelementen te vragen en te krijgen van de databank, zonderdaarvoor de gehele verzameling van records waarin deze dataelementen zitten te moeten verwerken.Om dit te realiseren worden sinds de beginjaren ’70 database management systemen (DBMS)ontwikkeld. Een DBMS is een bijkomende software laag tussen de file toegang software en deapplicatieprogramma’s, zoals voorgesteld in figuur 1.

database

file

access

software

DBMS

applicatieprog.batch en on-line

Figuur 1: De verschillende toegangen tot de databank

Definitie van een databank volgens C. Date:

A database is a computerized system whose overall purpose is to maintain informationand to make that information available on demand.

De rol van het DBMS:

1. Het organiseren van de gegevens volgens de globale logische structuur (het schema) en defysische opslag.

1

Page 5: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

2. Toegang verschaffen aan de verschillende applicatieprogramma’s zodat voldaan wordt aande verschillende vereisten van de gebruikers (de subschema’s = logische structuur van dedatabase zoals de gebruiker die nodig heeft).

Een belangrijke bijkomende faciliteit van een DBMS pakket is een vraagtaal (query language).Dit is een voorbeeld van een vierde generatietaal: een verzameling gemakkelijk te gebruiken com-puterinstructies. Deze laten een computerleek toe om een specifiek dataelement uit de databaseop te vragen, toe te voegen, te wijzigen of te verwijderen.Voordelen van een DBMS:

Gegevensintegratie: men vermijdt duplicatie en dus ook tegenstrijdigheden in de gegevens.Door de gegevens slechts eenmaal te stockeren wordt een minimum aan geheugencapaciteitgebruikt en wordt ook de onderhoudskost gereduceerd.

Gegevensonafhankelijkheid: d.m.v. de scheiding tussen de fysisch gestockeerde gegevensbe-standen en de programma’s die gebruik maken van deze gegevensbestanden. Dit laat aande verschillende toepassingen toe om een andere visie te hebben op dezelfde gegevens. Enbij wijzigingen in de database ondervinden de applicatieprogramma’s daar niet de minstehinder van.

Gegevensintegriteit: omwille van de gecentraliseerde controle over deze gegevens (de functievan de database administratie): garanderen van bepaalde beperkingen of condities en debeveiliging (wie welke gegevens kan raadplegen, toevoegen, wijzigen, verwijderen).

1.2 Schema’s

Databases veranderen gedurig omdat informatie toegevoegd en verwijderd wordt. De verzamelinginformatie die op een bepaald ogenblik in de database aanwezig is, wordt een instance van dedatabase genoemd. Het globale ontwerp van de database wordt schema genoemd. Schema’sveranderen zeldzaam, soms zelfs niet. De concepten schema en instance kunnen vergeleken wordenmet type definitie en variabele deklaratie in een programmeertaal.Er bestaan verschillende schema’s in een database: op het laagste niveau van abstractie vindenwe het fysisch schema terug; op het intermediaire niveau hebben we het conceptuele schema; enop het hoogste niveau zijn verschillende subschema’s gedefinieerd.

fysisch

level

conceptueel

level

view 2XXXXXXXXX

view 1���������

view n...

Figuur 2: De drie niveau’s van data abstractie

Data abstractie. De database kan benaderd worden vanuit verschillende levels van abstractie(figuur 2):

• fysisch level: laagste niveau van abstractie: hier wordt aangegeven hoe de data in wezengestockeerd is door middel van complexe, gedetailleerde data structuren;

2

Page 6: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• conceptueel level: beschrijving van welke data in de database aanwezig is en welke relatiestussen deze informatie bestaat door middel van een klein aantal relatief eenvoudige struc-turen; dit is het level waarop de database administrator werkt, de persoon die beslist welkeinformatie in de database opgenomen wordt;

• view level: beschrijving van slechts een deel van de database; omwille van de omvang van degehele database kan het conceptuele level nog vrij complex zijn; veel gebruikers zijn echterniet geinteresseerd in alle informatie die in de database gestockeerd is, maar slechts in eengedeelte; om de interactie van deze gebruikers met het systeem te vergemakkelijken wordtper specifieke gebruiker een view level gedefinieeerd.

Data onafhankelijkheid. Zoals reeds aangehaald zijn er drie niveau’s van abstractie. De mo-gelijkheid om een schema definitie in een niveau aan te passen zonder daarbij effect te hebben opde schema definitie van een niveau hoger, wordt data onafhankelijkheid genoemd.

• Fysische data onafhankelijkheid: de mogelijkheid om het fysisch schema aan te passen zon-der dat daarbij de applicatie programma’s moeten herschreven worden. Deze aanpassingenzijn soms nodig om de performantie te verbeteren.

• Logische data onafhankelijkheid: de mogelijkheid om het logische schema aan te passenzonder dat daarbij de applicatie programma’s moeten herschreven worden. Deze aanpas-singen zijn nodig telkens de logische structuur van de database verandert bijvoorbeeld doortoevoegingen van nieuwe informatie elementen.

Logische data onafhankelijkheid is moeilijker te verwezenlijken dan fysische data onafhankelijkheid:applicatie programma’s zijn meestal sterk afhankelijk van de logische structuur van de gegevens.

1.3 Data modellen

Om de structuur van een database te beschrijven, gebruikt men het concept van het data model.Een data model is een verzameling conceptuele hulpmiddelen voor het beschrijven van de gegevens,de relaties tussen deze gegevens, de semantiek van de gegevens en de beperkingen op deze gegevens.Er zijn drie invalshoeken: het object gebaseerde logische model, het record gebaseerd logischmodel en het fysisch gegevens model. De twee eerste modellen worden gebruikt om de gegevens tebeschrijven op het conceptuele en view level, terwijl het laatste gebruikt wordt voor de beschrijvingvan de gegevens op het laagste abstractie niveau.

1.3.1 Object gebaseerde modellen

departement

��@@@@��

L

���

��@@@@��

V

@@I

werknemer ��@@@@��

W project

In naaststaand ER-diagram wordt weerge-geven dat elke werknemer lid is (L) van eendepartement en aan verschillende projectenkan meewerken (W).Elk project wordt binnen een departementuitgevoerd (V).

Figuur 3: Entity-Relationship diagram

Deze modellen beschikken over vrij flexibele structureringsmogelijkheden, en laten expliciete spe-cificatie van de data beperkingen toe. Actueel zijn er zijn minstens dertig verschillende modellenbeschikbaar. De meest bekende zijn: entity-relationship model, binary model, semantic data modelen infological model.

3

Page 7: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Het entity-relationship (E-R) data model is gebaseerd op een waarneming van de reele wereldbestaande uit een verzameling objecten, entiteiten, met daartussen een aantal relaties. Een entiteitis een object dat bestaat en onderscheidbaar is van andere objecten. Dit onderscheid wordtgerealiseerd door aan elke entiteit een verzameling attributen toe te kennen welke de entiteitbeschrijft. Een relatie is een associatie tussen verscheidene entiteiten. De verzameling van alleentiteiten van hetzelfde type en relaties van hetzelfde type worden respektievelijk entity set enrelationship set genoemd.Het schema kan voorgesteld worden in een E-R diagram. Een voorbeeld is gegeven in figuur 3.

1.3.2 Record gebaseerde modellen

Deze modellen worden gebruikt om naast de globale logische structuur van de database ook eenbeschrijving te geven van de implementatie op een hoog niveau. Er is echter geen mogelijkheid omdata beperkingen te specificeren. De drie meest verspreide data modellen zijn: de hierarchischestructuur, de netwerkstructuur en de relationele structuur.

Hierarchische structuur : dit is een logische structuur waarbij elementen van de hierarchieslechts ondergeschikt kunnen zijn aan een ander element. Het element aan de top noemt men deroot.

vereiste opleiding vereiste ervaring opleiding ervaring kinderen

taakbeschrijving werknemer

afdeling

Figuur 4: Het hierarchisch model

Er kunnen dus enkel zuiver hierarchische verbanden tussen entiteiten opgeslagen worden. Menkan dus vlot aangeven dat een bedrijf (figuur 4) bestaat uit departementen en elk departement uitafdelingen, en dat in elke afdeling een aantal werknemers zijn die elk een aantal kinderen hebben.Maar van zodra enige van die kinderen gemeenschappelijk zijn aan twee werknemers is de zuiverhierarchische structuur verstoord en moet men die kinderen twee maal registreren of een anderekunstgreep uithalen.In een hierarchische databank kan een entiteit meerdere ondergeschikte entiteiten hebben. Ditbetekent dat men in een hierarchische databank kan opnemen dat elke werknemer behalve eenaantal kinderen ook een aantal diploma’s heeft. Omwille van deze hierarchische structuur is dekontrole gemakkelijk maar is het geheel weinig flexibel.

Departement

naam lokatie . . .

Werknemer

naam adres . . .

Project

naam startd . . .

Een Record is een verzameling vel-den. Records van hetzelfde type wor-den gegroepeerd in Record-types.Een Parent-Child relationship type(PCR-type) is een 1 : N relatie tus-sen twee Record types: langs de enekant: een parent record type en langsde andere kant een child record type.

4

Page 8: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Een hierarchisch database schema bevat een aantal hierarchische schema’s. Een hierarchisch sche-ma bevat een aantal Record-types en PCR-types en heeft volgende eigenschappen:

• Er is een Record-type dat in geen enkel PCR-type een child is: dit is de root.

• Elk Record-type, behalve de root, is steeds een child in juist een PCR-type.

• Een Record-type kan parent zijn in nul of meerdere PCR types.

Een eerste probleem in dit model is dat M : N relaties niet zo maar kunnen voorgesteld worden.Bijvoorbeeld, bij een project zijn verschillende werknemers betrokken en een werknemer kan inverschillende projecten ingeschakeld worden.Dit wordt opgelost door records te dupliceren:

Project

Werknemer

A

�� @@W1 W2 W3

B

�� AAW2 W4

C

�� @@W1 W3 W4

of andersom:Werknemer

Project

W1

�� AAA C

W2

�� AAA B

W3

�� AAA C

W4

�� AAB C

Er is ook een meer gesofistikeerde oplossing.Een virtueel record type (VC) (of pointer) is een Record-type waarvan elke instantie een pointerbevat naar een record van een ander type (VP). Op die manier wordt een virtuele parent-childrelatie voorgesteld tussen een het virtueel child (VC) en de virtuele parent (VP).Met deze virtuele parent-child relaties kunnen M : N relaties voorgesteld worden als 1 : N relaties:

Project

Wpointer ��- Werknemer

A

�� @@e1 e2 e3

���

-W1

- W2

-

B

�� AAe4 e5

�����

-

W3

-W4

C

�� @@e6 e7 e8

�����

-

-

-

De relatie tussen Werknemer en Wpointer is een 1 : N relatie en is dus van het PCR type. Zo’nrelatie wordt een virtuele parent-child relatie (VPCR type) genoemd. Werknemer is de virtueleparent en Wpointer is de virtuele child. Conceptueel zijn PCR en VPCR types hetzelfde. Hetverschil ligt bij de implementatie. Een PCR type wordt gewoonlijk geımplementeerd als eenhierarchische sequentie. Bij een VPCR type wordt gebruik gemaakt van een pointer van devirtuele kind-record naar de virtuele parent.

Een tweede probleem treedt op wanneereen Record-type een child is van meerdan een PCR-type. Bijvoorbeeld eenwerknemer die lid is van een departe-ment en ook aan een project werkt.Dit kan weer opgelost worden door zeerveel records te dupliceren.

Departement

Werknemer

ProjectXXXXXXXXXXXX ?

5

Page 9: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Het probleem dat een Record-type child is in meer dan een PCR type, kan ook opgelost wordenmet VPCR types:

Departement

Vpointer Project

Wpointer

Werknemer

??

Netwerkstructuur : in een dergelijke structuur zou elk element in relatie kunnen staan met elkander element. Deze structuur is natuurlijk veel flexibeler dan de hierarchische structuur, maarbiedt veel moeilijker kontrole.

werknemer A

����

����

((((((((

((((((((

((((

werknemer B

@@@@

����

werknemer C

@@@@

project 1 project 2

Figuur 5: Het netwerk model

Voorbeeld: Gegevens over een aantal projecten en een aantal werknemers (figuur 5): elk projektkan in principe elke werknemer gebruiken, en elke werknemer kan in principe bij elk projektbetrokken zijn.De fysische opslag van de gegevens gebeurt natuurlijk niet volgens de logische structuur (bijv.in niveaus) maar gewoon lineair. De logische structuur wordt opgebouwd met behulp van links(verwijsadressen die in een apart veld van het gegevenselement worden geplaatst). De structuurvan een netwerk databank wordt hierdoor vrij complex, en een probleem is dat men alle mogelijkeverbanden tussen entiteiten op voorhand (dus bij het ontwerp) moet specificeren.Het netwerk model kan gezien worden als een ER-model, beperkt tot binaire veel-op-een relaties.Er zijn twee belangrijke elementen:

1. logisch record type: te vergelijken met de entity-verzameling, bevat dus een aantal records;

2. link: een veel-op-een binaire relatie: een connectie tussen twee logische record types, name-lijk tussen het lid type naar het eigenaar type.

De voorstelling gebeurt met ovalen en pijlen:��

��Departement

������*

HHHH

HHY

����Werknemer �����werkt aan -����Project

Vier logische record types.Vier links:

- Departement (eigenaar van lid) Werknemer- Departement (eigenaar van lid) Project- Werknemer (eigenaar van lid) werkt aan- Project (eigenaar van lid) werkt aan

Relationele structuur : in een relationele databank zijn geen expliciete links aanwezig, en alleinformatie (entiteiten en relaties ertussen) wordt uniform voorgesteld in tabellen die men relatiesnoemt.Voordelen:

6

Page 10: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

wnr naam adres124 Appels Genk167 Aerts Gent482 Bols Geel512 Dams Bree

wnr pro124 24167 135167 739482 135512 739

pro naam startd24 karton 15/11/2001

135 pennen 07/02/2002739 dozen 23/01/2002

Tabel 1: Het relationele model

1. zeer eenvoudig model, gegrondvest op een stevige mathematische basis;

2. files waarin de gegevens opgeslagen worden hebben een eenvoudige structuur, verwant metklassiek geındiceerde bestanden;

3. eindgebruiker kan zich deze relaties gemakkelijk voorstellen als gewone tweedimensionaletabellen;

4. op deze relaties (tabellen) zijn een aantal bewerkingen mogelijk (bijv. selectie, projectie,join), die de basis vormen van een relationele taal. Zo’n bewerking gebeurt op de relatie alsgeheel i.p.v. record per record verwerking:

selectie: bepaling van een aantal tuples die aan een voorwaarde voldoen;

projectie: maken van een relatie die uit een deelverzameling attributen van een gegevenrelatie bestaat;

join: creatie van een nieuwe relatie met tuples uit twee oorspronkelijke relaties.

Ook uit de verzamelingenleer zijn een aantal bewerkingen overgenomen.

selectie projectie

(natuurlijke) join

a3

a2

a1

b2

b1

b1

b3

b2

b1

c3

c2

c1

a3

a2

a1

b2

b1

b1

c2

c1

c1

unie intersectie verschil cartesisch produkt

cb

ayx

b

aa

ccb

xyx

yxy

Figuur 6: Traditionele set operatoren en speciale relationele operatoren

Het belangrijkste nadeel dat nu nog aan relationele databanken kleeft is de lagere efficientie, maarbetere algoritmes (o.a. zoekstrategieen), snellere machines en gespecialiseerde hardware zullen ditin de toekomst zeker verhelpen.

1.4 Data definitie taal en data manipulatie taal

Een database schema wordt gespecificeerd door een verzameling definities neergeschreven in eenspeciale taal, de data definition language (DDL). Het resultaat van de compilatie van DDL sta-

7

Page 11: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

tements is een verzameling tabellen welke in een speciale tabel gestockeerd worden, namelijk dedata dictionary of directory.Een data dictionary is een bestand dat metadata bevat: “data over data”. Dit bestand wordtgeconsulteerd telkens echte data gelezen of aangepast wordt in het database systeem.Een speciaal type van DDL is de data storage and definition language. Deze wordt gebruikt omgeheugen structuur en de access metodes te specificeren. De implementatie details van de databaseschema’s worden hiermee verborgen gehouden voor de gewone gebruiker.

Data manipulatie omvat:

• opvragen van informatie

• toevoegen van nieuwe informatie

• verwijderen van informatie

Een data manipulation language (DML) is een taal die de gebruikers in staat stelt toegang tehebben tot de data. Er zijn twee types: procedureel waarbij de gebruiker specificeert welke datahij nodig heeft en hoe hij deze kan vinden en niet-procedureel waarbij de gebruiker alleen moetspecificeren welke data hij nodig heeft.Niet-procedurele talen zijn gewoonlijk gemakkelijker aan te leren en te gebruiken dan procedurele.Maar ze kunnen code genereren die niet erg efficient is zodat optimisatie technieken nodig zijn.Een query is een statement om informatie op te vragen. Dat deel van een DML dat betrekking heefttot informatie opvraging, wordt een query language (vraagtaal) genoemd. Alhoewel het technischniet juist is, worden in praktijk vraagtaal en data manipulatie taal als synoniemen gebruikt.

1.5 Database administrator

Een van de belangrijkste redenen voor het hebben van een DBMS is de centrale controle overgegevens en de programma’s die deze gegevens bewerken. De persoon die de centrale controle overhet systeem heeft, wordt de database administrator (DBA) genoemd. Zijn functies omvatten:

• Definitie van het schema: de creatie van het eerste database schema: het schrijven vaneen verzameling definities welke door de DDL compiler vertaald worden in een verzamelingtabellen welke permanent in de data dictionary gestockeerd worden.

• Definitie van de geheugen structuur en access methodes: een verzameling definities omtrentde fysische organisatie.

• Aanpassingen aan het schema en de fysische organisatie.

• Toegang verlenen aan de verschillende gebruikers: aangeven welke delen van de databasekunnen gebruikt worden door welke gebruikers. Niet elke gebruiker heeft behoefte aan ofheeft toelating tot alle gegevens in de database en daarom wordt hem eventueel slechtsbeperkte toegang gegeven.

• Specifikatie van de integriteitsbeperkingen: deze worden in een speciale systeemstructuurbewaard en geraadpleegd telkens er een update van een gegeven gedaan wordt. De data inde database moet voldoen aan bepaalde types van consistentie beperkingen. De beperkingenmoeten gecontroleerd worden telkens er een aanpassing aan de data gebeurt; indien er nietaan voldaan is moet een aangepaste actie uitgevoerd worden.

• Ontwikkelen van backup procedures: om de gegevens te kunnen herstellen na een faling vanhet systeem.

1.6 De architectuur van een DBMS

In figuur 7 worden de verschillende onderdelen van een DBMS getoond. Onderaan is de plaatsvoorgesteld waar de data gestockeerd wordt; gewoonlijk is dit een of meerdere disks. Deze compo-nent bevat niet alleen gewone, echte data maar ook metadata. Dit is informatie over de structuurvan de data. Bij een R-DBMS bijvoorbeeld bevat de metadata de namen van de relaties, de namen

8

Page 12: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

van de attributen van deze relaties en de datatypes van deze attributen (integer, string, ...). EenDBMS bevat normaal ook indexen voor de data. Een index is een datastructuur die het zoekenvan informatie in de databank versnelt.

aanpassingenXXXXXXz

queries

?

schema aanpassingen������9“Query”Processor

6

?

HHjHHY

TransactionManager

��*���StorageManager

6

?������XXXXXXXXXXXX���

���

Data

MetadataXXXXXX������

Figuur 7: Belangrijkste componenten van een DBMS

Storage manager. Zijn taak bevat het ophalen van de gevraagde data uit de databank en hetaanpassen van de informatie op aanvraag van de bovenliggende niveaus. In een eenvoudig DBMS isdeze component gewoon het filesysteem van het onderliggende besturingssysteem. De naakte datawordt op disk gestockeerd waarbij het filesysteem gebruikt wordt dat normaal deel uitmaakt vanhet besturingssysteem. De storage manager vertaalt de verschillende DML statements in low-levelfilesysteem commando’s en is dus verantwoordelijk voor de daadwerkelijke stockage, opvragen enaanpassen van de data in de databank. Omwille van de efficientie beheert een DBMS meestal zelfde data op de disk. Er zijn twee onderdelen:

file manager : beheert de locatie van de bestanden op de disk; levert het blok of de blokken vaneen bestand op aanvraag van de buffer manager;

buffer manager : stockeert het door de file manager geleverde blok in een pagina van het primairgeheugen; dit blok blijft gedurende een bepaalde tijd in primair geheugen zodat anderequeries deze data ook kunnen gebruiken zonder dat er van disk gelezen moet worden; na eentijd, wanneer er geen aanvragen voor dat blok meer blijken te zijn, wordt de pagina voor eenander net ingelezen blok gebruikt.

Query processor. Deze component doet meer dan queries afhandelen. Ook de vragen vooraanpassingen van de data en de metadata passeren via de query processor. Deze vragen wordenmeestal uitgedrukt in een taal van hoog niveau (bijv. SQL). De query processor vertaalt de vraagnaar een reeks bevelen die naar de storage manager gestuurd worden, die ze dan zal uitvoeren.Het moeilijkste deel is de query optimisatie: de keuze van een goede opeenvolging van data-aanvragen aan het storage systeem zodat snel de gevraagde data gevonden wordt. Hiervoor wordenindexen gebruikt, maar ook de volgorde waarin de verschillende stappen van een complexe queryuitgevoerd worden is meestal bepalend voor de snelheid.

Transaction manager. Deze component is verantwoordelijk voor de integriteit van het systeem.Hij moet verzekeren dat verschillende queries die simultaan lopen niet met elkaar interfereren.

9

Page 13: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Concurrentie controle: wanneer verschillende gebruikers de database gelijktijdig aanpassen, is deconsistenstie van de data misschien niet meer gegarandeerd. Het is noodzakelijk voor het systeemom de interactie tussen de verschillende gelijktijdige gebruikers te controleren. Het systeem magook geen data verliezen, zelfs bij een systeemcrash.Via de interactie met de query processor komt de transaction manager te weten op welke data deactuele queries operaties uitvoeren zodat conflicterende acties kunnen vermeden worden. Het ismogelijk om bepaalde queries of operaties uit te stellen zodat er geen conflicten optreden.Er is ook interactie met de storage manager: voor de bescherming van de data moet er gewoonlijkeen log bijgehouden worden van de veranderingen op de data. Bij een goede ordening van deoperaties zal de log een lijst van een aanpassingen bevatten die na een systeemcrash terug kunnenuitgevoerd worden.

Invoertypes. Men kan vier types van gebruikers onderscheiden: naıeve gebruikers via applica-tie interfaces, applicatie programmeurs via applicatieprogramma’s, gesophisticeerde gebruikers viaqueries en database adminstrators die zich bezig houden met het schema van de databank.

Queries : vragen naar informatie. Zo’n vraag kan op twee manieren gegenereerd worden. Viaeen generisch query interface kunnen SQL statements ingetikt worden. Deze worden door-gegeven aan de query processor die een antwoord teruggeeft. Een andere manier zijn deapplication program interfaces. In een gebruiksvriendelijk programma (met GUI) kan de ge-bruiker aangeven welke gegevens gewenst zijn; het programma zet deze vraag zelf om in SQLstatements die door de query processor uitgevoerd worden. Het resulaat wordt zo elegantmogelijk aan de gebruiker gepresenteerd.

Aanpassingen : operaties om de gegevens te veranderen; eventueel zijn dit toevoegingen ofworden er gegevens verwijderd. De manier waarop is zoals bij queries.

Schema aanpassingen : commando’s die gewoonlijk gegeven worden door geauthoriseerd per-soneel, bijvoorbeeld de database administrator, die de toelating hebben om het schema aante passen of een nieuwe databank te creeren.

1.7 Client-server architectuur

In een client-server architectuur worden aanvragen door een proces (de client) verzonden naar eenander proces (de server) om daar uitgevoerd te worden. In een databanktoepassing is het volledigeDBMS een server, behalve de query interfaces die interageren met de gebruiker. De client stelt eenvraag mbv. SQL naar de server. De database server antwoordt in de vorm van een tabel of eenrelatie. Er is wel een trend om meer werk door de client te laten doen omwille van het ontstaanvan een bottleneck in de server wanneer er zeer vele simultane databankgebruikers zijn.

Historisch overzicht. De eerste database toepassingen draaiden op grote centrale computersvia domme terminals en later intelligente terminals of workstations. Omdat alles vrij duur was,werd de interactie met de computer beperkt via batch data aanvragen naar de centrale computer(figuur 8).Data opvragen en display werd op terminals gedaan. Deze configuratie wordt nog steeds veelgebruikt. Er is wel een evolutie zodat de applicaties op de centrale computer een betere gebrui-kersinterface kregen. Display gebeurt nog steeds op een terminal maar de verwerking van degebruikersinteractie wordt uitgevoerd door de centrale computer (figuur 9).Dit vereiste meer computerkracht omdat de computer nu niet alleen de aanvraag voor gegevens-verwerking moet behandelen maar ook de interacties van elke individuele gebruiker.Met de introductie van PCs met voldoende lokale verwerking en stockage mogelijkheden, werdenprogramma’s zoals dBase en Lotus enorm populair (figuur 10). Gebruikers konden nu zelf huneigen lokale data bewerken afzonderlijk van de gegevens gestockeerd in de grote centrale computer.Deze PCs boden ook een meer grafische userinterface (GUI) die gemakkelijker om te gebruikenwas en ook interactiever. Echter, elke nieuwe PC applicatie stockeerde de data op zijn eigen

10

Page 14: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

DataDBMS

centrale

host computer

#" !#" !#" !

-data

� batch data aanvraag

Figuur 8: Verwerking gebaseerd op terminals

DataDBMS

toepassingfront-end

centrale

host computer

#" !#" !#" !

-user interface toontgevraagde data

� data aanvraag en gebruikersreactie

Figuur 9: Gebruikersinterface op host

manier zodat snel data op de meest verschillende plaatsen en in de meest verschillende formatengestockeerd werd.Volgende stap was de introductie van een LAN. Gebruikers gingen hun PCs met elkaar verbinden,waarbij ook een file-server voorzien werd om gemeenschappelijke data te stockeren (figuur 11). Defile-server computer had als taak de gegevens te bewaren en volledige bestanden naar PCs door tezenden wanneer deze er om vroegen. De PC kreeg zo meer tijd om de data lokaal te verwerken.Deze methode werkte goed zolang het aantal gebruikers en de hoeveelheid data dat op de file-serveraanwezig is, beperkt bleef. De file-server werd echter snel een bottleneck bij het bewaren van grotehoeveelheden data of wanneer meer en meer gebruikers de centraal gestockeerde data begonnenop te vragen. Er ontstond zo ook een verhoogde trafiek op het netwerk. Daarenboven was defile server niet voldoende in staat om een aantal bijkomende taken te vervullen: beveiliging enonderhoud van de integriteit van de data, afhandelen van concurrente updates door verschillendegebruikers, backup en herstel procedures.

Client-database-server architectuur. De tekorten van de file-server technologie hebben totde ontwikkeling van producten geleid die de C/S architectuur gebruiken. Deze configuraties pro-beren op de beste manier gebruik te maken van zowel hardware als software hulpmiddelen doorde functies op te delen in twee:

• het front-end gedeelte van de toepassing dat uitgevoerd wordt op client computers of work-

Applicatiedraaiend op PCdata manager

Data

Bijvoorbeeldspreadsheet, database,

grafieken, presentaties, ... die draaien op PC hardware

#" !

Figuur 10: Stand-alone applicaties

11

Page 15: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Dataindividuele applicatie

data managerLAN OS

LAN file-servercomputer

Elke applicatie onderhoudtzijn eigen gegevens

op de file server

PPPP

PPiVolledige bestandenworden naar

PC teruggestuurd

CCCCCCC

?

Aanvragen voordata-bestanden

ToepassingToepassingsdatamanager

LAN OS

PCs en workstations op een LAN#" !#" !#" !

Figuur 11: File Server architectuur

stations;

• de back-end database server, welke de data stockeert en aanvragen afhandelt.

Figuur 12 illustreert deze architectuur met een database server. Data op de database server wordtslechts eenmaal gestockeerd en kan tegelijk (concurrent) opgevraagd worden door vele verschillendeapplicaties, o.a. databases, spreadsheets en tekstverwerkers. De database server verwerkt de data-aanvragen en stuurt alleen de gevraagde data terug naar de applicaties op de client PCs. De PC isalleen verantwoordelijk voor de applicatie van de gebruiker: de afhandeling van de interactie metde gebruiker en het genereren van data-aanvragen. In plaats van het verwerken van de data, kande client PC zich focusseren op de gebruikersapplicatie met behulp van steeds meer gesofistikeerdeGUIs beschikbaar op PC of workstations. De database server houdt zich alleen met databasebeheer bezig en kan dus zorgen voor het onderhoud van de gegevens-integriteit, foutafhandelingen beveiligingscontrole. Daarenboven wordt ook de mogelijkheid voor de gebruiker geboden omconcurrent toegang tot gegevens te hebben en deze ook aan te passen.Voordelen van client-server verwerking:

• Een efficientere verdeling van het werk. Zowel de client als de server krijgen taken toege-wezen waarvoor ze het beste geschikt zijn. De client computer neemt de presentatie vaneen grafische user interface voor zich, o.a. het afhandelen van de interactie tussen gebrui-ker en toepassing. De database server houdt zich onledig met de verwerking van grotevolumes data op een hoog-performante manier met controles voor beveiliging, integriteit enconcurrency.

• Mogelijkheden voor zowel horizontale als vertikale schaling van de resources om de takenuit te voeren. Horizontaal, door de dataverwerkingsjobs (opvragen en updates) te verdelenover de verschillende processoren op het netwerk. Vertikaal door het RDBMS te verhuizennaar een grotere, krachtigere computer.

• Toepassingen op basis van de C/S architectuur kunnen gemakkelijker op een kleinere clientcomputer uitgevoerd worden met een betere performantie. Omdat het merendeel van het

12

Page 16: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Data(back-end)

or relationeel DBMSDatabase manager

LAN OS

LAN file-servercomputer met

database-serversoftware

Een database manager controleerten onderhoudt stockage van alle

gegevens op file server

PPPP

PPiAlleen gevraagdedata wordt naarPC teruggestuurd

CCCCCCCC

?

High-levelaanvragen voor

specifieke data

Toepassing(front-end)LAN OS

PCs en workstations op een LAN#" !#" !#" !

Figuur 12: Client-Server architectuur

database werk offloaded is naar de server, kan een goedkopere PC gebruikt worden voor deapplicatie zelf. Ook de trafiek op het netwerk is gereduceerd omdat de applicaties alleenspecifieke data aanvragen naar de server sturen en omdat alleen de gevraagde data door deserver naar de client teruggestuurd wordt.

• Gebruikers kunnen hun vertrouwde en favoriete tools op PC blijven gebruiken. Een grootdeel van de bestaande applicaties zijn reeds aangepast zodat ze data op servers kunnenopvragen. Nieuwe applicaties worden zodanig geschreven dat ze kunnen gebruik maken vande C/S configuraties. Omdat betere en eenvoudigere tools het ontwikkelen van toepassingengemakkelijker maken, kan het voorkomen dat de eindgebruiker zijn eigen toepassing zelfontwerpt waardoor de ontwikkelingstijd gereduceerd wordt.

• Clients hebben toegang tot meer data. Door de standaard SQL die op heel wat serversgebruikt wordt, kan men toegang tot data krijgen op een grote verscheidenheid van machinesen wordt het overdragen van de applicatie naar een ander platform gemakkelijker.

• Belangrijke, waardevolle gegevens kunnen op de juiste manier beveiligd worden tegen ver-lies of niet toegelaten gebruik. Dataverwerking wordt uitgevoerd op het centrale DBMS,die hiervoor specifiek uitgerust is. Belangrijke aspecten van database toepassingen zoalsbeveiliging, gegevensintegriteit, concurrency. backup en recovery worden terug door gespe-cialiseerde informatici uitgevoerd.

• Goedkopere en krachtigere PC hardware en software resulteren in oplossingen die gemak-kelijker te implementeren zijn dan de klassieke database toepassingen.

13

Page 17: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

2 Analyse van gegevens: entity-relationship model

2.1 Entiteiten en entiteit-verzamelingen

Een entiteit is een object dat bestaat en onderscheidbaar is van andere objecten. Bijvoorbeeld JanPeeters met studentnummer 89204 is een entiteit omdat het op een unieke manier een specifiekepersoon in het universum identificeert. Een entiteit kan concreet zijn, zoals een persoon of eenboek, of abstract zoals een vakantiedag of een concept.Een entiteit-verzameling is een verzameling van entiteiten van hetzelfde type. De verzamelingvan alle personen die aan een bepaald instituut studeren, kan gedefinieerd worden als de entiteit-verzameling student. Entiteit-verzamelingen moeten niet disjunct zijn. Het is bijvoorbeeld moge-lijk de entiteit-verzameling docent en de entiteit-verzameling student van een bepaald instituut tedefinieren. Een persoon entiteit kan een student entiteit of een docent entiteit of beiden zijn.Een entiteit wordt voorgesteld door een verzameling attributen. Mogelijke attributen voor destudent entiteit zijn snaam, studnr, straat en woonplaats. Voor elk attribuut bestaat er een ver-zameling van toegelaten waarden, het domein van dat attribuut. Het domein van het attribuutnaam kan bijvoorbeeld de verzameling van alle tekst strings met een bepaalde lengte zijn.Formeel is een attribuut een functie die een entiteit-verzameling afbeeldt op een domein. Dus elkeentiteit wordt beschreven door een verzameling van (attribuut, waarde) paren, een paar voor elkattribuut van de entiteit-verzameling.In de volgende voorbeelden zullen volgende entiteit-verzamelingen gebruikt worden:

• student met attributen snaam, studnr, straat en woonplaats;

• biografie met attributen geboortepl en geboortedat;

• docent met attributen dnaam, docnr en acadgr;

• vak met attributen vnaam, uren en vaknr;

• richting met attributen fase, opleiding en minor;

• uitslag met attributen percentage en vermelding.

Een databank is een collectie van entiteit-verzamelingen, welke elk een aantal entiteiten van het-zelfde type bevatten.

2.2 Attributen

Sommige attributen kunnen verdeeld worden in kleinere delen met een eigen betekenis. Een adresattribuut bijvoorbeeld kan onderverdeeld worden in een straatadres, postcode en woonplaats. Eenattribuut dat is samengesteld uit een aantal attributen wordt samengesteld genoemd, terwijlattributen die ondeelbaar zijn eenvoudig of atomisch genoemd worden. Samengestelde attribu-ten kunnen een hierarchie vormen; straatadres bijvoorbeeld kan verder onderverdeeld worden instraatnaam, nummer en busnr. Samengestelde attributen zijn nuttig wanneer een gebruiker somshet samengestelde attribuut als een eenheid wil beschouwen en op andere momenten specifiek decomponenten wil refereren.De meeste attributen hebben een enkelvoudige waarde voor een specifieke entiteit; zij wordensingle-valued genoemd. De entiteit Student bijvoorbeeld heeft een waarde voor het attribuutleeftijd. In sommige gevallen kan een attribuut een verzameling van waarden hebben voor eenspecifieke entiteit. Het attribuut academische graad kan voor sommige personen leeg zijn, anderepersonen hebben een academische graad, terwijl er ook personen zijn met twee of meer academischegraden. Zo’n attributen worden multi-valued genoemd. Een multi-valued attribuut kan eenbeneden- en bovengrens hebben op het aantal waarden voor een individuele entiteit.In sommige gevallen kunnen twee (of meer) attributen met elkaar gerelateerd zijn, bijvoorbeeldleeftijd en geboortedatum van een persoon. Voor een specifieke persoon kan de waarde van leeftijdbepaald worden op basis van de huidige datum en de waarde van geboortedatum. Het leeftijd

14

Page 18: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

attribuut wordt het afgeleide attribuut genoemd en is dus afleidbaar van het geboortedatumattribuut. Sommige attribuut waarden kunnen afgeleid worden van gerelateerde entiteiten; bij-voorbeeld het aantal werknemers attribuut van een departement entiteit kan berekend wordendoor het aantal werknemers in dat departement te tellen.Soms heeft een specifieke entiteit geen realistische waarde voor een attribuut, bijvoorbeeld hetbusnr attribuut in een adres. In andere gevallen kan het zijn dat het attribuut wel betekenis heeftvoor de entiteit maar dat de waarde niet gekend is. Voor zo’n situaties is de speciale waarde nullgecreeerd. Deze waarde kan twee betekenissen hebben: niet van toepassing en ongekend.

2.3 Relaties en relatie-verzamelingen

Een relatie is een associatie tussen verschillende entiteiten. Men kan bijvoorbeeld een relatiedefinieren welke “Jan Peeters” associeert met richting “3cbio”. Deze relatie specificeert dat JanPeeters een student is die in het derde jaar zit van de opleiding chemie en daarin de minor biochemievolgt.Een relatie-verzameling is een verzameling van relaties van hetzelfde type. Formeel is het eenwiskundige relatie op n ≥ 2 entiteit-verzamelingen. Indien E1, E2, . . . , En entiteit-verzamelingenzijn, dan is de relatie-verzameling R een deelverzameling van

{(e1, e2, . . . , en) | e1 ∈ E1, e2 ∈ E2, . . . , en ∈ En}

waarbij (e1, e2, . . . , en) een relatie is.Tussen de twee entiteit-verzamelingen student en richting kan men de relatie-verzameling StRidefinieren welke een associatie tussen studenten en richtingen voorstelt. Deze relatie (StRi) iseen voorbeeld van een binaire relatie-verzameling, er zijn namelijk twee entiteit-verzamelingen bijbetrokken. Soms gebruikt men relatie-verzamelingen waarbij meer dan twee entiteit-verzamelingenbij betrokken zijn. De relatie SRU is gedefinieerd tussen drie verzamelingen en geeft weer dat eenstudent in een bepaalde richting een specifieke uitslag behaald heeft.De functie die een entiteit vervult in de relatie wordt rol genoemd. Normaal zijn rollen implicieten worden gewoonlijk niet gespecificeerd. Ze zijn nochtans nuttig wanneer de betekenis van eenrelatie moet verduidelijkt worden. Dit is het geval wanneer de entiteit-verzamelingen van eenrelatie-verzameling niet verschillend zijn. In de relatie-verzameling werkt-voor tussen geordendeparen van de docent entiteit kan het eerste element van het geordende paar de rol van managerhebben en het tweede de rol van ondergeschikte.Een relatie kan ook beschrijvende attributen hebben. Zo kan bis een attribuut zijn van de StRirelatie-verzameling. Dit attribuut specificeert of de student deze richting voor de eerste of detweede maal volgt.

2.4 Integriteitsbeperkingen

In het globale E-R schema kunnen bepaalde beperkingen gedefinieerd worden, waaraan de inhoudvan de databank moet voldoen. De bestaansbeperking is een beperking op het domein van waardendat een bepaald attribuut kan aannemen. Bijvoorbeeld moet de geboortedatum van een studentgelegen zijn na 1940.Een belangrijke beperking is de mapping cardinaliteit welke het aantal entiteiten weergeeft datmet een andere entiteit kan geassocieerd worden via een relatie-verzameling.Voor een binaire relatie-verzameling R tussen entiteit-verzamelingen A en B is de mapping cardi-naliteit een van de volgende.

• Een-op-een: een entiteit in A is geassocieerd met ten hoogste een entiteit in B, en eenentiteit in B is geassocieerd met ten hoogste een entiteit in A.

• Een-op-veel: een entiteit in A is geassocieerd met een willekeurig aantal entiteiten in B,maar een entiteit in B is geassocieerd met ten hoogste een entiteit in A.

15

Page 19: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• Veel-op-een: een entiteit in A is geassocieerd met ten hoogste een entiteit in B, maar eenentiteit in B kan met een willekeurig aantal entiteiten in A geassocieerd zijn.

• Veel-op-veel: een entiteit in A is geassocieerd met een willekeurig aantal entiteiten in B,en een entiteit in B kan met een willekeurig aantal entiteiten in A geassocieerd zijn.

Deze verschillende mapping cardinaliteiten zijn voorgesteld in figuur 13.

'

&

$

%a3

a2

a1

'

&

$

%b3

b2

b1

een-op-een

'

&

$

%a3

a2

a1

'

&

$

%b3

b2

b1

een-op-veel

`````````

'

&

$

%a3

a2

a1

'

&

$

%b3

b2

b1

veel-op-een

'

&

$

%a3

a2

a1

'

&

$

%b3

b2

b1

veel-op-veel

`````````

`````````

Figuur 13: De verschillende mapping cardinaliteiten

De juiste mapping cardinaliteit voor een specifieke relatie-verzameling is natuurlijk afhankelijk vande reele wereld welke men wil modelleren met de relatie-verzameling. Afhankelijk van instituuttot instituut kan een student slechts een of meerdere richtingen volgen. In de eerste geval is derelatie-verzameling StRi veel-op-een, in het tweede geval heeft men een veel-op-veel associatie.Een andere soort beperking is de bestaans-afhankelijkheid. Wanneer het bestaan van een entiteitx afhankelijk is van het bestaan van de entiteit y, dan is x bestaans-afhankelijk van y. Praktischbetekent dit dat wanneer y verwijderd wordt, ook x verdwenen is. Entiteit y is de dominanteentiteit en x is de ondergeschikte entiteit.Tussen de entiteit-verzamelingen richting en vak kan de relatie RiVak gedefinieerd worden. Dezespecificeert dat in een bepaalde richting verschillende vakken gedoceerd worden. Het is een een-op-veel relatie. Elke vak-entiteit moet met een richting geassocieerd zijn. Als de richting-entiteitverwijderd wordt, dan moeten alle ermee geassocieerde vakken verwijderd worden. Daarentegenkunnen vakken verwijderd worden zonder effect op de richting-entiteit. De entiteit-verzamelingrichting is dominant en vak is ondergeschikt in de RiVak relatie.

2.5 Primaire sleutels

Een belangrijke taak bij het opstellen van het database model is aangeven hoe entiteiten enrelaties onderscheiden worden. Conceptueel zijn individuele entiteiten en relaties verschillendmaar voor een database moeten deze verschillen uitgedrukt worden in termen van attributen. Omzo’n onderscheid te maken wordt aan elke entiteit-verzameling een supersleutel toegekend. Eensupersleutel is een verzameling van een of meerdere attributen welke tesamen de gebruiker toelateneen entiteit uniek te identificeren in een entiteit-verzameling. Het studnr attribuut van de entiteit-verzameling student is bijvoorbeeld voldoende om een student van een andere te onderscheiden.

16

Page 20: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Dus studnr is een supersleutel. Ook kan de combinatie snaam en studnr als supersleutel voor deentiteit-verzameling student genomen worden. Het snaam attribuut van de entiteit-verzamelingstudent is geen supersleutel omdat verschillende mensen dezelfde naam kunnen hebben.Wanneer K een supersleutel is, is ook elke superverzameling van K een supersleutel. Meestal ismen echter geınteresseerd in de kleinst mogelijke supersleutel, d.i. een supersleutel waarvan geenenkele eigenlijke deelverzameling ook een supersleutel is. Zulke minimale supersleutels wordenkandidaatsleutels genoemd.Het is mogelijk dat verschillende verzamelingen van attributen als kandidaatsleutel kunnen dienen.Een combinatie van snaam en straat kan bijvoorbeeld voldoende zijn om de verschillende elementenvan de entiteit-verzameling student te onderscheiden. Dus zowel {studnr} als {snaam,straat} zijnkandidaatsleutels.De term primaire sleutel wordt gebruikt om de kandidaatsleutel aan te duiden welke door dedatabase ontwerper gekozen is als voornaamste middel om entiteiten in een entiteit-verzamelingte identificeren.Het is mogelijk dat een entiteit-verzameling niet voldoende attributen heeft om een primairesleutel te vormen. Alhoewel elke vak entiteit onderscheidbaar is, kunnen vakken uit verschillenderichtingen dezelfde vaknr hebben. Dus heeft deze entiteit-verzameling geen primaire sleutel. Zo’nentiteit-verzameling krijgt de naam zwakke entiteit. Een entiteit met een primaire sleutel wordtsterke entiteit genoemd.Het concept van sterke en zwakke entiteiten is gerelateerd met het “bestaans afhankelijkheid”concept. Een sterke entiteit is per definitie een dominante entiteit, een zwakke entiteit is eenondergeschikte entiteit.Een zwakke entiteit heeft geen primaire sleutel. Toch moet er een middel zijn om tussen al dezeelementen van de entiteit-verzameling die entiteiten te onderscheiden die afhankelijk zijn van eenbepaalde sterke entiteit. De discriminator van een zwakke entiteit-verzameling is de verzamelingattributen die toelaat het onderscheid te maken. In het voorbeeld is vaknr de discriminator vande zwakke entiteit-verzameling.De primaire sleutel van een zwakke entiteit-verzameling wordt gevormd door de primaire sleutelvan de sterke entiteit-verzameling, waarvan ze bestaans-afhankelijk is, en haar eigen discriminator.Relatie-verzamelingen hebben ook primaire sleutels. Ze worden gevormd door de attributen vande primaire sleutels van de entiteit-verzamelingen die de relatie-verzameling definieren.

2.6 ER-diagram

De globale logische structuur van een databank kan grafisch voorgesteld worden door middel vaneen E-R diagram.

student

�� � studnr

PPPP

�� � snaam

@@@@@

�� � straat �� � woonplaats

������� � bis

���

@@@

@@@

���

StRi - richting

�� � fase

@@@@@

�� � opleiding �� � minor

�����

Figuur 14: Entity-Relationship diagram

Zo’n diagram bestaat uit de volgende componenten:

• Rechthoeken: voorstelling van entiteit-verzamelingen.

• Ellipsen (ovalen): voorstelling van attributen.

17

Page 21: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• Ruiten: voorstelling van relatie-verzamelingen.

• Lijnen: verbindingen van attributen aan entiteit-verzamelingen en entiteit-verzamelingenaan relatie-verzamelingen.

Bij elke component wordt ook de corresponderende naam weergegeven.Een voorbeeld van een E-R diagram is weergegeven in figuur 14. Dit diagram bestaat uit tweeentiteit-verzamelingen (student en richting) en een binaire relatie (StRi). In deze figuur wordtde relatie als een veel-op-een voorgesteld door middel van de pijl tussen de relatie en de entiteitrichting.Figuur 15 is een voorbeeld van een een-op-een relatie: elke student heeft slechts een biografie eneen biografie hoort bij een welbepaalde student.

student

�� � studnr

PPPP

�� � snaam

@@@@@

�� � straat�� � woonplaats

���

� ���

@@@

@@@

���

StBio - biografie

�� � geboortepl

CCCCC�� � geboortedat

���

Figuur 15: Een op een relatie

Rollen kunnen op een E-R diagram weergegeven worden door middel van een label bij de lijnentussen de rechthoeken en de ruiten (figuur 16).

docent

�� � dnaam

@@

�� � docnr

CCCC

�� � �� � acadgr

���

�manager

���

@@@

@@@

���

werkt

ondergeschikte

Figuur 16: E-R diagram met rol indicatoren

Een zwakke entiteit-verzameling wordt op een E-R diagram aangegeven met een dubbel omlijnderechthoek. De relatie die de entiteit verbindt met de sterke entiteit waarop de primaire sleutelgevormd wordt, wordt aangegeven met een vettere lijn (figuur 17).

richting

�� � fase

@@@

�� � opleiding �� � minor

���

� ���

@@@

@@@

���

RiVak vak

�� � vaknr

@@@

�� � vnaam �� � uren

���

Figuur 17: E-R diagram met een zwakke entiteit verzameling

18

Page 22: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

student

�� � studnr

PPPP

�� � naam

@@@@@

�� � straat

�� � woonplaats

���

���

@@@

@@@

���

SRU - richting

�� � fase

@@@

�� � opleiding�� � minor

���

6

uitslag

�� � percentage

CCC

�� � vermelding

�����

Figuur 18: E-R diagram met ternaire relatie

Ook niet-binaire relatieverzamelingen kunnen gemakkelijk weergegeven worden in een E-R dia-gram, bijvoorbeeld SRU in figuur 18.

2.7 Herleiden van ER-diagrammen naar tabellen

Een databank die overeenkomt met een E-R diagram kan voorgesteld worden door een verzamelingvan tabellen. Voor elke entiteit-verzameling en elke relatie-verzameling in de databank, bestaater een unieke tabel. Elke tabel bestaat uit een aantal kolommen met unieke namen.

Sterke entiteit-verzamelingen.

E, een sterke entiteit-verzameling met attributen a1, a2, . . . , an, kan voorgesteld worden met eentabel met naam E met n verschillende kolommen overeenkomend met de verschillende attributenvan E. Elke rij in deze tabel correspondeert met een entiteit uit de entiteit-verzameling E.Een nieuwe entiteit aan de databank toevoegen komt overeen met het toevoegen van een nieuwerij in de tabel. Rijen kunnen ook verwijderd of aangepast worden.In tabel 2 wordt de tabel docent voorgesteld. Deze tabel heeft twee kolommen overeenkomend metde twee attributen van de entiteit. Voor de eenvoud is het derde (multi-valued) attribuut, acadgr,weggelaten.

docnr dnaam

71012 Nemegeer72031 Appels73025 Van Nuffelen74016 Van Wunsel75009 Peeters76005 De Weerdt77019 Pinxten

Tabel 2: De docent tabel

D1 is de verzameling van alle docent-nummers en D2 is de verzameling van alle docent-namen. Elkerij uit de docent tabel bestaat uit een 2-tuple (v1, v2) waarbij v1 een docent-nummer is (v1 ∈ D1)en v2 een docent-naam (v2 ∈ D2). Gewoonlijk zal de docent tabel slechts een deelverzamelingbevatten van alle mogelijke rijen. De verzameling van alle mogelijke rijen van docent wordt hetcartesisch produkt van D1 en D2 genoemd, met notatie

D1 X D2 of X2i=1 Di

19

Page 23: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Zwakke entiteit-verzamelingen.

A is een zwakke entiteit-verzameling met beschrijvende attributen a1, a2, . . . , ar. B is de sterkeentiteit-verzameling waarvan A afhankelijk is. De primaire sleutel van B bestaat uit b1, b2, . . . , bs.A kan voorgesteld worden met een tabel met naam A met kolommen overeenkomend met deverschillende attributen uit de verzameling {a1, a2, . . . , ar} ∪ {b1, b2, . . . , bs}

fase opleiding minor vaknr vnaam uren

3 c c 1 analytische chemie 43 c c 2 organische chemie 33 e i 1 analoge transmissie 33 e i 2 databanken 23 e i 3 web-technologie 43 em em 1 toeg. elektronica 43 em em 2 materiaalkeuze 3

Tabel 3: De vak tabel

In tabel 3 wordt de tabel vak voorgesteld. Omdat vak ondergeschikt is aan richting moet deprimaire sleutel van deze sterke entiteit mee opgenomen worden in de tabel.

Relatie-verzamelingen.

R is een relatie-verzameling tussen entiteit-verzamelingen E1, E2, . . . , En. Stel, primaire-sleutel(Ei)is de naam van de verzameling attributen die de primaire sleutel vormen van de entiteit-verzamelingEi. Indien R geen beschrijvende attributen heeft, dan wordt de tabel overeenkomend met R ge-vormd uit de kolommen:

n⋃

i=1

primaire-sleutel(Ei)

Indien R wel beschrijvende attributen (a1, a2, . . . , am) heeft, dan wordt de tabel overeenkomendmet R gevormd uit de kolommen:

n⋃

i=1

primaire-sleutel(Ei) ∪ {a1, a2, . . . , am}

studnr fase opleiding minor bis

88163 3 e e88234 3 e e88356 3 e i 190002 3 em ae 192421 3 em ae96375 3 c b

Tabel 4: De StRi tabel

In tabel 4 wordt de tabel StRi voorgesteld.

2.8 Generalisatie en specialisatie

De entiteit-verzameling docent kan uitgebreid worden door elke docent te klasseren als een van devolgende:

• theorie-docent (thdocent)

20

Page 24: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• praktijk-docent (prdocent)

Elk van deze entiteit-verzamelingen worden beschreven door een verzameling attributen die al-le attributen van de entiteit-verzameling docent omvat plus een aantal additionele attributen.Bijvoorbeeld, de praktijk-docent entiteiten kunnen bijkomend beschreven worden door het laboattribuut. Voor theorie-docent kan het type attribuut bij opgenomen worden, om aan te geven ofhet over algemene, wetenschappelijke of technische vakken gaat.De gemeenschappelijkheid van een aantal attributen kan uitgedrukt worden als een generalisatieof een specialisatie. Dit zijn omsluitende relaties die kunnen bestaan tussen een hoger-niveauentiteit-verzameling en een of meer lager-niveau entiteit-verzamelingen.

• Generalisatie is het resultaat van het nemen van de unie van twee of meer (lager-niveau)entiteit-verzamelingen om een hoger-niveau entiteit-verzameling te produceren.

• Specialisatie is het resultaat van het nemen van een deelverzameling van een hoger-niveauentiteit-verzameling om een lager-niveau entiteit-verzameling te vormen.

In het E-R diagram worden generalisatie en specialisatie voorgesteld door middel van een driehoekmet label ISA (“is a”). Bij generalisatie worden de verbindingslijnen met de entiteiten vettergetekend (figuur 19).

(a)

docent((

�� � docnr

hh�� � dnaam

@@@

���

ISA

������

prdocent

AAAAAA

thdocent

������

AAAAAA

@@

�� � labo

��

�� � type

(b)

docent

@@@

���

ISA

������

prdocent

AAAAAA

thdocent

Figuur 19: Generalisatie (a) en specialisatie (b)

Een klein verschil tussen generalisatie en specialisatie is de beperking bij generalisatie dat elkehoger-niveau entiteit ook een lager-niveau entiteit moet zijn. Bij generalisatie moet elke docententiteit ofwel een theorie-docent ofwel een praktijk-docent zijn. Specialisatie laat de mogelijkheidtoe dat een docent entiteit geen theorie-docent en ook geen praktijk-docent is, maar bijvoorbeeldeen “adjunct-departementshoofd”.Generalisatie wordt gebruikt om de gelijkenissen tussen lager-niveau entiteiten te benadrukken enverschillen te verbergen. Specialisatie benadrukt het onderscheid tussen hoger-niveau en lager-niveau entiteit-verzamelingen. Een bijkomend aspekt is attribuut-overerving. De attributen vaneen hoger-niveau entiteit-verzameling worden geerfd door de lager-niveau entiteit-verzamelingen.Het is mogelijk om tegelijk generalisatie en specialisatie in een E-R diagram te gebruiken. Infiguur 20 wordt langs links aangegeven dat een docent ofwel praktijk- ofwel theoriedocent is; langsrechts wordt de mogelijkheid voorgesteld dat sommige docenten manager zijn.Er zijn twee manieren om een E-R diagram met generalisatie of specialisatie om te vormen tottabellen.

1. Creatie van een tabel voor elke hoger-niveau entiteit zoals hoger beschreven. Voor elke lager-niveau entiteit wordt een tabel gecreeerd met kolommen voor elke beschrijvende attribuutvan de entiteit en kolommen voor elk attribuut van de primaire sleutel van de hoger-niveauentiteit. Uit het E-R diagram van figuur 19 worden 3 tabellen afgeleid:

21

Page 25: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

docent

���������

���������@@@

���

ISA

������

prdocent

AAAAAA

thdocent

������

AAAAAA

HHHHHHHHH@@@

���

ISA

AAAAAA

manager

Figuur 20: Combinatie van generalisatie en specialisatie

docent met attributen docnr en dnaam;

thdocent met attributen docnr en type;

prdocent met attributen docnr en labo.

2. Er wordt geen tabel gecreeerd voor de hoger-niveau entiteit. Voor elke lager-niveau entiteitwordt een tabel gecreeerd met kolommen voor elke beschrijvende attribuut van de entiteiten kolommen voor elk attribuut van de hoger-niveau entiteit. Uit het E-R diagram vanfiguur 19 worden 2 tabellen afgeleid:

thdocent met attributen docnr, dnaam en type;

prdocent met attributen docnr, dnaam en labo.

2.9 Aggregatie

machine�� � mnr

���

@@@

@@@

���

gebruikt

�� � aantal

@@@@@@@@@

���������

werknemer

�� � wnr

���

@@@

@@@

���

werkt - project

�� � pnr

Figuur 21: E-R diagram met redundante relaties

Een beperking van een E-R model is dat het niet mogelijk is een relatie uit te drukken tussenrelaties. Zo’n constructie is bijvoorbeeld nodig in een databank die informatie geeft omtrent werk-nemers die op een specifiek project werken en daarbij een aantal verschillende machines gebrui-ken. Met de basis E-R modelleringsconcepten wordt het E-R diagram van figuur 21 bekomen. De

22

Page 26: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

relatie-verzamelingen werkt en gebruikt kunnen eventueel tot een relatie-verzameling gecombineerdworden. Maar daardoor wordt de logische structuur van het schema onduidelijk.

Aggregatie is een vorm van abstractie waardoor relatie-verzamelingen als hoger-niveau entiteitenbeschouwd worden. In het voorbeeld kan de relatie-verzameling werkt en de entiteit-verzamelingenwerknemer en project beschouwd worden als een hoger-niveau entiteit-verzameling Werk. Zo’nentiteit-verzameling wordt op dezelfde manier behandeld als een gewone entiteit-verzameling (bij-voorbeeld voorgesteld door een rechthoek zoals in figuur 22 te zien is).

machine�� � mnr

���

@@@

@@@

���

gebruikt�� � aantal

Werk

werknemer�� � wnr �

@@

@@

��

werkt - project�� � pnr

Figuur 22: E-R diagram met aggregatie

Een E-R diagram met aggregatie omvormen tot tabellen geeft geen problemen. Voor het voorbeeldmoeten tabellen gecreeerd worden voor werknemer, project, werkt, machine en gebruikt. De tabelvoor de relatie-verzameling gebruikt omvat een kolom voor elk attribuut uit de primaire sleutelvan de entiteit-verzameling machine en van de entiteit Werk. Ook is een kolom opgenomen voorhet beschrijvende attribuut (aantal) van de relatie gebruikt.

2.10 Voorbeelden

In figuur 23 is het E-R diagram getekend van een auto verzekeringsmaatschappij met een verzame-ling klanten die elk een aantal wagens bezitten. Voor welke wagen wordt een lijst van ongevallenbijgehouden.In figuur 24 is het E-R diagram van student waarbij relationships aangegeven worden met eenaantal andere entiteiten.In figuren 25, 26 en 27 zijn E-R diagrams getekend van een klant met een rekening bij een bank-filiaal. Wat is het verschil tussen deze E-R diagrams?

23

Page 27: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

persoon

�� � naam

AAA

�� � SS#�� � adres

�����

���

@@@

@@@

���

bezit wagen

�� � jaar

BBBBB

�� � model

�������

���

@@@

@@@

���

logging ongeval

�� � datum

AAAAA

�� � bestuurder

�� � schade

���

Figuur 23: E-R diagram: auto verzekeringsmaatschappij

@@@

���

ISA

������

prdocent

AAAAAA

thdocent

�� � labo�� � type

docent

�� � docnr�� � dnaam�� � �� � acadgr

��

� ���

@@@

@@@

���

begeleidt student

�� � studnr

������� �� � snaam

((((((((

(�� � straat�� � woonplaats

PPPPPP

�� � bis���

@@@

@@@

���

StRi

?

richting

�� � fase

����

�� � opleiding

�� � minor

HHHH

� ���

@@@

@@@

���

bevat vak

�� � vaknr

@@@

�� � vnaam �� � uren

���

?

���

@@@

@@@

���

heeft

6

biografie

�� � geboortepl�� � geboortedat���

Figuur 24: E-R diagram: student met richting en vakken

24

Page 28: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

klant

�� � SZnr

PPPP

�� � naam

@@@@@

�� � straat

�� � woonplaats

���

���

@@@

@@@

���

KRF rekening

�� � reknr �� � saldo

���

filiaal

�� � filnaam

CCC

�� � filplaats

�����

Figuur 25: Klant met bankrekening in een bankfiliaal: versie 1

klant

�� � SZnr

PPPP

�� � naam

@@@@@

�� � straat

�� � woonplaats

���

���

@@@

@@@

���

KlRe rekening

�� � reknr�� � saldo

��

@@@

���

@@@

@@@

���

ReFi@@@@@

filiaal

�� � filnaam XX�� � filplaats

Figuur 26: Klant met bankrekening in een bankfiliaal: versie 2

klant

�� � SZnr

PPPP

�� � naam

@@@@@

�� � straat

�� � woonplaats

���

���

@@@

@@@

���

KlFi filiaal

�� � filnaam�� � filplaats

���

�� � reknr

CCCCCC�� � saldo

�����

Figuur 27: Klant met bankrekening in een bankfiliaal: versie 3

25

Page 29: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

3 SQL: Data Definition/Manipulation Language

Data definition language wordt gebruikt voor het opzetten, aanpassen en verwijderen van tabellen.Data manipulation language wordt gebruikt voor het toevoegen, aanpassen en verwijderen vangegevens in deze tabellen.

3.1 Voorbeeld van een eenvoudige databank

In de voorbeelden van de SQL-statements in dit en volgend hoofdstuk wordt gebruik gemaakt vaneen database van een fiktieve tennisclub. Het ER diagram, weergegeven in figuur 28, bevat vierentiteitverzamelingen en relatieverzamelingen. Bij deze gegevens gelden volgende beperkingen.

• De aanvoerder van een team is zelf een speler. Een speler kan ten hoogste een team leiden.

• Elke speler in de wedstrijdentabel moet in de spelerstabel voorkomen en moet een bonds-nummer hebben.

• Elk team in de wedstrijdentabel moet in de teamstabel voorkomen.

• Elke speler die boetes betaald heeft, moet in de spelerstabel voorkomen.

• Geboortejaar van een speler moet kleiner zijn dan het jaar van toetreding.

• Het jaar van toetreding moet groter zijn dan 1979. De datum van een boete moet ook in1980 of daarna vallen.

• Elk boetebedrag moet groter dan nul zijn.

�� � snr Spelers � ���

@@@

@@@

���

speelt

AAAAAAK

���

@@@

@@@

���

leidtAAAAAAU

Wedstrijden

�� � wnr

((((�� � verloren�� � gewonnen

PPP

���

@@@

@@@

���

binnen

?

Teams

�� � tnr((((�� � divisie

6

���

@@@

@@@

���

heeft

Boetes

�� � bnr@@@�� � datum�� � bedrag��

Figuur 28: ER diagram voor tennisclub

3.2 Maken van nieuwe tabellen

Met de instructie create table wordt een nieuwe tabel gecreeerd:

CREATE TABLE <tabelnaam>

( <kolomnaam> <datatype> [NOT NULL],

...

PRIMARY KEY ( <kolommen-lijst> ),

FOREIGN KEY .... )

Een kolomdefinitie bestaat uit een kolomnaam, een datatype en eventueel not null. Met behulpvan een datatype geven we aan welk soort waarden een kolom kan bevatten. De verschillendedatatypes zijn :

26

Page 30: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

1. SMALLINT : Voor kleine, gehele getallen (tussen -32767 en 32767).

2. INTEGER : Voor grote, gehele getallen (tussen -2147483647 en 2147483647). Het woordinteger mag afgekort worden tot INT.

3. DECIMAL : Hierbij kan men opgeven hoeveel cijfers voor en achter de komma geplaatstkunnen worden. Met bijvoorbeeld DECIMAL(12,4) wordt bedoeld 8 cijfers voor de kommaen 4 achter de komma. De naam decimal mag afgekort worden tot DEC.

4. CHARACTER : Voor het opslaan van woorden, tekst en codes. Met het getal tussen dehaakjes wordt de maximale lengte aangegeven (maximaal 255). Indien er niets wordt gespe-cificeerd is de lengte gelijk aan 1. De naam character mag afgekort worden tot CHAR.

5. DATE : Voor het definieren van een datum.

Na het datatype kan de not null-optie gespecificeerd worden. Hierdoor mag een kolom geennull-waarden bevatten.

VB 1 : De spelerstabel is gemaakt met volgende instructies :

CREATE TABLE spelers ( snr smallint not null,

naam char(20) not null,

vl char(5),

gbj integer,

g char check (g IN ( ’M’, ’V’) ),

ttj integer check (ttj > 1979),

straat char(20),

hnr char(8),

pco char(8),

plaats char(20),

bdnr smallint,

primary key (snr),

check ( ttj > gbj)

);

Alternatief: CREATE TABLE spelers ( snr smallint PRIMARY KEY,

3.3 Verwijderen van tabellen

We kunnen een tabel verwijderen met behulp van de instructie drop table.VB 2 : De in VB 1 gemaakte tabel kan opnieuw verwijderd worden door :

DROP TABLE spelers PURGE

3.4 Beperkingen

3.4.1 Primaire sleutel

Waarschijnlijk is de belangrijkste type van beperking in een databank de declaratie dat een bepaaldattribuut of een set van attributen een sleutel vormen voor een relatie.Een primaire sleutel (= primary key) is een kolom of een verzameling kolommen van een tabelwaarvan de waarden ten allen tijde uniek zijn. Null-waarden zijn niet toegestaan in de kolommenvan een primaire-sleutel. Een primaire sleutel is noodzakelijk om geen twee identieke rijen op teslaan in een tabel. Hierdoor kan immers het probleem ontstaan dat de twee rijen niet meer vanelkaar te onderscheiden zijn. Indien de primaire-sleutel uit meerdere kolommen bestaat, sprekenwe van een “samengestelde” primaire-sleutel. Bij het definieren dienen deze gescheiden te wordendoor een komma.

27

Page 31: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

3.4.2 Referentiele integriteit

Een tweede belangrijk type beperking is dat de waarde van bepaalde attributen zinvol moetenzijn, bijvoorbeeld ook voorkomen in een andere tabel. In SQL kan een attribuut of een set vanattributen van een relatie gedeclareerd worden als een foreign key, refererend naar een attribuutof meerdere attributen van een tweede relatie (eventueel dezelfde relatie). Hierbij moet het gere-fereerde attribuut (of attributen) van de tweede relatie wel de primary key zijn van deze relatie.Wanneer de foreign key uit een attribuut bestaat, kan dit door na de attribuutnaam en het typeiets toe te voegen:

snr smallint REFERENCES spelers,

Maar men kan ook een FOREIGN KEY beperking toevoegen. Bijvoorbeeld, bij de teams tabel kangespecificeerd worden dat het tweede attribuut een waarde moet hebben die verwijst naar eenbestaande speler in de spelers tabel.

CREATE TABLE teams ( tnr smallint,

snr smallint,

divisie char(20),

PRIMARY KEY (tnr),

FOREIGN KEY (snr) REFERENCES spelers

ON UPDATE CASCADE );

Deze referentiele integriteit moet gegarandeerd blijven bij aanpassingen aan de databank. Er moetdus worden aangegeven wat er moet gebeuren indien

1. een rij in de teams tabel wordt toegevoegd met een snr waarde die niet voorkomt in despelers tabel;

2. het snr veld in een rij in de teams tabel wordt aangepast met een waarde die niet voorkomtin de spelers tabel;

3. de speler uit de spelers tabel verwijderd wordt;

4. de waarde in de spelers tabel aangepast wordt.

Default : bij de default politiek van SQL wordt de aanpassing die niet conform de referentieleintegriteit is, verworpen door het systeem, d.i. bij de vier hierboven opgesomde gevallenwordt een run-time fout gegenereerd.

CASCADE : bij verwijdering van een speler uit de spelers tabel (3) moeten alle referenties inde teams tabel verwijderd worden en bij aanpassingen aan een snr veld in spelers tabel(4) moeten alle referenties in teams tabel aangepast worden.

SET NULL : bij verwijderen (3) en aanpassen (4) in de spelers tabel wordt de waarde in deteams tabel op NULL gezet.

3.4.3 Waarden van attributen

Een eenvoudige beperking van deze soort is de NOT NULL beperking: rijen waarbij het specifiekeattribuut de waarde NULL heeft, zijn niet toegestaan.Een complexere beperking kan aan een attribuut gekoppeld worden met behulp van het CHECKkeyword.

ttj integer CHECK ( ttj > 1979 ),

divisie char(20) CHECK ( kleur IN ( ’eerste’, ’tweede’, ’derde’ ) ),

In praktijk gaat het meestal op een eenvoudige limiet op de waarde door middel van een opsommingof een rekenkundige beperking. In principe kan het wel elke mogelijke conditie zijn die in eenWHERE kan gebruikt worden. In deze conditie kan gerefereerd worden naar het attribuut zelf ofnaar andere relaties of attributen van relaties. In dat geval moet de relatie wel in een FROM vande subquery vermeld worden. Bijvoorbeeld in de teams tabel:

28

Page 32: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

snr char(5) CHECK ( snr IN ( SELECT snr FROM spelers ) ),

Dit lijkt op een referentiele integriteitsbeperking, maar is het niet:

• het toevoegen van een rij in de teams tabel met een snr waarde die niet voorkomt in despelers tabel, mislukt (zoals eerder bij default uitgelegd);

• het aanpassen van een rij in de teams tabel met een nieuwe snr waarde die niet voorkomtin de spelers tabel, mislukt;

• maar, het verwijderen van een rij in de spelers tabel, zodat een bepaalde snr waardeverdwijnt, heeft geen effect op rijen in de teams tabel. Nogthans wordt na de verwijderingde CHECK beperking geschonden.

Dit type beperking kan ook gerealiseerd worden met een domein declaratie. Er is dan echter geennaam van het attribuut gekend; dit wordt opgevangen door het keyword VALUE te gebruiken (zievoor een voorbeeld bij de creatie van het domein KLEUR).

3.4.4 Globale beperkingen

Bij dit soort beperkingen worden verschillende attributen of zelfs verschillende tabellen met elkaargekoppeld. De tuple-based CHECK beperkingen beperken een aspect van de rijen in een relatie.In de CREATE TABLE wordt na de lijst van attributen en de primary en foreign key specificatieseen CHECK gevolgd door een voorwaarde tussen haakjes, toegevoegd. Deze voorwaarde kan weeralles zijn, wat na een WHERE kan geschreven worden, ook eventueel met inbegrip van subqueries.De voorwaarde van een tuple-based CHECK beperking wordt telkens wanneer een rij toegevoegdof aangepast wordt, gecontroleerd, en dit voor de nieuwe of aangepaste rij. Indien de voorwaardeniet geldt, is de beperking geschonden en de toevoeging of aanpassing wordt verworpen. Wanneerde conditie echter naar een andere relatie refereert en door een verandering in die andere relatiewordt de beperking geschonden, dan zal de CHECK de verandering toch niet beletten. Net als eenattribuut-based CHECK is een tuple-based CHECK onzichtbaar bij andere relaties. Daarom ishet best om in een tuple-based CHECK enkel attributen van het te controleren tuple te gebruiken,en geen subqueries. Hiervoor kan toch geen garantie gegeven worden, dat ze steeds blijven gelden.

CREATE TABLE A ( anr char(5),

anaam char(20),

kleur char(8)

CHECK ( kleur IN (’rood’,’geel’,’groen’,’blauw’) ),

gewicht integer CHECK ( gewicht < 100 ),

pla char(20),

PRIMARY KEY (anr),

CHECK ( kleur = ’blauw’ OR gewicht > 20 ) );

3.5 Invoeren, wijzigen en verwijderen van gegevens.

Invoeren van gegevens in een tabel.

Met behulp van de insert-instructie kunnen gegevens in een tabel worden ingebracht.VB 3 : De gegevens van een record kunnen ingebracht worden op volgende manier :

INSERT INTO spelers VALUES (6, ’Peeters’, ’R’, 1964,

’M’, 1977, ’Hazenlaan’, ’80’, ’2570’, ’Duffel’, 8467)

Indien er na de tabelnaam geen kolommen worden gespecificeerd, dient men voor elke kolom eenwaarde te geven. Indien de bijhorende waarde niet gekend is of niet van belang is, kan de waardeNULL gebruikt worden. Omgekeerd, indien men de kolommen wel specificeert, kunnen slechts eenaantal waardes worden ingegeven. Ter illustratie geven we alleen het spelersnummer, de naam enhet toetredingsjaar in :

INSERT INTO spelers (snr,naam,ttj) VALUES (100,’Wouters’,2000)

29

Page 33: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Verwijderen van gegevens uit een tabel.

Met de delete-instructie kunnen we gegevens verwijderen.VB 4 : We verwijderen de speler met spelersnummer gelijk aan 6.

DELETE FROM spelers

WHERE snr=6

Wijzigen van gegevens.

Met de update-instructie kunnen we gegevens wijzigen.VB 5 : We veranderen de plaats van de speler met nummer 100 in Mechelen.

UPDATE spelers

SET plaats = ’Mechelen’

WHERE snr = 100

3.6 Inhoud van de tabellen

Naast de spelers en de teams tabel moeten ook nog de boetes en wedstrijden tabel gecreeerd worden.

CREATE TABLE boetes

(

bnr smallint,

snr smallint,

datum date,

bedrag float,

PRIMARY KEY (bnr),

FOREIGN KEY (snr)

REFERENCES spelers

ON UPDATE SET NULL

ON DELETE SET NULL

);

CREATE TABLE wedstrijden

(

wnr smallint,

snr smallint,

tnr smallint,

gewonnen smallint,

verloren smallint,

PRIMARY KEY (wnr),

FOREIGN KEY (snr) REFERENCES spelers

ON UPDATE CASCADE

ON DELETE CASCADE,

FOREIGN KEY (tnr) REFERENCES teams

ON UPDATE CASCADE

ON DELETE CASCADE

);

Wanneer een speler uit de spelers tabel verwijderd wordt, wordt in de boetes tabel het overeen-komstige veld op NULL gezet: de informatie omtrent het boetebedrag verdwijnt niet.Wanneer een speler uit de spelers tabel verwijderd wordt, worden in de wedstrijden tabel dewedstrijden die deze speler gespeeld heeft, ook verwijderd.Het ER-diagram kan herleid worden tot vier tabellen: spelers, teams, wedstrijden en boetes.Merk op dat bijvoorbeeld de tabel die overeenkomt met de relatieverzameling leidt, in de teamstabel kan geintegreerd worden. Dit komt door de een-op-een relatie. Ook veel-op-een relatieskunnnen in een tabel van een entiteitsverzameling geintegreerd worden.

De SPELERS-tabel:

30

Page 34: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

SNR NAAM VL GBJ G TTJ STRAAT HNR PCO PLAATS BDNR1 6 Peeters R 1964 M 1979 Hazenlaan 80 2570 Duffel 84672 44 Bakker E 1963 M 1980 Busstraat 23 2520 Ranst 11243 83 Hofland PK 1956 M 1982 Mariakade 16 2570 Duffel 16084 2 Emonds R 1962 M 1985 Bremweg 43 2570 Duffel 24115 27 Cools DD 1964 V 1983 Liespad 84 2980 Zoersel 25136 104 Moerman D 1970 V 1984 Stoutlaan 65 2980 Zoersel 70607 7 Wijers GW 1963 M 1981 Musweg 39 2570 Duffel ?8 57 Bohemen M 1971 M 1985 Musweg 16 2570 Duffel 64099 39 Biskop D 1956 M 1980 Wetsplein 78 2570 Duffel ?

10 112 Baalen IP 1963 V 1984 Vosseweg 8 2470 Retie 131911 8 Nagels B 1962 V 1980 Spoorlaan 4 2520 Ranst 298312 100 Peeters P 1963 M 1979 Hazenlaan 80 2570 Duffel 652413 28 Cools C 1963 V 1983 Oudebaan 10 2547 Lint ?14 95 Meuleman P 1961 M 1982 Hoofdweg 33 2531 Ranst ?

De TEAMS-tabel:

TNR SNR DIVISIE1 6 eerste2 27 tweede3 39 derde

De WEDSTRIJDEN-tabel:

GEWON VERLOWNR TNR SNR NEN REN

1 1 6 3 12 1 6 2 33 1 6 3 04 1 44 3 25 1 83 0 36 1 2 1 37 1 57 3 08 2 8 0 39 2 27 3 2

10 2 104 3 211 2 112 2 312 2 112 1 313 2 8 0 314 3 44 3 015 3 39 1 3

De BOETES-tabel:

BNR SNR DATUM BEDRAG1 6 12/08/1980 100.002 44 05/05/1981 75.003 27 08/10/1983 100.004 104 12/08/1984 50.005 44 12/08/1980 25.006 8 12/08/1980 25.007 44 12/30/1982 30.008 27 11/12/1984 75.00

31

Page 35: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

4 SQL: het vraagtaal gedeelte

4.1 Componenten van de SELECT-instructie

tabellen

? ? ?FROM

definieert de uitgangstabellen

?

WHEREselecteert rijen die

voldoen aan de conditie

?

?

GROUP BYgroepeert rijen op basis vangelijke waarden in kolommen

?-

HAVINGselecteert groepen die

voldoen aan de conditie

?SELECT

selecteert kolommen

?

ORDER BYsorteert rijen op basis

van kolommen

?eindresultaat

Figuur 29: Componenten van SELECT instructie

Bepaalde gegevens opvragen kan gebeuren d.m.v. SQL-statements. De structuur die hiervoorwordt gehanteerd ziet er als volgt uit :

(5) SELECT attributen

(1) FROM tabellen

(2) WHERE conditie

(3) GROUP BY attributen

(4) HAVING conditie

(6) ORDER BY attributen

32

Page 36: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

De nummers tussen de haakjes duiden op de volgorde waarin het SQL-statement wordt uitgevoerd:figuur 29. Het gebruik van SQL zal aan de hand van voorbeelden verduidelijkt worden.

4.2 De FROM-component

VB 1 : GEEF DE NAMEN VAN DE SPELERS.

select naam, vl

from spelers

VB 2 : SELECTEER ALLE GEGEVENS UIT DE SPELERS-TABEL

select *

from spelers

VB 3 : HOEVEEL SPELERS ZIJN ER ?

select COUNT(*) as AANTAL

from spelers

VB 4 : WAT IS HET GEBOORTEJAAR VAN DE OUDSTE SPELER ?

select MIN(gbj)

from spelers

Naast count en min zijn er in SQL ook andere statistische functies mogelijk : max, sum en avg.

select MAX(bedrag), AVG(bedrag) from boetes

select SUM(gewonnen) from wedstrijden

VB 5 : ZOEK HET AANTAL DORPEN.

select count(plaats)

from spelers

Met distinct kan het aantal verschillende dorpen bepaald worden.

select count(distinct plaats)

from spelers

VB 6 : GEEF NAAM EN LEEFTIJD OP HET MOMENT VAN TOETREDEN.

select naam, ttj-gbj as leeftijd

from spelers

4.3 De WHERE-component

VB 7 : GEEF HET SPELERSNUMMER EN HET BONDSNUMMER VAN DIEGENEN DIE INDUFFEL WONEN EN SORTEER VOLGENS BONDSNUMMER.

select snr, bdnr

from spelers

where plaats = ’Duffel’

order by bdnr

In hetgeen volgt zal stap voor stap besproken worden wat er gebeurt om tot het vereiste resultaatte komen.

1. FROM SPELERS : De gehele spelerstabel wordt geselecteerd.

2. WHERE PLAATS= ’Duffel’ : Alleen de rijen met spelers die in Duffel wonen blijven over.

33

Page 37: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

SNR NAAM ... PLAATS BDNR6 Peeters ... Duffel 8467

83 Hofland ... Duffel 16082 Emonds ... Duffel 24117 Wijers ... Duffel ?

57 Bohemen ... Duffel 640939 Biskop ... Duffel ?

100 Peeters ... Duffel 6524

3. SELECT SNR, BDNR : Alleen de gevraagde gegevens ( spelersnummer en bondsnummer )worden getoond.

SNR BDNR6 8467

83 16082 24117 ?

57 640939 ?

100 6524

4. ORDER BY BDNR : De gegevens worden geordend volgens bondsnummer.

SNR BDNR7 ?

39 ?83 16082 2411

57 6409100 6524

6 8467

OPMERKING : Zoals te zien is in de oplossing, worden null-waarden (?) altijd eerst geplaatstals er gesorteerd wordt.

De where-component maakt zeer dikwijls gebruik van vergelijkingsoperatoren om condities tetesten.

= gelijk aan

< kleiner dan

> groter dan

<= kleiner dan of gelijk aan

>= groter dan of gelijk aan

<> verschillend van

Voorbeelden : PLAATS = ’Duffel’

GBJ < 1964

GBJ + 17 > TTJ

VB 8 : SELECTEER DE SPELERS MET EEN BONDSNUMMER

select snr, bdnr select snr, bdnr

from spelers of from spelers

where bdnr = bdnr where bdnr IS NOT null

34

Page 38: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Meerdere condities kunnen gekoppeld worden met and, or en not.

VB 9 : ZOEK ALLE SPELERS DIE VROUW ZIJN OF DIE NA 1970 GEBOREN ZIJN.

select snr

from spelers

where g = ’V’ OR gbj > 1970

VB 10 : ZOEK DE SPELERS DIE OF VAN DUFFEL OF IN 1963 GEBOREN ZIJN, MAARNIET DE SPELERS DIE VAN DUFFEL EN IN 1963 GEBOREN ZIJN.

select snr

from spelers

where (plaats = ’Duffel’ or gbj = 1963)

and not (plaats = ’Duffel’ and gbj = 1963)

VB 11 : ZOEK DIEGENEN DIE TUSSEN 1962 EN 1964 GEBOREN ZIJN. (62 en 64 incl.)

select snr

from spelers

where gbj >= 1962 and gbj <= 1964

Opmerking. Het is efficienter indien men deze where-instructie uitvoert met behulp van eenbetween operator.

select snr

from spelers

where gbj BETWEEN 1962 and 1964

Met de like-operator kunnen we selecteren op alfanumerieke waarden met een bepaald patroon.Het procentteken en het onderstrepingsteken krijgen na ’like’ een speciale betekenis. Hetprocentteken staat voor geen, een of meer tekens. Het onderstrepingsteken wordt gebruikt omjuist een willekeurig teken voor te stellen.

VB 12 : ZOEK DE SPELERS WAARVAN DE NAAM BEGINT MET EEN ’B’.

select snr, naam

from spelers

where naam LIKE ’B%’

VB 13 : ZOEK DE SPELERS WAARVAN DE VOORLAATSTE LETTER EEN ’a’ IS.

select snr, naam

from spelers

where rtrim(naam) like ’%a_’

Om een conditie te testen waarbij een waarde moet worden vergeleken met een gegeven verzamelingwordt gebruik gemaakt van de in-operator.

VB 14 : ZOEK ALLE PERSONEN DIE IN RANST, RETIE OF ZOERSEL WONEN.

select snr, naam, plaats

from spelers

where plaats IN (’Ranst’,’Retie’,’Zoersel’)

35

Page 39: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

4.4 Gegevens uit meerdere tabellen

VB 15 : GEEF HET TEAMNUMMER EN DE NAAM VAN DE AANVOERDER VAN ELKTEAM.

select tnr, naam

from teams, spelers

where teams.snr = spelers.snr

1. FROM TEAMS, SPELERS : De beide tabellen worden naast mekaar gezet.

TNR SNR DIVISIE SNR NAAM ... PLAATS BDNR1 6 eerste 6 Peeters ... Duffel 84671 6 eerste 44 Bakker ... Ranst 11241 6 eerste 83 Hofland ... Duffel 16081 6 eerste 2 Emonds ... Duffel 2411

... ... ... ... ... ... ... ...1 6 eerste 95 Meuleman ... Ranst ?2 27 tweede 6 Peeters ... Duffel 84672 27 tweede 44 Bakker ... Ranst 11242 27 tweede 83 Hofland ... Duffel 16082 27 tweede 2 Emonds ... Duffel 24112 27 tweede 27 Cools ... Zoersel 25132 27 tweede 104 Moerman ... Zoersel 7060

... ... ... ... ... ... ... ...2 27 tweede 95 Meuleman ... Ranst ?3 39 derde 6 Peeters ... Duffel 8467

... ... ... ... ... ... ... ...3 39 derde 95 Meuleman ... Ranst ?

Opmerking. Elke rij van de spelerstabel wordt naast elke rij van de teamstabel gezet. Wespreken ook van het cartesisch product van de betreffende tabellen.

2. WHERE TEAMS.SNR = SPELERS.SNR : De records met een zelfde spelersnummer inbeide tabellen blijven over.

TNR SNR DIVISIE SNR NAAM ... PLAATS BDNR1 6 eerste 6 Peeters ... Duffel 84672 27 tweede 27 Cools ... Zoersel 25133 39 derde 27 Biskop ... Duffel ?

3. SELECT TNR, NAAM : Alleen de gevraagde gegevens blijven over.

TNR NAAM1 Peeters2 Cools3 Biskop

Om niet telkens de gehele tabelnaam te moeten gebruiken, kan men gebruik maken van (tijdelijke)afkortingen. De oplossing zou er dan als volgt uitzien :

select tnr, naam

from teams t, spelers s

where t.snr = s.snr

36

Page 40: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

VB 16 : SELECTEER DE SPELERSNUMMERS VAN DE KAPITEINS DIE EEN BOETE HEB-BEN BETAALD. ELKE NUMMER MAG SLECHTS 1 KEER VOORKOMEN.

select DISTINCT t.snr

from teams t, boetes bt

where t.snr = bt.snr

1. FROM TEAMS T, BOETES BT : selecteert de beide tabellen (cartesisch product).

2. WHERE T.SNR = BT.SNR : records met eenzelfde spelersnummer

TNR SNR DIVISIE BNR SNR DATUM BEDRAG1 6 eerste 1 6 12/08/1980 100.002 27 tweede 3 27 08/10/1983 100.002 27 tweede 8 27 11/12/1984 75.00

3. SELECT DISTINCT T.SNR : Alleen de spelersnummers worden getoond. Het adjectiefdistinct zorgt ervoor dat identieke oplossingen slechts 1 maal worden getoond.

SNR6

27

VB 17 : SELECTEER DE SPELERSNUMMERS VAN DE SPELERS DIE OUDER ZIJN DANE. BAKKER.Dit voorbeeld toon aan hoe men een vergelijking kan maken in eenzelfde tabel.

select s.snr

from spelers s, spelers p

where p.naam = ’Bakker’ and p.vl = ’E’

and s.gbj < p.gbj

De afkortingen s en p voor de spelerstabel zijn noodzakelijk.

4.5 GROUP BY en HAVING

VB 18 : GEEF HET SPELERSNUMMER VAN ELKE SPELER VOOR WIE MEER DAN 1BOETE VAN MEER DAN 25.00 IS BETAALD EN SORTEER VOLGENS SPELERSNUMMER.

select snr

from boetes

where bedrag > 25.00

group by snr

having count(*) > 1

order by snr

In hetgeen volgt zal stap voor stap besproken worden wat er gebeurt om tot het vereiste resultaatte komen.

1. FROM BOETES : De gehele boetestabel wordt geselecteerd.

BNR SNR DATUM BEDRAG1 6 12/08/1980 100.002 44 05/05/1981 75.003 27 08/10/1983 100.004 104 12/08/1984 50.005 44 12/08/1980 25.006 8 12/08/1980 25.007 44 12/30/1982 30.008 27 11/12/1984 75.00

37

Page 41: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

2. WHERE BEDRAG > 25.00 : Als resultaat blijven alleen die records over met een boetegroter dan 25.00

BNR SNR DATUM BEDRAG1 6 12/08/1980 100.002 44 05/05/1981 75.003 27 08/10/1983 100.004 104 12/08/1984 50.007 44 12/30/1982 30.008 27 11/12/1984 75.00

3. GROUP BY SNR : De records worden gegroepeerd volgens spelersnummer.

BNR SNR DATUM BEDRAG1 6 12/08/1980 100.002 44 05/05/1981 75.007 44 12/30/1982 30.003 27 08/10/1983 100.008 27 11/12/1984 75.004 104 12/08/1984 50.00

4. HAVING COUNT(*) >1 : Alleen de spelers die meer dan een boete hebben blijven over.

BNR SNR DATUM BEDRAG2 44 05/05/1981 75.007 44 12/30/1982 30.003 27 08/10/1983 100.008 27 11/12/1984 75.00

5. SELECT SNR : Alleen het gevraagde attribuut per groep wordt getoond.

SNR4427

6. ORDER BY SNR : De spelersnummers worden gesorteerd in oplopende volgorde.

SNR2744

Met de group by-component kunnen we rijen groeperen op basis van overeenkomsten tussen dierijen. Vanaf dan kunnen alleen nog de groepen aangesproken worden, en niet meer de individuelerijen. De having-component heeft een vergelijkbare functie als de where-component. Met behulpvan condities kunnen groepen geselecteerd worden. De having-component kan echter alleen incombinatie met de group by-component gebruikt worden.Wanneer een groepering uitgevoerd wordt, kunnen bij de select alleen nog attributen vermeldworden die bij de group by staan of statistische functies op de groep. Ook een eventueel bijhorendehaving kan alleen attributen hebben die bij de group by staan of statistische functies op de groep.

VB 19 : GEEF PER WOONPLAATS HET AANTAL SPELERS.

38

Page 42: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

select plaats, count(*)

from spelers

group by plaats

De functie count(*) wordt uitge-voerd op elke gegroepeerde rij.

PLAATS COUNT(*)Duffel 7Lint 1Ranst 3Retie 1Zoersel 2

VB 20 : GEEF VAN ELK TEAM HET TEAMNUMMER, HET AANTAL GESPEELDE WED-STRIJDEN EN HET TOTAAL AANTAL GEWONNEN SETS.

select tnr, count(*), sum(gewonnen)

from wedstrijden

group by tnr

VB 21 : GEEF ALLE VERSCHILLENDE COMBINATIES VAN TEAMNUMMERS EN SPE-LERSNUMMERS UIT DE WEDSTRIJDEN TABEL.

select tnr, snr, count(*)

from wedstrijden

group by tnr, snr

Bij deze select-instructie wordt er gegroepeerd op tweekolommen. Alle rijen met hetzelfde teamnr en hetzelfdespelersnr vormen een groep. De volgorde van de kolom-specificaties in de group by-component heeft geen effectop het eindresultaat van een instructie.

TNR SNR count(*)1 2 11 6 31 44 11 57 11 83 12 8 22 27 12 104 12 112 23 39 13 44 1

VB 22 : GEEF DE SPELERSNUMMER VAN ELKE SPELER DIE IN 1984 ZIJN LAATSTEBOETE HEEFT BETAALD.

select snr

from boetes

group by snr

having max(YEAR(datum)) = 1984

VB 23 : GEEF DE SPELERS DIE EEN TOTAAL BEDRAG AAN BOETES VAN 120 OF MEERHEBBEN BETAALD. GEEF TEVENS HET TOTAAL DAT REEDS BETAALD WERD.

select snr, sum(bedrag)

from boetes

group by snr

having sum(bedrag) > 120

BNR SNR DATUM BEDRAG1 6 12/08/1980 100.002 44 05/05/1981 75.005 44 12/08/1980 25.007 44 12/30/1982 30.003 27 08/10/1983 100.008 27 11/12/1984 75.004 104 12/08/1984 50.006 8 12/08/1980 25.00

2 44 75.005 44 25.007 44 30.003 27 100.008 27 75.00

44 130.0027 175.00

39

Page 43: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

4.6 De subquery

Een subquery is een select-instructie binnen een conditie van een select-instructie.De subquery verschilt van een gewone select-instructie op twee vlakken :

• De select-component van een subquery mag nooit distinct bevatten.

• Een order by-component is niet toegestaan. De betekenis van een verzameling waardenverandert immers niet als dubbele waarden worden weggelaten of als de waarden andersworden gerangschikt.

Een subquery, gebruikt na < , > , = , ..., mag slechts 1 resultaat opleveren. Bij exists, IN, ALLen ANY varianten, mag de subquery resulteren in een verzameling waarden.Een belangrijk aspect van de subquery is de reikwijdte van kolommen. Het is belangrijk te wetenin welk gedeelte van de query een bepaalde tabel gekend is. Dit zal verduidelijkt worden met hetvolgende voorbeeld :

************************************************************Q1*********

* select ... *

* from A *

* ======================================Q2====== *

* where ... in = ( select ... = *

* = from B = *

* = ++++++++++++++Q3++ = *

* = where ... + ( select ... + = *

* = + from C )+ ) = *

* = ++++++++++++++++++ = *

* ============================================== *

* *

* and exists ( ================Q4== *

* = select ... = *

* = from D = *

* = where ... = ) *

* ==================== *

***********************************************************************

De tabel A is gekend in de blokken Q1, Q2, Q3 en Q4 en tabel B in de blokken Q2 en Q3.De tabel C is alleen gekend in het blok Q3 en tabel D alleen in het blok Q4.

VB 24 : GEEF DE SPELERSNAAM VAN DE AANVOERDER VAN TEAM 1.

select naam, snr

from spelers

where snr = ( select snr

from teams

where tnr = 1 )

select naam, s.snr

from spelers s, teams

where s.snr = teams.snr

and tnr = 1

De subquery mag slechts een resultaat geven (omwille van de test op gelijkheid ’=’). Indien desubquery meerdere resultaten geeft, kan er gebruik gemaakt te worden van de in operator.

VB 25 : ZOEK ALLE SPELERS DIE MINIMUM 1 WEDSTRIJD HEBBEN GESPEELD.

select snr, naam

from spelers

where snr in ( select snr

from wedstrijden )

select distinct s.snr, naam

from spelers s, wedstrijden w

where s.snr = w.snr

In deze where-instructie wordt gebruik gemaakt van een subquery, die in de wedstrijdentabel allespelersnummers selecteert (6, 44, 83, 2, 57, 8, 27, 104, 112). Vermits deze selectie in een subquerygebeurt, worden alleen verschillende snr’s gegenereerd (DISTINCT is niet nodig).

40

Page 44: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

OPMERKING. Een hoofdquery waarbij de = of IN operator gebruikt wordt op het resultaat vaneen subquery, kan steeds als een enkelvoudige query (mbv. join van tabellen) geschreven worden.

VB 26 : ZOEK DE SPELERS DIE EEN BOETE HEBBEN BETAALD.select snr, naam

from spelers

where snr in ( select snr

from boetes )

select distinct spelers.snr, naam

from spelers, boetes

where spelers.snr = boetes.snr

VB 27 : HOEVEEL BOETES ZIJN GELIJK AAN DE LAAGSTE BOETE ?

select count(*)

from boetes

where bedrag = ( select min(bedrag)

from boetes )

VB 28 : GEEF DE SOM VAN DE BOETES VAN DE SPELERS UIT RANST.

select SUM(bedrag)

from boetes

where snr in ( select snr

from spelers

where plaats = ’Ranst’ )

VB 29 : SELECTEER DE SPELERSNUMMERS VAN DE SPELERS DIE OUDER ZIJN DANE. BAKKER, en geef ook het bijhorend geboortejaar.Hiervoor is vroeger reeds een join query geschreven met behulp van de afkortingen s en p voor despelerstabel. Men kan echter ook gebruik maken van een subquery :

select snr, gbj

from spelers

where gbj < ( select gbj

from spelers

where naam = ’Bakker’ and vl = ’E’ )

Opmerking. Per rij uit de tabel van de hoofdquery wordt een subquery uitgevoerd. Deze subquerymag slechts een resultaat opleveren, omwille van de ’<’ test.Beide queries resulteren in hetzelfde antwoord: 83, 2, 39, 8, 95.

VB 30 : ZOEK DE OUDSTE SPELERS.

select *

from spelers

where gbj <= ALL ( select gbj

from spelers )

Het tussenresultaat van de subquery bestaat uit de geboortejaren van alle spelers. In de hoofdquerywordt dan voor elke speler gekeken of zijn geboortejaar kleiner dan wel gelijk is aan elk geboortejaarin dit tussenresultaat.

VB 31 : ZOEK ALLE SPELERS DIE NIET TOT DE OUDSTE BEHOREN.

select *

from spelers

where gbj > ANY ( select gbj

from spelers )

41

Page 45: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Het tussenresultaat bestaat wederom uit alle geboortejaren. Maar nu worden alle spelers gezochtmet een geboortejaar dat groter is dan minstens een geboortejaar van een van de spelers. Als zo’ngeboortejaar gevonden wordt, is de speler niet de oudste speler. Het eindresultaat van deze querybestaat uit alle spelers behalve de oudste (Hofman en Biskop ).

VB 32 : GEEF HET NUMMER VAN ELKE SPELER MET MINSTENS 1 BOETE.

select snr, naam

from spelers

where exists ( select *

from boetes

where spelers.snr = boetes.snr )

De gegevens van de spelerstabel zijn gekend in de gehele query. De gegevens van de boetestabel zijnalleen gekend in de subquery. Wanneer een voorwaarde in de WHERE van de subquery refereertmaar een attribuut van een tabel gespecificeerd in de FROM van de hoofdquery, zijn deze tweequeries gecorreleerd. Zo’n gecorreleerde query kan beter begrepen worden door te bedenken dat degeneste subquery geevalueerd wordt voor elk tuple (of combinatie van tuples) van de hoofdquery.

1. FROM SPELERS : een kopie van de spelerstabel (eerste tussenresultaat)

2. WHERE EXISTS (...subquery...) : voor elke rij in dit eerste tussenresultaat wordt de sub-query uitgevoerd. Het tussenresultaat van de subquery voor de eerste rij (snr = 6), geeft:

BNR SNR DATUM BEDRAG1 6 12/08/1980 100.00

Er is een rij in de boetestabel waarin het spelersnummer gelijk is aan het spelersnummer vande rij in de spelerstabel. De conditie van de hoofdquery is waar, omdat het tussenresultaatvan de subquery uit minstens een rij bestaat.

Het tussenresultaat van de subquery voor de tweede rij uit de hoofdquery geeft drie rijen :

BNR SNR DATUM BEDRAG2 44 05/05/1981 75.005 44 12/08/1980 25.007 44 12/30/1982 30.00

Het tussenresultaat van de subquery voor de derde rij uit de hoofdquery geeft geen enkele rij(speler 83 komt niet in de boetestabel voor). De EXISTS in de hoofdquery is dus niet waar;en er wordt verdergegaan met de vierde rij.

3. SELECT SNR, NAAM : Het uiteindelijke resultaat van de query is :

SNR NAAM6 Peeters

44 Bakker27 Cools

104 Moerman8 Nagels

VB 33 : GEEF HET TEAMNUMMER EN DE DIVISIE VAN ELK TEAM WAARIN SPELER44 GESPEELD HEEFT.

42

Page 46: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

select tnr, divisie

from teams

where exists ( select *

from wedstrijden

where snr = 44

and tnr = teams.tnr )

TNR DIVISIE1 eerste3 derde

VB 34 : GEEF HET SPELERSNUMMER VAN ELKE SPELER MET MEER DAN 1 BOETE.

select distinct snr

from boetes bt

where snr in ( select snr

from boetes

where bnr <> bt.bnr )

Voor elke rij in de boetestabel wordt gekeken of in deze tabel nog een rij aanwezig is met hetzelfdespelersnummer, maar met een ander boetenummer. Zo ja, dan heeft die speler minstens tweeboetes.Een andere mogelijke oplossing is :

select snr

from boetes

group by snr

having count(*) > 1

Beide mogelijkheden geven als resultaat :

SNR4427

VB 35 : GEEF DE SPELERS DIE GEEN WEDSTRIJD VOOR TEAM 1 HEBBEN GESPEELD.Twee alternatieve oplossingen:

select snr, naam

from spelers

where snr not in ( select snr

from wedstrijden

where tnr = 1 )

select snr, naam

from spelers

where 1 <> ALL ( select tnr

from wedstrijden

where snr = spelers.snr )

VB 36 : GEEF VAN ELK TEAM WAARVAN DE AANVOERDER IN ZOERSEL WOONT,HET TEAMNUMMER EN HET AANTAL GESPEELDE WEDSTRIJDEN.

select tnr, count(*)

from wedstrijden

where tnr in ( select tnr

from teams, spelers

where teams.snr = spelers.snr

and plaats = ’Zoersel’ )

group by tnr

De subquery selecteert het nummervan het team waarvan de aanvoer-der in Zoersel woont. De hoofdquerybepaalt daarna het aantal gespeeldewedstrijden. Dit geeft als oplossing :

TNR COUNT(*)2 6

VB 37 : GEEF DE DRIE HOOGSTE BONDSNUMMERS.

select bdnr

from spelers s1

where bdnr IS NOT NULL

and 3 > ( select count(*)

from spelers s2

where s1.bdnr < s2.bdnr )

order by bdnr DESC

BDNR846770606524

43

Page 47: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

De subquery telt voor elk bondsnummer het aantal bondsnummers dat groter is. Als dit aantalkleiner is dan drie, komt het betreffende bondsnummer in het resultaat. De functie desc zorgtervoor dat de bondsnummers van groot naar klein worden geordend.

4.7 Combineren van select-instructies

Met behulp van de operators union, intersect, except, union all, intersect all en except allkunnen select-instructies met elkaar gecombineerd worden.

VB 38 : ZOEK DE SPELERS DIE EEN BOETE HEBBEN BETAALD OF DIEGENEN DIEAANVOERDER ZIJN.

select snr

from boetes

UNION

select snr

from teams

Het aantal attributen en de types van deze attributen van beide select instructies moeten gelijkzijn. Anders is er geen ’union’ mogelijk. De select-componenten mogen geen ’distinct’ bevatten.Door het gebruik van union verwijdert SQL automatisch alle dubbele rijen. Union is het equivalentvan de operator unie of vereniging uit de verzamelingenleer.

VB 39 : ZOEK DE SPELERS DIE EEN BOETE HEBBEN BETAALD EN DIEGENEN DIEAANVOERDER ZIJN.

select snr

from boetes

INTERSECT

select snr

from teams

Intersect is het equivalent van de operator intersectie ofwel doorsnede uit de verzamelingenleer.Dubbele rijen worden ook hier uit het resultaat verwijderd.

VB 40 : ZOEK DE SPELERS DIE EEN BOETE HEBBEN BETAALD EN GEEN AANVOER-DER ZIJN.

select snr

from boetes

EXCEPT

select snr

from teams

Except is het equivalent van de operator verschil uit de verzamelingenleer (soms wordt ook MINUSgebruikt). Dubbele rijen worden ook hier verwijderd.

Opmerking. Indien het gewenst is dat dubbels niet verwijderd worden, gebruiken we unionall, intersect all of except all.De operaties INTERSECT en EXCEPT zijn redundant in SQL, ze kunnen ook op de volgendemanier geschreven worden:

-- herschrijven intersect

SELECT snr FROM boetes WHERE snr IN ( SELECT snr

FROM teams ) ;

-- herschrijven except

SELECT snr FROM boetes WHERE snr NOT IN ( SELECT snr

FROM teams ) ;

44

Page 48: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

4.8 Select-instructie : de join

De join is een select-instructie waarbij ten eerste de from-component minstens twee tabellen bevaten ten tweede de where-component minstens een conditie bevat waarbij kolommen van verschil-lende tabellen met elkaar worden vergeleken.

VB 41 : SPELERSNUMMER VAN DE AANVOERDERS EN BIJHOREND TEAMNR:

select spelers.snr, tnr

from spelers, teams

where spelers.snr = teams.snr

De kolommen die in de WHERE-component van een SELECT-instructie voor de join zorgen,worden de join-kolommen genoemd. In het voorbeeld zijn dit spelers.snr (kolom 1 = K1) enteams.snr (kolom 2 = K2)Tussen join-kolommen zijn vier soorten relaties mogelijk:

1. Populaties van K1 en K2 zijn gelijk : K1 = K2

2. De ene populatie is een deelverzameling van de andere: K1 ⊂ K2 (of K2 ⊂ K1)

3. De populaties zijn conjunct : K1 - K2 6= 0 and K2 - K1 6= 0

4. De populaties zijn disjunct : K1 - K2 = K1 and K2 - K1 = K2

Thetajoin. De algemene join of thetajoin heeft in SQL de volgende vorm :

select *

from spelers, teams

where spelers.snr THETA teams.snr

Indien de operator gelijk is aan ’=’, spreekt men van een equijoin :

VB 42 : GEEF VAN ELKE SPELER MET EEN BOETE DE PERSOONLIJKE GEGEVENSEN DE GEGEVENS I.V.M. DE BOETE.

select *

from spelers, boetes

where spelers.snr = boetes.snr

Dit geeft als resultaat :

SNR NAAM ... BDNR BNR SNR DATUM BEDRAG6 Peeters ... 8467 1 6 12/08/1980 100.00... ... ... ... ... ... ... ...27 Cools ... 2513 8 27 11/12/1984 75.00

Indien gewenst is dat het spelersnummer slechts in 1 kolom wordt afgedrukt, maakt men gebruikvan een natuurlijke join :

VB 43 : GEEF VAN ELKE SPELER MET EEN BOETE DE PERSOONLIJKE GEGEVENSEN DE GEGEVENS I.V.M. DE BOETE.

select spelers.*, boetes.bnr, boetes.datum, boetes.bedrag

from spelers, boetes

where spelers.snr = boetes.snr

Dit geeft als resultaat :

45

Page 49: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

SNR NAAM ... BDNR BNR DATUM BEDRAG6 Peeters ... 8467 1 12/08/1980 100.00

... ... ... ... ... ... ...27 Cools ... 2513 8 11/12/1984 75.00

VB 44 : GEEF VAN ELKE SPELER HET SPELERSNUMMER, DE NAAM EN HET BEDRAGVAN ZIJN BOETES.

select spelers.snr, naam, bedrag

from spelers, boetes

where spelers.snr = boetes.snr

Dit geeft als resultaat :

SNR NAAM BEDRAG6 Peeters 100.00

44 Bakker 75.0027 Cools 100.00

104 Moerman 50.0044 Bakker 25.008 Nagels 25.00

44 Bakker 30.0027 Cools 75.00

spelers.snr2

837

5739

11228

95100

boetes.snr

6 8 2744 104

Voorgaande query wordt een inner-equijoin genoemd: alleen de gegevens over spelers die in deboetetabel voorkomen worden weergegeven.Indien gewenst is dat gegevens over alle spelers worden gegeven, dient men gebruik te maken vaneen outer-equijoin. Dit kan gebeuren d.m.v. de “union”-instructie :

VB 45 : GEEF VAN ELKE SPELER HET NUMMER, DE NAAM EN HET BETAALDE BE-DRAG.

select spelers.snr, naam, bedrag

from spelers, boetes

where spelers.snr = boetes.snr

union

select spelers.snr, naam, 0.00

from spelers

where snr not in ( select snr

from boetes )

order by 3 desc

SNR NAAM BEDRAG6 Peeters 100.00

27 Cools 100.0027 Cools 75.0044 Bakker 75.00

104 Moerman 50.0044 Bakker 30.008 Nagels 25.00

44 Bakker 25.002 Emonds 0.007 Wijers 0.00

28 Cools 0.0039 Biskop 0.0057 Bohemen 0.0083 Hofland 0.0095 Meuleman 0.00

100 Peeters 0.00112 Baalen 0.00

Join zonder join-conditie. Het begrip join werd gedefinieerd als een SELECT-instructie waarde FROM-component minimaal twee tabellen bevat en waarin de WHERE-component een voor-waarde bevat die kolommen van verschillende tabellen vergelijkt.In het volgende voorbeeld is wel aan het eerste deel voldaan (FROM met twee tabellen) maar nietaan het tweede element (WHERE met een vergelijking van kolommen uit verschillende tabellen).

46

Page 50: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

VB 46 : GEEF VOOR ELKE BOETE HET BOETENUMMER, HET BEDRAG PLUS DE SOMVAN BEDRAG EN DE BEDRAGEN VAN ALLE BOETES MET EEN LAGER BOETENUM-MER (CUMULATIEVE WAARDE).

Ter vereenvoudiging gebruiken we volgende boetetabel :

BNR SNR DATUM BEDRAG1 6 12/08/80 1002 44 05/05/81 753 27 09/10/82 100

select b1.bnr, b1.bedrag, sum(b2.bedrag)

from boetes b1, boetes b2

where b1.bnr >= b2.bnr

group by b1.bnr, b1.bedrag

order by b1.bnr

1. FROM boetes b1, boetes b2 : We laten alleen de bnr- en bedrag-kolom zien.

B1.BNR B1.BEDRAG B2.BNR B2.BEDRAG1 100 1 1001 100 2 751 100 3 1002 75 1 1002 75 2 752 75 3 1003 100 1 1003 100 2 753 100 3 100

2. WHERE b1.bnr >= b2.bnr :

B1.BNR B1.BEDRAG B2.BNR B2.BEDRAG1 100 1 1002 75 1 1002 75 2 753 100 1 1003 100 2 753 100 3 100

3. GROUP BY b1.bnr, b1.bedrag :

B1.BNR B1.BEDRAG B2.BNR B2.BEDRAG1 100 1 1002 75 1 1002 75 2 753 100 1 1003 100 2 753 100 3 100

4. SELECT b1.bnr, b1.bedrag, SUM(b2.bedrag) :

B1.BNR B1.BEDRAG SUM(B2.BEDRAG)1 100 1002 75 1753 100 275

47

Page 51: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

5 Online analytical processing

Naast het gebruik van databanken in het nauwkeurig beheren van actuele gegevens in een opera-tionele toepassing, kunnen database technieken ook gebruikt worden om strategische beslissingente laten sturen op basis van informatie uit een databank.

5.1 Definities

OLTP : online transaction processing. De doelstelling is het onderhouden van een databank dieeen nauwkeurige weerspiegeling is van de actuele informatie-operaties van een onderneming.Het systeem moet in staat zijn voldoende aantal transacties per tijdseenheid te kunnenverwerken met een kleine responstijd om de belasting aan te kunnen zodat frustraties vangebruikers vermeden wordt. Karakteristieken:

• korte, eenvoudige transacties;

• frequente aanpassingen aan de gegevens;

• transacties die elk slechts een klein gedeelte van de databank aanspreken;

• hoge gebruiksgraad en dus hoge performatievereisten.

OLAP : online analytical processing. De doelstelling is het gebruik van informatie uit de data-bank om strategische beslissingen te ondersteunen (decision support systems): rapporterenvan statistieken en trends. De gebruikte databanken zijn gewoonlijk zeer groot, maar hoevenniet altijd volledig nauwkeurig of up-to-date te zijn.

• complexe queries, korte responstijd minder belangrijk;

• bijna nooit aanpassingen aan de gegevens; de gegevens worden op geregelde tijdstippenge-refreshed;

• transacties die elk een groot gedeelte van de databank aanspreken.

In de eerste OLAP toepassingen was de informatie in de OLAP databank afkomstig van de dage-lijkse operaties die door de onderneming uitgevoerd worden, bijvoorbeeld uit de OLTP databank.In recentere toepassingen wordt actief op zoek gegaan naar bijkomende informatie die nodig is,bijvoorbeeld door deze aan te kopen. Zoals de A aangeeft, is het doel van een OLAP toepassinghet analyseren van data. Hierin zitten twee gerelateerde elementen:

1. de analyse die moet uitgevoerd worden. Bijvoorbeeld, een bedrijf moet een beslissing nemenomtrent de mix van producten die in volgend boekhoudkundig kwartaal zullen geproduceerdworden. Hiervoor kan een analyse procedure ontworpen worden met als nodige input de ver-koopcijfers van het vorige kwartaal en de historische verkoopcijfers uit equivalente periodesvan de laatste vijf jaar.

2. de methodes om de grote hoeveelheden data die nodig is voor de analyse op een efficientemanier te verwerven. Bijvoorbeeld, hoe kan het bedrijf de nodige verkoopcijfers extraherenuit de databanken van de verschillende departementen; in welke vorm moeten deze gegevensin de OLAP databank opgeslagen worden en hoe kunnen deze data efficient opgevraagdworden tijdens de analyse.

Het eerste element is geen databank probleem omdat hiervoor algoritmes nodig zijn die specifiekzijn voor het op te lossen probleem. In dit hoofdstuk wordt een inleiding gegeven op de mogelijkeondersteuning die een databank kan bieden bij zo’n analyse.Nog enkele buzz-words:

Data warehouse : OLAP databanken worden gewoonlijk gestockeerd op speciale OLAP ser-vers, die data warehouses genoemd worden. Deze hebben een speciale structuur om com-plexe OLAP queries te ondersteunen. Indien zo’n OLAP query in een OLTP omgeving zouuitgevoerd worden, zou deze de gewone OLTP handelingen gevoelig vertragen wat in eenoperationele omgeving ontoelaatbaar is. De term is in 1992 door Inmon geıntroduceerd:

48

Page 52: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

“a subject-oriented, integrated, nonvolatile, time-variant collection of data in support ofmanagement’s decisions”.

Data mart : een data warehouse met data die specifiek gericht is op een onderdeel van eenorganisatie (bijv. departement) of bedoeld is voor een specifiek aspect van de businessanalyse; data marts zijn dus stricter gefocusseerd.

Data mining : het doorzoeken van data met de intentie nieuwe kennis te ontdekken. Belangrijkedoelstellingen zijn:

• associatie: het vinden van patronen in data waaruit regels kunnen afgeleid wordendie de aanwezigheid van een verzameling items correleren met een bereik van waardenvoor een andere verzameling items. Bijvoorbeeld: ”wanneer een vrouw in een boetiekeen handtas koopt, zal ze waarschijnlijk ook schoenen kopen”.

• classificatie: het vinden van patronen in data om de data (en daarmee ook de items diedoor deze data beschreven wordt) te classificeren in een bepaald aantal interessantegroepen. Bijvoorbeeld: een bedrijf zou zijn klanten willen kunnen classificeren als“groot-volume” kopers en “klein-volume” kopers. Toekomstige reklameinspanningenkunnen dan gerichter georganiseerd worden.

• clustering: bedoeling is ook te classificeren waarbij de categorien door het clusteringalgoritme zelf ontdekt worden (bij classificatie worden de categorien door de analystzelf vooropgesteld).

5.2 Een multi-dimensioneel model

In een supermarktketen wil men een analyse maken van de hoeveelheid verkopen van verschillen-de producten in verschillende supermarkten over verschillende periodes. De verkoophoeveelheden(een gedeelte ervan) zijn weergegeven in tabel 5. Markt-id, pro-id en tim-id identificeren res-pectievelijk een specifieke supermarkt, een specifiek product en een specifieke periode. Hoev is degeldwaarde van de verkoop van dat product in die supermarkt over die periode. Zo’n tabel wordteen fact tabel genoemd omdat deze tabel alle feiten bevat omtrent de data die moet geanalyseerdworden.Deze data kan als multi-dimensioneel gezien worden: de markt-id, pro-id en tim-id attributenzijn de dimensies en corresponderen met de argumenten van een functie. Het hoev attribuutcorrespondeert met de waarde van de functie. De data uit de fact tabel kan ook als multi-dimensionele cube voorgesteld worden. Voor het supermarktketen voorbeeld geeft dit een kubus(figuur 30) waarvan de dimensies gelijk zijn aan markt-id, pro-id en tim-id en de cellen van dekubus bevatten de corresponderende hoev waarden.

tim-id

pro

-id

markt-id

Figuur 30: Kubus: voorstelling met drie dimensies

49

Page 53: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

De fact tabel:

Verkoopmarkt-id pro-id tim-id hoevM1 P1 T1 1000M1 P2 T1 2000M1 P3 T1 1500M1 P4 T1 2500M2 P1 T1 500M2 P2 T1 800M2 P3 T1 0M2 P4 T1 3333M3 P1 T1 5000M3 P2 T1 8000M3 P3 T1 10M3 P4 T1 3300M1 P1 T2 1001M1 P2 T2 2001M1 P3 T2 1501M1 P4 T2 2501M2 P1 T2 501M2 P2 T2 801M2 P3 T2 1M2 P4 T2 3334M3 P1 T2 5001M3 P2 T2 8001M3 P3 T2 11M3 P4 T2 3301M1 P1 T3 1002M1 P2 T3 2002M1 P3 T3 1502M1 P4 T3 2502M2 P1 T3 502M2 P2 T3 802M2 P3 T3 2M2 P4 T3 333M3 P1 T3 5002M3 P2 T3 8002M3 P3 T3 12M3 P4 T3 3302

De dimensie tabellen:

Marktmarkt-id stad prov gewestM1 Lier Antwerpen VlaanderenM2 Tongeren Limburg VlaanderenM3 Spa Luik Wallonie

Productpro-id naam soort prijsP1 bier drank 1.10P2 zakdoekjes zachtgoed 2.70P3 hesp vlees 3.90P4 frisdrank drank 1.05

Periodetim-id week maand kwartaalT1 1 januari 1T2 23 juni 2T3 51 december 4

Tabel 5: Fact en dimensie tabellen

Markt ���

@@@

@@@

���

Verkoop Product

Periode

Figuur 31: Star schema

50

Page 54: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Bijkomende informatie omtrent de dimensies kan opgenomen worden in dimensietabellen. Voorhet supermarktketen voorbeeld zijn deze ook weergegeven in tabel 5. De Markt tabel beschrijfteen markt, namelijk de stad, provincie en gewest. In een realistische toepassing zou de Markt

tabel een rij bevatten voor elke supermarkt van de keten: dus verschillende markten in elke stad,verschillende steden in elke provincie, en verschillende provincies in elk gewest.De relaties die in het supermarktketen voorkomen kunnen in een diagram voorgesteld worden,zoals weergegeven in figuur 31. Deze figuur heeft wat weg van een ster met de fact tabel in hetcentrum en de dimensietabellen in de stralen, vandaar de naam star schema. Een star schemacorrespondeert met een veel voorkomend fragment uit een ER-diagram, waarbij de fact tabel eenrelationship en de dimensietabellen entiteiten zijn.Merk op dat de dimensietabellen NIET genormaliseerd zijn. Wanneer dit wel zou zijn, zoudener meer entiteiten getekend moeten worden en zou de figuur complexer worden (een snowflakeschema). Hiervoor zijn twee redenen:

1. Dimensietabellen zijn klein ten opzichte van de fact tabel, zodat de gespaarde ruimte omwillevan het elimineren van redundantie te verwaarlozen is.

2. Deze tabellen worden bijna nooit aangepast, zodat update anomalies geen issue zijn. Langsde andere kant zou de splitsing van de relaties tot heel wat overhead leiden bij queries.

Markt ���

@@@

@@@

���

Verkoop Product

Periode ���

@@@

@@@

���

Voorraad Magazijn

Figuur 32: Constellation schema

Een OLAP toepassing kan uit verschillende fact tabellen bestaan die een of meer dimensie tabellensamen gebruiken. In ons supermarkt voorbeeld kan er een fact tabel Voorraad zijn met dimensietabellen Magazijn, Periode en Product. De dimensie tabellen Periode en Product wordengedeeld met de Verkoop fact tabel. In figuur 32 wordt zo’n constellation schema voorgesteld.

5.3 Aggregatie

In heel veel OLAP queries is aggregatie een belangrijk onderdeel. Voorbeelden:

1. de totale verkoop van elk product in elke markt over alle periodes;

2. de totale verkoop van elk product over alle markten over alle periodes;

3. de totale verkoop in elke markt over alle producten over alle periodes;

4. de totale verkoop over alle producten over alle markten over alle periodes.

Deze verschillende totalen kunnen over-zichtelijk in tabelvorm weergegeven wor-den. Omdat de aggregatie uitgevoerd isover alle periodes, wordt een gereduceer-de view op de data geproduceerd: tweedimensies in plaats van drie.

totqty markt-idM1 M2 M3 totaal

P1 3003 1502 15003 19509pro-id P2 6003 2403 24003 32409

P3 4503 3 33 4539P4 7503 7000 9903 24406

totaal 21012 10909 48942 80863

51

Page 55: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Deze resultaten kunnen met standaard SQL queries bekomen worden:

1. select pro-id, markt-id, sum(hoev) as totqty from Verkoop group by pro-id, markt-id;

2. select pro-id, sum(hoev) as totqty from Verkoop group by pro-id;

3. select markt-id, sum(hoev) as totqty from Verkoop group by markt-id;

4. select sum(hoev) as totqty from Verkoop;

Een nadeel is dat voor elke vorm van aggregatie een aparte query nodig is, die apart uitgevoerdwordt en een specifiek resultaat aflevert. Het zou interessant zijn

• om de verschillende niveaus van aggregatie in een enkele query op te vragen;

• een implementatie te hebben die alle gevraagde aggregaties tegelijk (en dus efficient) bere-kent.

In de SQL standaard van 1999 zijn een aantal opties toegevoegd aan de GROUP BY.Met de GROUPING SETS optie kan de gebruiker precies aangeven welke groeperingen uitgevoerdmoeten worden.

select markt-id, pro-id, sum(hoev) as totqty

from Verkoop

group by grouping sets ( (markt-id), (pro-id) );

markt-id pro-id totqtyM1 null 21012M2 null 10909M3 null 48942null P1 19509null P2 32409null P3 4539null P4 24406

Het systeem zal twee queries uitvoeren, eentje waarbij gegroepeerd wordt op markt-id en eentjewaarbij gegroepeerd wordt op pro-id. Twee verschillende queries (in dit geval query 2 en 3)worden dus in een statement gebundeld, wat op zich niet erg is. Maar, SQL zal de resultaten vandeze twee logisch verschillende queries ook bundelen in een tabel. En deze tabel is helemaal geenrelatie (in de betekenis in een RDBMS omgeving). De markt-id rijen (met null in de pro-id

kolom) hebben een totaal verschillende interpretatie van de pro-id rijen (met null in de markt-idkolom). De betekenis van totqty is afhankelijk van het voorkomen in een markt-id rij of in eenpro-id rij. Ook de nulls in de resultatentabel geven een andere soort van “ontbrekende informatie”aan. Zo’n null betekent hier duidelijk niet “waarde onbekend” of “waarde niet van toepassing”maar wat de betekenis dan wel juist is, is niet zo duidelijk. De gebruiker moet hiervoor een soortrij-per-rij denken aanwenden.

De ROLLUP optie is een verkorte vorm voor een GROUPING SETS combinatie

select markt-id, pro-id, sum(hoev) as totqty

from Verkoop

group by rollup ( markt-id, pro-id );

De rollup optie is logisch equivalent met

grouping sets ( (markt-id, pro-id),

(markt-id), () );

De term ROLLUP komt van het feit dat de hoeveelhe-den “opgerold” worden langs de markt-id dimensie:eerst een groepering per markt en per product, daneen groepering per markt en tenslotte het totaal overalle markten samen.

markt-id pro-id totqtyM1 P1 3003M1 P2 6003M1 P3 4503M1 P4 7503M2 P1 1503M2 P2 2403M2 P3 3M2 P4 7000M3 P1 15003M3 P2 24003M3 P3 33M3 P4 9903M1 null 21012M2 null 10909M3 null 48942null null 80863

52

Page 56: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Met deze query worden query 1, 3 en 4 tegelijk geschreven. Bij het uitvoeren wordt eerst de aggre-gatie per markt en per product gedaan (query 1); deze sommen worden dan verder geaggregeerdom de totalen per markt te berekenen (query 3) en de som hiervan geeft dan de waarde die metquery 4 zou berekend worden. Dit is heel wat efficienter dan de drie queries onafhankelijk vanelkaar uitvoeren.De optie ROLLUP is niet symmetrisch: group by rollup (markt-id, pro-id) heeft een anderebetekenis dan group by rollup (pro-id, markt-id).

De CUBE optie is een verkorte vorm voor een andere GROUPING SETS combinatie. Met deze optieworden de vier queries in een command geschreven en bij de uitvoering wordt weer gebruik gemaaktvan de resultaten van de meer specifieke aggregaties om de algemenere aggregaties uit te rekenen.

select markt-id, pro-id, sum(hoev) as totqty

from Verkoop

group by cube ( markt-id, pro-id );

De cube optie is logisch equivalent met

grouping sets ( (markt-id, pro-id),

(markt-id), (pro-id), () );

Het resultaat geeft de verschilende groeperingen zo-wel langs de markt-id dimensie als langs de pro-id

dimensie. Deze verschillende aggregatie worden metbehulp van een query berekend. Een nadeel blijft deminder mooie rapportering in vergelijking met eentabelvorm (zie hoger).

markt-id pro-id totqtyM1 P1 3003M1 P2 6003M1 P3 4503M1 P4 7503M2 P1 1503M2 P2 2403M2 P3 3M2 P4 7000M3 P1 15003M3 P2 24003M3 P3 33M3 P4 9903M1 null 21012M2 null 10909M3 null 48942null P1 19509null P2 32409null P3 4539null P4 24406null null 80863

5.4 Hierarchien

In sommige dimensietabellen is een aggregatie hierarchie aanwezig. Bijvoorbeeld in de markt tabelwordt aangegeven dat supermarkten zich in steden bevinden, dat steden in provincies liggen endat provincies onderdeel zijn van gewesten.

markt-id → stad → prov → gewest

Queries kunnen op verschillende niveaus van deze hierarchie uitgevoerd worden.

select pro_id, gewest, sum(hoev)

from Verkoop V, Markt M

where V.markt_id = M.markt_id

group by pro_id, gewest;

Vlaanderen WallonieP1 4506 15003P2 8406 24003P3 4506 33P4 14503 9903

Wanneer een reeks van queries uitgevoerd wordt waarbij in de hierarchie afgedaald wordt van hetmeer algemene naar het meer specifieke, spreekt men van drilling down. Om dit te kunnendoen is natuurlijk meer specifieke informatie nodig dan die vervat is in het resultaat van een meeralgemene query. Dus om te kunnen aggregeren over provincies moet de fact tabel gebruikt wordenof een eerder berekende tabel waarbij geaggregeerd is over steden.

53

Page 57: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

select pro_id, prov, sum(hoev)

from Verkoop V, Markt M

where V.markt_id = M.markt_id

group by pro_id, prov;

Antwerpen Limburg LuikP1 3003 1503 15003P2 6003 2403 24003P3 4503 3 33P4 7503 7000 9903

Het tegenovergestelde is rolling up: er wordt van het meer specifieke naar het meer algemenegegaan, dus opwaarts in de hierarchie. Hier kan wel het resultaat van een meer specifieke querygebruikt worden om de meer algemene aggregatie uit te voeren. Bijvoorbeeld wanneer het resultaatvan de vorige query zou bewaard worden in een tabel met naam Prov-verkoop, dan zou een rollup langs de markt hierarchie kunnen gebeuren met de query;

select pro_id, gewest, sum(hoev) as totqty

from Prov-verkoop T, Markt M

where T.markt_id = M.markt_id

group by pro_id, gewest;

Bij rolling up kunnen dus eerder berekende resultaten gebruikt worden om op een efficienteremanier resultaten te bekomen. En dit is een bijkomend reden voor het bestaan van de ROLLUP enCUBE opties bij de GROUP BY.

De data kan gezien worden als een multidimensionele cube; door een deelverzameling van de assente selecteren wordt een pivot uitgevoerd (de multidimensionele cube wordt geherorienteerd). Degeselecteerde assen komen overeen met de lijst van attributen in de group by. Meestal wordtpivotering gecombineerd met een aggregatie over de overblijvende assen.Bijvoorbeeld, een pivot op de multidimensionele cube om de data te zien vanuit de product entijd dimensies. Het resultaat geeft de totale verkoop (over alle markten) voor elk product en voorelke maand.

select pro_id, maand, sum(hoev)

from Verkoop V, Periode P

where V.tim_id = P.tim_id

group by pro_id, maand;

januari juni decemberP1 6500 6503 6506P2 10800 10803 10806P3 1510 1513 1516P4 9133 9136 6137

Er kan nu een rollup in de periode hierarchie gebeuren door niet te groeperen op maanden maarop kwartalen.

select pro_id, kwartaal, sum(hoev)

from Verkoop V, Periode P

where V.tim_id = P.tim_id

group by pro_id, kwartaal;

1 2 4P1 6500 6503 6506P2 10800 10803 10806P3 1510 1513 1516P4 9133 9136 6137

Men kan zich voorstellen dat de hierarchie voor elke dimensie de multidimensionele cube onder-verdeelt in subcubes. Bijvoorbeeld, het kwartaal niveau van de periode dimensie verdeelt de cubein subcubes, eentje voor elk kwartaal. Queries die informatie in verband met deze subcubes geven,worden slicing and dicing genoemd.

• Bij een pivot, d.i. gebruik van een group by om het niveau in de hierarchie te specifice-ren, wordt de multidimensionele cube onderverdeeld in subcubes: alle elementen in hetdesbetreffende niveau worden samengenomen. Bijvoorbeeld, bij een group by op pro-id

en kwartaal worden alle transacties voor hetzelfde product in hetzelfde kwartaal samengegroepeerd. Dus, pivoteren creeert het effect van dicing de data cube in subcubes.

• Bij gebruik van een WHERE om een dimensie attribuut te vergelijken met een constante,wordt een specifieke waarde voor die dimensie gespecificeerd. Op die manier wordt een sliceuitgevoerd.

54

Page 58: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Meestal worden pivoting en slicing samen uitgevoerd en dit wordt dan “slicing and dicing” ge-noemd. Bijvoorbeeld, een query om de totale verkoop over alle markten in het eerste kwartaal teberekenen per product.

select pro_id, sum(hoev) as totqty

from Verkoop V, Periode P

where V.tim_id = P.tim_id and P.kwartaal = 1

group by pro_id;

pro-id totqtyP1 6500P2 10800P3 1510P4 9133

Alle bovenstaande queries gebruiken een groot deel van de data uit de fact tabel, wat typischis voor een query in een data warehouse. Dit is in tegenstelling tot een OLTP query naar dedatabank van de lokale supermarkt, bijvoorbeeld hoeveel dozen tomatensap zijn er in voorraad,waarbij slechts een tuple aangesproken wordt.

Merk op dat een aggregatie hierarchie niet lineair hoeftte zijn, zoals bij stad, provincie, gewest. De periodehierarchie bijvoorbeeld is een traliewerk. Weken zittenniet volledig vervat in maanden: dezelfde week kan ophet einde van een maand en in het begin van een vol-gende maand zitten. Dus kan er een roll up gebeurenvan dagen in weken of in maanden, maar met weken kanalleen een roll up naar kwartalen gebeuren.

jaar

kwartaal

week maand

dag

5.5 Implementatie issues

Een belangrijke technische karakteristiek, OLAP toepassingen werken met zeer grote hoeveelhedendata, die relatief statisch is en aanpasingen infrequent zijn, is verantwoordelijk voor de gespeci-aliseerde implementatie technieken voor OLAP systemen. Bij veel van deze technieken wordenpartiele resultaten of indices op voorhand berekend, wat erg aangepast is wanneer de queries diede gebruikers zullen uitvoeren op voorhand gekend zijn, bijvoorbeeld wanneer ze ingebed zijn ineen operationele OLAP toepassing.

1. Vooraf berekenen van dikwijls gebruikte aggregaties en deze bijkomend stockeren in dedatabank, bijvoorbeeld als materialized views. Omdat de data niet dikwijls gewijzigd wordt,is de overhead om deze aggregatie waarden te onderhouden klein.

2. Gebruik van indices die specifiek gericht zijn op de queries die zullen uitgevoerd worden.Omdat data updates infrequent zijn is de normale overhead bij het onderhoud van indicesminimaal. Twee specifieke indices hiervoor zijn:

• join index: een speciale index structuur voor het optimaliseren van een join van derelaties in een star schema;

• bitmap index: voor het indiceren van een attribuut dat slechts een beperkt aantalwaarden kan aannemen. Zo’n attributen komen frequent voor in OLAP toepassin-gen. Bijvoorbeeld, gewest in de Markt tabel heeft slechts drie mogelijke waarden,Vlaanderen, Wallonie en Brussel. Wanneer de Markt tabel 10000 rijen bevat, heefteen bitmap index op gewest met drie bit vectoren een stockageruimte behoefte gelijkaan 30000 bits, of ongeveer 4 Kbytes. Een index met deze grootte kan gemakkelijkin primair geheugen gestockeerd worden en kan op die manier voorzien in een snelletoegang tot de records met corresponderende waarden.

5.6 Laden van een data warehouse

Een data warehouse is een speciale database met daarin data voor OLAP en data mining. Zo’n datawarehouse is gewoonlijk zeer groot, tot zelfs enkele terabytes. De data is afkomstig van eventueel

55

Page 59: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

verschillende operationele databanken (voor OLTP toepassingen) met elk eigen schema’s. Dezedata moet geregeld vanuit deze operationele databanken geladen worden in de data warehouse(DW). Dit is geen triviale operatie waarbij twee belangrijke bewerkingen moeten uitgevoerd wordenvoordat de data in de DW kan geladen worden.

1. Transformatie: de data uit de verschillende bronnen moet naar een gemeenschappelijk for-maat omgezet worden:

• syntactisch: bijv. in het schema van het ene DBMS wordt de SIS nummer voorgestelddoor het attribuut SIS (character string) terwijl in een ander DBMS sisnr (integer)gebruikt wordt

• semantisch: bijv. in de ene DBMS zijn de verkopen per uur geaggregeerd terwijl ineen andere DBMS er geen aggregatie gedaan is, maar de individule verkooptransactiesgestockeerd zitten; en het kan dan zijn dat in de DW de verkooptotalen op dagbasisgevraagd zijn.

2. Cleaning: corrigeren van fouten, aanvullen van ontbrekende informatie; men zou er kunnenvan uitgaan dat de data uit een OLTP databank correct is, maar de ervaring leert dat dithelemaal niet het geval is. Daarnaast kan er ook data van uit andere bronnen dan OLTPdatabanken gehaald worden, die bijvoorbeeld onderhevig zijn aan tikfouten.

Wanneer de bronnen relationele databanken zijn met schema’s die voldoende gelijkaardig zijn aandie van de DW en wanneer er geen data cleaning nodig is, dan kan de extractie en de toevoegingmet een enkel SQL statement gebeuren.Voorbeeld: veronderstel dat de winkel “M1” van de grootwarenhuisketen een SALES tabel heeft metattributen pro-id, tim-id en hoeveelheid; elke record hierin geeft de verkoop van een bepaaldproduct in een bepaalde periode. Nadat periode T4 afgelopen is, kan dan de fact tabel uit de DWaangevuld worden met de verkoopsinformatie van markt M1 in periode T4:

insert into Verkoop(markt-id, pro-id, tim-id, hoev)

select ’M1’, S.pro-id, S.tim-id, S.hoeveelheid

from SALES S

where S.tim-id = ’T4’

Wanneer data cleaning en transformatie nodig zijn, dan kan de data die moet geextraheerd wordenuit de brondatabanken eerst voorgesteld worden als views. Een opkuis programma kan dan viadeze views de data opvragen, zonder daarbij specifieke kennis te moeten hebben van elk individueeldatabank schema en daarop de nodige transformaties doen. Tot slot kan dan de aangepaste datatoegevoegd worden aan de data warehouse.Laden en updaten in een OLAP databank is een niet-triviale taak omwille van de grote datavo-lumes. Omwille van efficientie gebeurt het updaten gewoonlijk incrementeel. Verschillende delenvan de databank worden op verschillende momenten aangepast. Dit kan wel als gevolg hebben datde databank in een inconsistente toestand terecht komt: niet voldaan aan bepaalde integriteitsbe-perkingen of geen exacte weerspiegeling van de huidige situatie in het bedrijf. Maar dit is meestalniet zo erg voor OLAP queries omdat deze meestal dienen voor overzichten (sommen, gemiddeldes,aantallen) te berekenen en zo’n overzicht wordt niet erg beınvloed door een inconsistentie.

56

Page 60: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

6 Information retrieval

6.1 Situering

Definitie uit Introduction to information retrieval:

Information retrieval (IR) is finding material (usually documents) of an unstructurednature (usually text) that satisfies an information need from within large collections(usually stored on computers).

Een IR systeem geeft de gebruiker geen kennis op het vlak van zijn/haar onderzoeksdomein; hetinformeert alleen maar omtrent het bestaan (of niet-bestaan) van documenten gerelateerd aan hetdomein en waar deze te vinden zijn.data retrieval:

• zoeken naar een exacte overeenkomst: komt een item al of niet voor in een tabel (IR:documenten die gedeeltelijk overeenkomen met de zoekvraag, maar wel relevant zijn)

• monothetische classificatie: klassen bestaande uit objecten met attributen die nodig envoldoende zijn om tot die klasse te behoren (IR: polythetisch, geen attribuut is nodig ofvoldoende om tot een klasse te behoren)

• artificiele vraagtaal met een volledige specificatie van wat gevraagd is (IR: natuurlijk en alseen gevolg geen exacte specificatie)

information management

information retrieval

text retrieval image retrieval

presentation ofinformation

Overlap text/image retrieval: in zeer veel gevallen is het opzoeken van beelden niet gebaseerd opeen gecomputeriseerde analyse van het beeld zelf, maar op het zoeken in de bijhorende tekst

6.1.1 Een tekst georienteerde databank

stroomInformatieinhoud lineair bestand inverted file

databank

zoek machine

zoek interface gebruiker

57

Page 61: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

bouw records ingevoerd in het DBMS

indexing

records afgeleid uit de invoeren gestockeerd in de databank retrieval

inverted file, indexregister van de databank

6.1.2 Basisprocessen in zoeksystemen

informatieprobleem

voorstelling

zoekvraag

tekstdocumenten

voorstelling

geındiceerde documenten

vergelijking

teruggevonden, gesorteerde documenten

evaluatieen

terugkoppeling

6.2 Indexing

Het voorbereiden van documenten om deze in een IR systeem te gebruiken: omvorming naar eengemakkelijk toegankelijke voorstelling van documenten.Vijf stappen:

1. verwijderen van formatterings- en markup elementen

2. tokenization

3. filtratie

4. bepalen van stammen

5. wegen

De eerste stap wordt bij tekst-databanken nogal eens weggelaten. Op het web is deze stap belang-rijk omdat documenten in allerlei formaten gecreeerd worden.

6.2.1 Document linearisatie

Document wordt omgevormd in een stroom van termen:

1. verwijderen van markup en formattering: bijv. bij een HTML document weglaten van alletags en tekst binnen tags, inclusief scripts en commentaar lijnen

2. tokenization: omvormen naar kleine letters, verwijderen van leestekens, woordsplitsingenongedaan maken

58

Page 62: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Resultaat:

1. een beschrijving van een coherente stroom van termen

2. deze tekststroom moet de bedoelde betekenis, thema, topics, subtopics, ... omvatten

3. de positie van de termen in deze tekststroom is bepaald door de formattering in de oor-spronkelijke tekst

6.2.2 Filtratie

Beslissen welke termen zullen gebruikt worden om het document voor te stellen zo dat deze termenkunnen gebruikt worden voor

1. het beschrijven van de inhoud van het document

2. het onderscheiden van het document van andere documenten in de verzameling

Frequent voorkomende termen kunnen hiervoor niet gebruikt worden:

1. het aantal documenten dat relevant is voor een zoekvraag is waarschijnlijk slechts een kleindeel uit de verzameling; een term die effectief relevante van niet-relevante documenten kanonderscheiden, is waarschijnlijk een term die in een beperkt aantal documenten voorkomt

2. termen die voorkomen in vele conteksten definieren niet een topic of een subtopic van eendocument

Dus: verwijderen van stopwoorden

6.2.3 Bepalen van stammen

Reduceren van woorden zoals computer, computing, compute naar computof walks, walking, walker naar walk

Rudimentair: een heuristisch proces waarbij de eindletters van een term weggelaten worden in dehoop de stam over te houden.Verschillende stambepalende algoritmes voor verschillende natuurlijke talen beschikbaar.

• documenten die een variatie van een gegeven zoekterm bevatten, worden in het zoekresultaatopgenomen

• reductie van de grootte van het geınverteerd bestand

• maar, soms niet praktisch voor de eindgebruiker: gemakkelijker om de verschillende vormenin de vraag op te nemen.

Lemmatisatie: gesofistikeerder door gebruik te maken van een vocabularium en de morfologischeanalyse van de woordenBijvoorbeeld: zagen afkappen tot zag of omvormen tot zien of zaag afhankelijk van de analyse

6.2.4 Wegen van termen

Een gewicht toekennen aan elke term die de belangrijkheid aangeeft:is een document met die term relevant voor een zoekproces met die termPrincipe: een hoog gewicht toewijzen aan een term die frequent voorkomt in een document maarweinig in andere documentenBerekening: gewicht = tf × idf

term frequentie (tf) = frequentie van een term in een document

invers document frequentie (idf) = logtotaal aantal documenten in de verzameling(N)

aantal documenten dat de term bevat(df)

(tf) als een term veel keer voorkomt in een document, dan is de term waarschijnlijk betekenisvolom de inhoud van het document voor te stellen(idf) hoe minder documenten de term bevatten, hoe beter de term is om documenten met de termte onderscheiden van documenten zonder de term

59

Page 63: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

alternatief: het tf gewicht van een term reduceren met een factor die groeit met zijn verzamelingfreqeuntie (het aantal keer dat een term voorkomt in de volledige verzameling van documenten)

6.2.5 Indexing: voorbeeld

<p><i>Interactive</i>query expansion modifiesqueries using terms froma user. <i>Automatic<i>query expansion expandsqueries automatically.</p>

markup-vrije tekstInteractive query ex-pansion modifies queriesusing terms from a user.Automatic query ex-pansion expands queriesautomatically.

tokenisationinteractive query expansionmodifies queries using termsfrom a user automatic queryexpansion expands queriesautomatically

stopwoorden verlateninteractive query expansi-on modifies queries termsautomatic query expansi-on expands queries auto-matically

stammen makeninteract queri expan mo-difi queri term automatqueri expan expand que-ri automat

termen wegen

automat 28 expand 28expan 17 interact 28modifi 17 queri 28term 17

6.3 Gelijkaardigheid en relevantie

De gelijkaardigheid van een document uit de totale verzameling en de vraag van de gebruikerwordt bepaald op basis van het verschil in de gewichten van de termen van het document en degewichten van de termen in de vraag.Een document is relevant voor een zoekvraag wanneer deze gelijkaardigheid groot is.Gelijkaardigheid(document,zoekvraag)

=∑

alle zoektermen

gewicht van de zoekterm × gewicht van de term in het document

Voor het gewicht van een term in het document kan TF*IDF gebruikt worden.Een probleem hierbij is dat langere documenten meer gewicht krijgen, gewoon omdat ze meerwoorden bevatten.Dus, normalisatie van de gewichten van een document, bijv. cosinus normalisatie:

alle zoektermen gewicht van zoekterm × gewicht van term in document√

gewicht van zoekterm2 ×√

gewicht van term in document2

Voorbeeld: PageRank van Google gebruikt de link structuur van het web als een indicatorvoor de waarde van een individuele webpagina A:

• als veel pagina’s (Ti) een link hebben naar A, dan krijgt A meer gewicht

• als zo’n pagina met een link naar A zelf belangrijk is, dan weegt deze pagina meer op hetgewicht van A (een belangrijke pagina met een link naar een andere pagina maakt dezepagina belangrijker)

PR(A) = (1 − d) + d(PR(T1)

C(T1)+ · · · +

PR(Tn)

C(Tn))

{

d dempingfactor ∈ [0, 1], (0.85)C(Ti)aantal links vertrekkend uit Ti

Bij het meten van de gelijkaardigheid tussen een zoekvraag en een webpagina wordt gebruik ge-maakt van tekst-matching technieken. Hierbij worden meer dan 100 factoren in rekening gebrachtom te bepalen welke webpagina’s het meest relevant zijn voor een zoekvraag:

• zoektermen in elkaars nabijheid in de pagina;

• zoektermen in dezelfde volgorde in de pagina als in de vraag;

• zoektermen in belangrijke onderdelen van de pagina (bijv. titel).

60

Page 64: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Evaluatie van de performantie van een zoekmachine. Het resultaat van een IR systeemis een gerangschikte lijst van documenten. De kwaliteit van dit resultaat hangt af van het feit ofdeze gerangschikte lijst van documenten bevredigend is voor de gebruiker.Ten opzichte van een gegeven vraag kan de volledige ruimte van documenten opgedeeld worden invier verzamelingen:

relevant voor gebruiker

gevonden door systeem

niet relevant voor gebruiker

gevonden door systeem

relevant voor gebruiker

niet gevonden door systeem

niet relevant voor gebruiker

niet gevonden door systeem

recall =aantal gevonden relevante documenten

totaal aantal relevante documenten

precision =aantal gevonden relevante documententotaal aantal gevonden documenten

fallout =aantal gevonden niet-relevante documenten

totaal aantal niet-relevante documenten

In waarschijnlijkheidstermen met A de relevante documenten, B de gevonden documenten en N

totaal aantal documenten:

• recall: schatting van de voorwaardelijke waarschijnlijkheid dat een document gevondenwordt, gegeven dat het relevant is ( P (B|A) );

• precision: schatting van de voorwaardelijke waarschijnlijkheid dat een document relevantis, gegeven dat het gevonden wordt ( P (A|B) );

• fallout: schatting van de voorwaardelijke waarschijnlijkheid dat een document gevondenwordt, gegeven dat het niet relevant is ( P (B|A) );

Tussen deze drie maatstaven bestaat een functioneel verband wanneer de generaliteitsparameter(G) in rekening gebracht wordt:

P =R × G

(R × G) + F (1 − G)met G =

totaal aantal relevante documenten

totaal aantal documenten

Deze generaliteitsparameter is een maatstaf voor de dichtheid van de relevante documenten in devolledige verzameling van documenten.Probleem: totaal aantal relevante document niet gekendgouden standaard waarbij alle documenten beoordeeld worden als relevant of irrelevant voor elkezoekvraag, wordt gewoonlijk manueel geconstrueerd door evaluatorsIn een normale verzameling documenten is het onmogelijk om elk document ten opzichte vanelke zoekvraag te evalueren. Daarom wordt een gepoolde relevantie inschatting uitgevoerd waar-bij meerdere zoekmachines in gezet worden die elk een aantal documenten voor elke zoekvraagopvragen.

Meestal is er een trade-off tussen recall en precision: hoe meer documenten er gevonden worden,hoe meer irrelevante documenten hierbij zijn.

Combinatie van recall en precision:

• F maatstaf:

F =2 × recall × precision

recall + precision

• 11-point average precision

61

Page 65: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

recall

pre

cisi

on

0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.00.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

IR1

IR2

11 intervallen voor recalltussen 0.0 en 1.0

voor elke recall waarde:gemiddelde waarde voorprecision

in het voorbeeld is sys-teem IR1 beter dan IR2:

voor elk recall niveau heeftIR1 een hogere precisionwaarde

Verklaring: natuurlijke taal

1. zoektermen en/of documenten: verschillende talen

2. ook wanneer alles in eenzelfde taal weergegeven is:

• een woord is niet gelijk aan een concept

• een concept is niet gelijk aan een woord

• relaties tussen concepten (bijv. computers / architectuur)

woord 3

woord 2

woord 1

concept 3

concept 2

concept 1

• Een concept kan niet beschreven worden door slechts een woord of term. En dat is eenmogelijke oorzaak van een lage recall van het zoekproces

• Betekenis van vele woorden is dubbelzinnig: een mogelijke oorzaak van een lage precisionvan het zoekproces.

Verhogen van performantie

Time flies like an arrowFruit flies like a banana

Time flies like an arrowFruit flies like a banana

Time flies like an arrowFruit flies like a banana

recall

• zoekvraag uitbreiden: meer termen om het concept te omvatten: synoniemen, specifiekeretermen, spellingvarianten

62

Page 66: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

precision

• dubbelzinnigheid uit de zoekvraag uithalen

• classificatie codes toevoegen aan elk gestockeerd document en deze codes meedelen aan degebruiker

Dus, geavanceerde tekstzoeksystemen:

informatieprobleem

voorstelling

zoekvraag

tekstdocumenten

voorstelling

geındiceerde documenten

natuurlijke taal verwerkingvan zowel documenten als zoektermen

beide vergelijken en matchen

teruggevonden, gesorteerde documenten

evaluatieen

terugkoppeling

6.4 Oracle Text

De databank bevat tabellen met velden met lange teksten. Zoeken op waarden evolueert naarcomplexe zoekvragen in tekst waarbij meerdere termen, gewogen termen en score-rangschikkingbelangrijk zijn.In tekst zoeken is verschillend van in data zoeken:

• woorden hebben verschillende betekenissen

• verwantschap met andere woorden

• zoeken naar woorden die dicht bij elkaar staan in de tekst

Hiervoor is meer nodig dan de standaard relationele operatoren: Oracle Text: uitbreiding vanSQL met tekstindices

Tekst in een databank. In een tabel kan tekst op verschillende manieren opgenomen worden:∗ veld met als waarde de bestandsnaam∗ veld van type varchar2 : maximaal 4000 tekens;∗ veld van type clob : meer dan 4000 tekens;∗ veld van type blob : voor binaire informatie, bijv. beelden

c r e a t e t ab l e boek(

bnr i n t e g e r primary key ,t i t e l char (20 ) ,auteur char (20 ) ,datum date ,t e k s t varchar2 (1000)

) ;i n s e r t in to boek va lue s (1 , ’ f r u i t eten ’ , ’ mie groen ’ , ’24/10/2008 ’ ,

63

Page 67: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

’ Het i s z e e r b e l a n g r i j k om ve e l f r u i t te eten . Appelen en perenz i j n de meest gekende in l andse soo r t en . Daarnaast i s e r ook hee lwat uitheems f r u i t , b i j v o o r b e e l d bananen .Ook apen en beren l u s t en sommige f r u i t s o o r t e n . ’ ) ;

i n s e r t in to boek va lue s (2 , ’ groenten ’ , ’ j o s gezond ’ , ’26/12/2008 ’ ,’ Groenten z i j n onon tb e e r l i j k . Prei , tomaten en s e l d e r kunnen gemakke l i jkv ia soep ge inha l e e rd worden . Bloemkolen , s l a en w i t l o o f z i j n n i e t zo l e kk e rvoor de soep . Maar met een aangepast s au s j e en wat appelen o f perengeven deze groenten v e e l mogel i jkheden b i j aardappelen .Een b i j z onde r e soo r t z i j n de kruiden : thijm , b i e s l o ok , d i l l e en l a u r i e r . ’ ) ;

6.4.1 Indexen

Verschillende soorten: CONTEXT en CTXCAT tekstindices.

c r e a t e index boek content on boek ( t e k s t )indextype i s c tx sy s . context ;

c r e a t e index boek c txca t on boek ( t e k s t )indextype i s c tx sy s . c txca t ;

Voordeel: synchronisatie van de gegevens in de basistabel en in de tekstindexen

Op basis van zo’n tekstindex: mogelijkheden van tekst zoeken sterk uitgebreid:sleutelwoord contains (context index) en catsearch (ctxcat index) in de where van een selectNa aanpassingen in de basistabel, moet een content index hersynchroniseerd worden:

beg in c tx dd l . sync index ( ’ boek content ’ ) ; end ;

6.4.2 Scoring algoritme

Bij de berekening van de relevantie score van een gevon-den document wordt een inverse frequentie algoritmegebruikt (formule van Salton):

• hierbij wordt verondersteld dat frequent voorko-mende termen in een document ruistermen zijnen dus lager scoren;

• voor een hoge score moet de zoekterm frequentvoorkomen in het document, maar weinig in devolledige documenten verzameling.

De score berekening is gebaseerd op een tabel waarin infunctie van het aantal documenten in de documenten-verzameling (N) aangegeven wordt hoeveel keer (T ) determ moet voorkomen om een score van 100 te halen;hierbij wordt verondersteld dat de term slechts in eendocument in de verzameling voorkomt

N T

1 345 20

10 1750 13

100 12500 10

1000 910000 7

100000 51000000 4

Voorbeeld. Een verzameling van 5000 documenten, waarbij de term processor tenminste een-maal in elk document voorkomt. Er is een document (D) met vijf maal de term processor en vijfmaal de term CUDA. Geen enkel ander document bevat de term CUDA. Alhoewel de frequentiesvan de twee termen in document D dezelfde zijn, krijgt CUDA een hogere score dan processor:

• processor komt frequent voor in de verschillende documenten van de set

64

Page 68: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• CUDA : zeer infrequent in de volledige documentenverzameling.

Zelfs als de frequentie van CUDA slechts 4 zou zijn, en die van processor 5, dan nog zou de scorevoor CUDA hoger zijn.

• Documenten toevoegen aan de verzameling die de term CUDA bevatten, zal de score vandeze term in document D doen dalen.

• Documenten toevoegen aan de verzameling die de term CUDA niet bevatten, zal de scorevan deze term in document D doen stijgen.

6.4.3 Zoeken

Exacte match: een woord : zoeken naar titels waarbij de corresponderende tekst het woord“bananen” bevat.Op basis van de context index:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen ’ , 5) > 0 ;

Tijdens het zoeken wordt voor elke rij uit de boek tabel een score berekend. Indien deze scoregroter is dan nul, dan is de voorwaarde van de where waar. In dit voorbeeld is gekozen voor eendrempelwaarde gelijk aan nul; maar dit kan ook een andere getalwaarde zijn.De berekende score wordt ook in het resultaat getoond dmv. de score functie. Deze score functiekan ook in de group by en in de order by component gebruikt worden.

Op basis van de ctxcat index: (interne score kan niet getoond worden)

s e l e c t t i t e l from boekwhere ca t s ea r ch ( tekst , ’ bananen ’ , 5) > 0 ;

Exacte match: meerdere woorden : teksten waarin zowel het woord “bananen” als hetwoord “peren” voorkomen:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen and peren ’ , 5) > 0 ;

De berekende scores voor het woord “bananen” en het woord “peren” moeten beide groter zijn dande drempelwaarde. In plaats van het sleutelwoord and kan ook het symbool & gebruikt worden.(In SQL*Plus moet dan wel de specifieke betekenis uitgeschakeld worden.)

Teksten waarin de woorden “bananen” of “peren” voorkomen:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen or peren ’ , 5) > 0 ;

Als een van de twee woorden een score oplevert die groter is dan de drempelwaarde, is aan dewhere voorwaarde voldaan. Naast het sleutelwoord or kan ook het symbool | gebruikt worden.Met accum worden de scores van de individule woorden bij elkaar opgeteld en de geaccumuleerdescore wordt vergeleken met de drempelwaarde:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen accum peren ’ , 5) > 0 ;

Verminderen van de score van de eerste term met de score van de tweede term:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen minus peren ’ , 5) > 0 ;

Een alternatief voor het minus sleutelwoord is het - symbool.

Om een rij (of meerdere rijen buiten beschouwing te laten kan het not sleutelwoord (of het ~

symbool) gebruikt worden.

65

Page 69: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen not peren ’ , 5) > 0 ;

Meerdere woorden . Wanneer de where voorwaarde complexer wordt met meerdere woordenen operatoren kunnen best haakjes gebruikt worden:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ f r u i t or ( bananen and peren ) ’ , 5) > 0 ;

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ ( f r u i t or bananen) and peren ’ , 5) > 0 ;

Bij meerdere zoektermen kunnen bij de verschillende termen verschillende gewichten toegekendworden (gewogen score):

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen∗2 or peren ∗1 ’ , 5) > 0 ;

Meerdere woorden als een deel van een zin:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ appe l s {and} pears ’ , 5) > 0 ;

Meerdere woorden in elkaars nabijheid:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ bananen near peren ’ , 5) > 0 ;

Hoe dichter de woorden bij elkaar staan, hoe hoger de score.

Bijkomende voorwaarde: met een maximum aan tussenliggende woorden:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ near ( ( bananen , peren ) , 1 0 ) ’ , 5) > 0 ;

Meerdere woorden met zelfde volgorde in document als bij zoektermen:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ near ( ( bananen , peren ) , 10 ,TRUE) ’ , 5) > 0 ;

Geen exacte match .

• met wildcards:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ banan% per ’ , 5) > 0 ;

% staat voor een of meerdere tekens; _ voor een teken

• met dezelfde stam: handig wanneer men niet de exacte verbuigings- of vervoegingsvormkent zoals die voorkomt in de te doorzoeken teksten; stamuitbreidingen van het engelstaligewoordje play zijn bijvoorbeeld plays, playing, played, playful; stamuitbreidingen wordenaangegeven door de stam te laten voorafgaan door het dollar teken:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ $eet ’ , 5) > 0 ;

• fuzzy match: het zoeken wordt uitgebreid naar woorden die gelijkaardig gespeld worden,maar niet noodzakelijk dezelfde woordstam hebben:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’? beren ’ , 5) > 0 ;

66

Page 70: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Op basis van de ? operator zullen ook teksten waarin het woord “peren” voorkomt, eenscore groter dan nul geven.

• gelijkaardig klinkend: de zoekterm wordt voorafgegaan door het ! symbool

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ ! grate ’ , 5) > 0 ;

Dit is gelijkaardig aan de soundex functie in SQL.

ABOUT: zoeken naar thema’s van (engelstalige) documenten:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’ about ( f r u i t ) ’ , 5) > 0 ;

Er wordt gezocht naar termen die te maken hebben met het thema van het document in plaatsvan naar specifieke termen in het document.

Alternatieve score : aantal maal dat zoekwoord in een document voorkomt:

s e l e c t t i t e l , s co r e (5 ) from boekwhere conta in s ( tekst , ’<query>

<textquery>bananen</textquery>

<s co r e datatype=”INTEGER” a lgor i thm=”COUNT” /></query > ’ , 5) > 0 ;

Ook mogelijk datatype="FLOAT": geeft een nauwkeuriger default score

67

Page 71: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

7 SQL: aanvullingen

7.1 Versies

Er zijn verschillende dialecten van SQL. De twee belangrijkste standaards zijn ANSI SQL (jaren80) en een aangepaste SQL-92 of SQL2 (van 1992), met bijvoorbeeld een HAVING in een subquery.Actueel wordt SQL2 uitgebreid met nieuwe elementen zoals recursie, triggers en objecten. Dit zoumoeten leiden tot de nieuwe standaard SQL3.De meeste leveranciers van database management systemen hebben elk hun eigen versie ontwikkeld.Hierin zijn steeds de mogelijkheden van de originele ANSI standaard aanwezig. Daarnaast bevattenze een aantal elementen uit SQL2, maar nogal dikwijls lichtjes aangepast, bijvoorbeeld in desyntax. Meestal zijn er ook extra’s bovenop SQL2, waaronder eventueel een aantal elementen uitde voorgestelde SQL3 standaard.In dit hoofdstuk worden een aantal elementen besproken in verband met de gegevensintegriteitin een databank: het garanderen van bepaalde beperkingen en de beveiliging op het vlak vangebruikerstoegang.

7.2 Gegevens

L

�� � lnr

PPPP

�� � lnaam

@@@@@

�� � lstat �� � pla

�����

��@@@@��

LA

�� � qty

A

�� � anr

@@@@@

�� � anaam �� � kleur

������� � gewicht

���� � pla

leveranciers Llnr lnaam lstat plaL1 Jan 20 PeulisL2 Marc 10 HeverL3 Sara 30 HeverL4 Luc 20 PeulisL5 Els 30 Schriek

klanten Kknr knaam kstat plaK1 Sam 40 PeulisK2 Marc 50 HeverK3 Sara 60 HeverK4 Els 20 PeulisK5 Jan 30 Schriek

artikels Aanr anaam kleur gewicht plaA1 schroef rood 26 PeulisA2 as groen 31 HeverA3 bout blauw 17 GrootloA4 bout rood 24 PeulisA5 moer blauw 12 HeverA6 vijs rood 29 Peulis

lev-art LAlnr anr qtyL1 A1 300L1 A2 200L1 A3 400L1 A4 200L1 A5 100L1 A6 100L2 A1 300L2 A2 400L3 A2 200L4 A2 200L4 A4 300L4 A5 400(gemid: 258.33)

7.3 Domeinen en tabellen

Een beperking leggen op de mogelijke waarden voor een attribuut, kan door een domein te decla-reren.

CREATE DOMAIN LD CHAR(5);

CREATE DOMAIN AD CHAR(6);

68

Page 72: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

CREATE DOMAIN NAAM CHAR(20);

CREATE DOMAIN STAD CHAR(20);

CREATE DOMAIN STATUS SMALLINT;

CREATE DOMAIN QTY INTEGER;

CREATE DOMAIN MAS INTEGER;

CREATE DOMAIN KLEUR CHAR(6) DEFAULT ’???’

CONSTRAINT geldige_kleuren

CHECK ( VALUE IN

( ’rood’, ’geel’, ’blauw’, ’groen’, ’???’ ) ) ;

Zoals in het voorbeeld aangegeven, kan een beperking op de waarde van een attribuut gerealiseerdworden met een domein declaratie. Er is dan echter geen naam van het attribuut gekend; ditwordt opgevangen door het keyword VALUE te gebruikenDeze domeinen kunnen dan gebruikt worden als datatype voor de attributen.

CREATE TABLE L ( lnr LD,

lnaam NAAM,

lstat STATUS DEFAULT 10,

pla STAD,

PRIMARY KEY ( lnr ) );

CREATE TABLE K ( knr LD,

knaam NAAM,

kstat STATUS DEFAULT 20,

pla STAD,

PRIMARY KEY ( knr ) );

CREATE TABLE A ( anr AD,

anaam NAAM,

kleur KLEUR DEFAULT ’rood’,

gewicht MAS,

pla STAD,

PRIMARY KEY ( anr ) );

7.4 Views

Een view is een virtuele tabel: het resultaat van een select krijgt een naam en kan vanaf danbekeken worden als een nieuwe tabel. Het belang van een view heeft te maken met afschermenvan informatie: bijvoorbeeld een gebruiker die alleen de rode artikels mag zien en geen andere.Een view kan gezien worden als een functie in wiskundige betekenis: gegeven de argumenten,bereken het resultaat. De inverse hiervan, gegeven het resultaat en bereken de argumenten, is welmoeilijk te realiseren.

CREATE VIEW rooddeel (anr, anaam, wt, stad)

AS SELECT A.anr, A.anaam, A.gewicht, A.pla

FROM A

WHERE A.kleur = ’rood’;

anr anaam wt stadA1 schroef 26 PeulisA4 bout 24 PeulisA6 vijs 29 Peulis

De view rooddeel(anr,anaam,wt,stad)kan door de gebruiker als een nieuwe tabel gezien worden.

CREATE VIEW ah

AS SELECT LA.anr, SUM(LA.qty) AS tothoev

FROM LA

GROUP BY LA.anr ;

A1 300 + 300 600A2 200 + 400 + 200 + 200 1000A3 400 400A4 200 + 300 500A5 100 + 400 500A6 100 100

69

Page 73: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Bij de uitvoering van een SQL statement dat naar een view refereert, wordt door het DBMSde view vervangen door haar definitie: het statement wordt “herschreven”. Het resulterendeherschreven statement wordt dan uitgevoerd; de view wordt dus niet eerst uitgerekend, deze blijftsteeds virtueel. Bij een SELECT is herschrijven steeds mogelijk.

SELECT anr

FROM rooddeel

WHERE wt > 25;

SELECT anr

FROM A

WHERE gewicht > 25 AND kleur = ’rood’;

Er zijn “updatable” en “non-updatable” views. Wanneer er een 1 − 1 correspondentie bestaattussen de rij in de originele tabel en de view, kan de update uitgevoerd worden.

UPDATE rooddeel

SET wt = 454 * wt;

UPDATE A

SET gewicht = 454 * gewicht

WHERE kleur = ’rood’;

Er kunnen echter problemen optreden wanneer door de DBMS het SQL statement herschrevenwordt.

UPDATE ah

SET tothoev = tothoev + 1;UPDATE LA

SET ???

7.5 Beveiliging

Er zijn zes types van privileges. De eerste vier, SELECT, INSERT, DELETE en UPDATE, hebben temaken met een relatie (zowel een basistabel als een view). Degene die het privilege gekregen heeft,kan de desbetreffende actie uitvoeren op de tabel.Het REFERENCE privilege is het recht om naar de tabel te refereren in een integriteitsconstraint,bijv. assertions, attribuut- en tuple-gebaseerde CHECKs en referentiele integriteitsbeperkingen.Het USAGE privilege op een domein of een ander schema-element (met uitzondering van relaties enassertions) geeft het recht dat element in zijn eigen declaraties te gebruiken.Normaal worden privileges toegekend op een ganse tabel. In SQL2 is het mogelijk INSERT,DELETE en UPDATE privileges toe te kennen op een of meerdere attributen van een relatie. Ditkan ook gerealiseerd worden door een VIEW te creeren en dan privileges op het niveau van deVIEW te definieren.De gebruiker die een schema-element creeert, wordt eigenaar van dat element en heeft er alleprivileges op. Met behulp van GRANT en REVOKE statements kunnen privileges toegekend wordenaan of afgenomen worden van andere gebruikers.

1. GRANT gevolgd door een of meer privileges of ALL PRIVILEGES;

2. ON gevolgd door een tabel of een view;

3. TO gevolgd door een lijst van gebruikers of PUBLIC;

4. eventueel, WITH GRANT OPTION, wat aangeeft dat de gebruiker die het privilege krijgt, ditprivilege zelf kan doorgeven aan andere gebruikers.

Voorbeeld:

GRANT SELECT ON L TO was, gfo, gla;

GRANT SELECT, INSERT ON L,A TO che, avl WITH GRANT OPTION;

GRANT SELECT, DELETE, UPDATE ON LA TO PUBLIC;

1. REVOKE gevolgd door een of meer privileges of ALL PRIVILEGES;

2. ON gevolgd door een tabel of een view;

3. FROM gevolgd door een lijst van gebruikers of PUBLIC.

Voorbeeld:

REVOKE SELECT ON L FROM was, gfo;

REVOKE SELECT, INSERT ON A FROM avl;

REVOKE DELETE, UPDATE ON LA FROM cma;

70

Page 74: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

7.6 Beperkingen

Een actief element is een expressie of een statement dat eenmaal geschreven wordt en in de data-bank gestockeerd wordt. Er wordt van verwacht dat het op gepaste tijden uitgevoerd wordt. Hetactie-tijdstip kan zijn wanneer een bepaalde event gebeurt, zoals het toevoegen van informatie ineen bepaalde relatie of wanneer bij het wijzigen van de databank een bepaalde logische voorwaardewaar moet blijven.

7.6.1 Sleutels

Waarschijnlijk is het belangrijkste type van beperking in een databank de declaratie dat eenbepaald attribuut of een set van attributen een sleutel vormen voor een relatie. Dit wil zeggen datgeen twee rijen in de tabel dezelfde waarde voor dit attribuut of deze attributen mogen hebben.Bij elke tabel definitie kan PRIMARY KEY slechts eenmaal gebruikt worden. Ook met het keywordUNIQUE kunnen sleutels gedeclareerd worden.

CREATE TABLE L ( lnr LD PRIMARY KEY,

lnaam NAAM UNIQUE,

lstat STATUS,

pla STAD UNIQUE);

CREATE TABLE LA ( lnr LD NOT NULL,

anr AD NOT NULL,

qty QTY NOT NULL,

PRIMARY KEY (lnr, anr),

UNIQUE (lnr, qty) );

Met UNIQUE kunnen verschillende sleutels op een tabel gedeclareerd worden.Er zijn twee subtiele verschillen:

1. Een foreign key kan alleen refereren naar een primary key van een relatie.

2. Bij de implementatie van een commercieel DBMS kan de keuze gemaakt worden om voorde primary key automatisch een index te creeren, terwijl het voor de UNIQUEs overgelatenwordt aan de gebruiker.

De creatie van een index zit niet in de standaard SQL, maar bijna elk DBMS heeft wel eencommand voorzien:

CREATE UNIQUE INDEX naamsleutel ON L(lnaam);

Een tweede belangrijk type beperking is dat de waarde van bepaalde attributen zinvol moetenzijn, bijvoorbeeld ook voorkomen in een andere tabel. In SQL kan een attribuut of een set vanattributen van een relatie gedeclareerd worden als een foreign key, refererend naar een attribuutof meerdere attributen van een tweede relatie (eventueel dezelfde relatie). Hierbij moet het gere-fereerde attribuut (of attributen) van de tweede relatie wel de primary key zijn van deze relatie.

7.6.2 Globale beperkingen: assertions

Een assertion zegt iets over volledige relaties of over verschillende tuple-variabelen behorend totdezelfde relatie:

CREATE ASSERTION <naam> CHECK ( <conditie> )

De conditie in de database moet steeds waar zijn. Om het even welke database aanpassing, dieals effect heeft dat de conditie niet meer waar is, wordt verworpen. In tegenstelling tot attribuut-en tuple gebaseerde beperkingen, kan een assertie NOOIT ongeldig worden. Maar omdat dezeattribuut- en tuple-gebaseerde beperkingen gemakkelijker (efficienter) te implementeren zijn, is hetdikwijls te verkiezen deze te gebruiken in plaats van assertions, zeker wanneer er geen subqueriesin voorkomen.

71

Page 75: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Voorbeeld: geen enkele leverancier kan een totaal pakket met een totaal gewicht van meer dan1000 leveren.

CREATE ASSERTION niettezwaar CHECK

( 1000 >= ALL ( SELECT SUM(qty) FROM LA

GROUP BY lnr ) );

7.7 DDL statements voor wijzigingen in structuren

7.7.1 Aanpassingen aan de tabelstructuur

De structuur van een tabel kan gewijzigd worden met de alter table-instructie.Veronderstel dat de spelerstabel geen kolom bondsnummer zou hebben, dan zouden we deze kun-nen toevoegen met de volgende instructie.

ALTER TABLE spelers

ADD bdnr char(4)

We kunnen een kolom ook verwijderen.We verwijderen ter illustratie de kolom huisnummer.

ALTER TABLE spelers

DELETE hnr

We kunnen het datatype van kolommen wijzigen. Hiervoor dienen alle waarden van de kolom tevoldoen aan de regels van het nieuwe datatype. Of nog, alle waarden van de kolom moeten tetransformeren zijn naar het nieuwe datatype.Het voorbeeld verandert het datatype van de kolom bondsnummer in integer.

ALTER TABLE spelers

MODIFY bdnr integer

7.7.2 Aanpassingen aan beperkingen

Alle bovenvermelde beperkingen kunnen een naam krijgen. Dit wordt gerealiseerd door de beper-king te beginnen met het keyword CONSTRAINT gevolgd door een naam, zoals bij de definitievan het domein KLEUR.

CREATE TABLE A ( anr char(5) CONSTRAINT sleu PRIMARY KEY,

anaam char(20),

kleur char(8) CONSTRAINT kleurok

CHECK ( kleur IN (’rood’,’geel’,’groen’,’blauw’) ),

gewicht integer CONSTRAINT gewichtok

CHECK ( gewicht < 100 ),

pla char(20),

CONSTRAINT blauwgewicht

CHECK ( kleur = ’blauw’ OR gewicht > 20 ) );

Met behulp van deze namen kan bij aanpassingen naar de juiste beperking gerefereerd worden.Weglaten: ALTER TABLE A DROP CONSTRAINT gewichtok;

Terug bijvoegen: ALTER TABLE A ADD CONSTRAINT gewichtok CHECK ( gewicht < 100 );

Merk op dat de beperking nu niet attribuut- maar tuple gebaseerd is. Een attribuut-gebaseerdeCHECK beperking achteraf bijvoegen, kan niet. Om dit te realiseren moet men met domeinenwerken:

CREATE DOMAIN MAS integer

CONSTRAINT gewichtok CHECK ( VALUE < 100 );

ALTER DOMAIN MAS DROP CONSTRAINT gewichtok;

ALTER DOMAIN MAS ADD CONSTRAINT gewichtok CHECK ( VALUE < 100 );

72

Page 76: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Ook assertions kunnen verwijderd worden:

DROP ASSERTION niettezwaar;

7.8 Uitbreidingen in SQL3

In het vorige deel werden beperkingen besproken die opgenomen zijn in de SQL2 standaard. Dezebeperkingen worden gecontroleerd op het moment dat het betrokken element gewijzigd wordt.Het DBMS zorgt daarvoor.In de voorgestelde SQL3 standaard worden ook triggers gedefinieerd. De keuze om al of niet tetriggeren wordt hier overgelaten aan de database programmeur. Op die manier worden aan degebruiker een aantal opties aangeboden om database operaties te trigggeren en dit niet alleen omschendingen van beperkingen te vermijden.Verschillen tussen triggers (of event-condition-action regels) en beperkingen:

• Triggers worden alleen getest wanneer bepaalde events, die door de database programmeurbepaald zijn, zich voordoen. De toegelaten events zijn meestal toevoegen, verwijderen ofaanpassen aan/uit een bepaalde relatie. Een andere event is het einde van een transactie(zie volgend hoofdstuk).

• Bij het optreden van een event wordt een conditie getest. Indien de voorwaarde niet geldt,wordt verder niets dat met de trigger te maken heeft, uitgevoerd bij deze event.

• Indien aan de voorwaarde van de trigger voldaan is, wordt de actie die bij de trigger hoort,door het DBMS uitgevoerd. Deze actie kan bijvoorbeeld voorkomen dat de event plaatsvindt, of kan de event ongedaan maken (bijv. een rij verwijderen die net toegevoegd is).De actie kan om het even welke rij van database operaties zijn, zelfs operaties die niets methet triggering event te maken hebben.

7.8.1 Triggers in SQL3

Belangrijkste elementen in een trigger:

1. De actie kan uitgevoerd worden voor, na of in plaats van de triggering event.

2. De actie kan zowel naar de oude als de nieuwe waarden van de tuples verwijzen die toege-voegd, verwijderd of aangepast zijn tijdens de event dat de actie triggerde.

3. Met de WHEN kan een conditie gespecificeerd worden: de actie wordt alleen uitgevoerd bijeen triggering en er moet voldaan zijn aan de voorwaarde op het moment van de event.

4. Er kan gespecificeerd worden of de actie moet uitgevoerd worden

• ofwel eenmaal voor elke aangepaste tuple;

• ofwel voor alle tuples die tijdens een database operatie gewijzigd zijn.

7.8.2 Assertions in SQL3

In SQL3 kunnen assertions getriggerd worden door programmeur-specifieke events in plaats vandoor het systeem gegenereerde events. Het is ook mogelijk om de assertion te laten refereren naarelk tuple van de tabel (zoals een tuple based constraint) in plaats van naar de tabel of tabellenals geheel.

CREATE ASSERTION totqtyAFTER

INSERT ON LA,UPDATE OF qty ON LA

CHECK ( 1000 >= ALL ( SELECT SUM( qty ) FROM LAGROUP BY ln r ) ) ;

Het belangrijkste verschil met SQL2 assertions is dat in de assertion aangegeven wordt wanneer decontrole moet uitgevoerd worden. Hierdoor zijn SQL3 assertions eenvoudiger te implementeren,

73

Page 77: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

maar moeilijker te gebruiken. De gebruiker moet nu zelf alle mogelijke events die de beperkingzouden kunnen triggeren, opsommen en loopt het gevaar dat de database in een inconsistentetoestand kan komen wanneer deze events niet juist gekozen zijn.

74

Page 78: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

8 PL/SQL

PL/SQL is een procedurele uitbreiding op SQL, omdat SQL op zich niet krachtig genoeg is omcomplexe databank applicaties te ontwikkelen. Server-side functies, of stored procedures worden opde database server uitgevoerd in plaats van in de client-applicatie. Er zijn verschillende redenenom server-side functies te gebruiken:

• verhogen van de uitdrukkingskracht van SQL;

• query resultaten tuple per tuple verwerken;

• optimisatie van gecombineerde SQL statements;

• modulaire programma’s;

• hergebruik van programma code; een functie die door verschillende applicaties gebruiktwordt, moet niet in elk van deze applicaties gecopieerd worden; telkens een functie nodigis, zal de client de functie oproepen;

• kostreductie bij onderhoud en aanpasingen van applicaties. De functies zijn centraal op dedatabaseserver gestockeerd en bij aanpassingen zullen alle client-applicaties onmiddellijk denieuwe versie gebruiken.

Triggers zijn speciale server-side functies, die automatisch opgeroepen worden telkens een tabelaangepast wordt.

8.1 Structuur

PL/SQL is een blok-georienteerde taal:

[ <Blok hoofding> ][ DECLARE

<Constanten>

<Variabelen>

<Cursors><Eigen gedefinieerde exceptions> ]

BEGIN<PL/SQL statements>[ EXCEPTION

<afhandeling exception > ]END;

PL/SQL statement :

SQL statement (alleen DML)controle structuur (lus of selectie)afhandelen van exceptiesoproepen van een PL/SQL blok

Een PL/SQL statement kan zelf een PL/SQL blok zijn. Indien geen < Blok hoofding> gebruiktwordt, spreekt men van een anoniem blok. Een <Blok hoofding> wordt gebruikt voor de definitievan een function of een procedure.

8.2 Declaraties van variabelen

<Variabele naam> [constant] <data type> [not null] [:= <expressie>]

constant : eens een waarde is toegekend aan de variabele, kan deze waarde niet meer gewijzigdworden.

not null : de gedeclareerde variabele moet steeds een waarde verschillend van null hebben.

75

Page 79: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• Klassieke types: number, integer, char(n), date, boolean.

• Verwijzingen:

Tabelnaam.kolomnaam%TYPE : het type van de variabele is gelijk aan het data typevan de gerefereerde kolom van de gespecificeerde tabel.

Tabelnaam%ROWTYPE : dit data type specificeert dat de record-variabele alle attri-buutwaarden van een volledige rij uit de gespecificeerde tabel kan bevatten.

Een veld in deze record aanspreken gebeurt met de dot-notatie: recordnaam.kolomnaam.

• Cursors:

CURSOR <cursornaam> [ (<parameterlijst>) ] IS <select statement>]

8.3 Toekenningen

Het resultaat van een rekenkundige expressie aan een variabele toewijzen:

DECLAREteller integer;

BEGINteller := 0;teller := teller + 1;dbms output.put line(teller );

END;

Om een PL/SQL blok uit te voeren, wordt het blok in SQL*Plus ingetikt en deze input wordtafgesloten met een slash (/) op een aparte lijn. Deze slash geeft aan SQL*Plus aan dat het blokvolledig ingetikt is en dat het naar de database server moet verzonden worden om daar uitgevoerdte worden. (Deze slash wordt in de PL/SQL voorbeelden in deze tekst niet getoond.)

Package voor het sturen van output:

• DBMS OUTPUT.PUT(<string>) : de string wordt aan de output buffer toegevoegd;

• DBMS OUTPUT.PUT LINE(<string>) : de string en een newline worden aan de outputbuffer toegevoegd;

• DBMS OUTPUT.NEW LINE : een newline wordt aan de output buffer toegevoegd.

Code in een PL/SQL blok kan output genereren, maar deze wordt by default niet getoond doorSQL*Plus. De reden hiervoor is dat SQL*Plus niet zelf de PL/SQL code uitvoert. Wanneer deslash (/) ingetikt wordt, zendt SQL*Plus de code naar de database server, die de code uitvoert.Maar de Oracle database server heeft niet de mogelijkheid om de eventuele output rechtstreeks aande gebruiker te tonen. In plaats daarvan wordt de eventuele output van een PL/SQL blok gebufferddoor de server totdat de applicatie die de uitvoering van het blok aanvroeg, deze informatieopvraagt. By default vraagt SQL*Plus de PL/SQL output van de server niet op. Dit kan welgewijzigd worden door de serveroutput optie te zetten:

SQL> SET SERVEROUTPUT ON

Het resultaat van een SELECT statement aan een variabele toewijzen:

DECLAREproduct a.anaam%TYPE;alles a%ROWTYPE;

BEGINSELECT anaam INTO product FROM a WHERE anr = ’A1’ ;dbms output.put line(product);SELECT ∗ INTO alles FROM a WHERE anr = ’A1’ ;

76

Page 80: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

dbms output.put line(alles .anaam);END;

Het resultaat van de SELECT mag slechts een waarde of een rij zijn. Indien meerdere rijen uit detabel aan de WHERE voldoen, wordt een exception gegenereerd.

8.4 Controle structuren

8.4.1 IF statement

IF <conditie> THEN<PL/SQL statement><PL/SQL statement>...

ELSIF <conditie> THEN<PL/SQL statement><PL/SQL statement>...

ELSE<PL/SQL statement><PL/SQL statement>...

END IF;

declarekleurtje a.kleur%type;som integer := 0;

beginselect kleur into kleurtje from a where anr=’A1’;if kleurtje = ’rood’ then

som := som + 1;elsif kleurtje = ’geel ’ then

som := som + 2;else

som := som + 3;end if;dbms output.put line(kleurtje || ’ : ’ || som);

end;

8.4.2 WHILE lus

[ << <label naam> >> ]WHILE <conditie> LOOP

<PL/SQL statement><PL/SQL statement>...

END LOOP [ <label naam> ] ;

declareteller integer;

beginteller := 0;while teller < 10 loop

77

Page 81: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

teller := teller + 1;dbms output.put line(teller );

end loop;end;

8.4.3 Continue lus

[ << <label naam> >> ]LOOP

<PL/SQL statement>EXIT WHEN <conditie><PL/SQL statement>...

END LOOP [ <label naam> ] ;

declareteller integer;som integer := 0;

beginteller := 0;loop

teller := teller + 1;exit when teller >= 10;som := som + teller;dbms output.put line(teller || ’ : ’ || som );

end loop;end;

8.4.4 FOR lus

[ << <label naam> >> ]FOR <index> IN [ REVERSE ] <ondergrens> .. <bovengrens> LOOP

<PL/SQL statement><PL/SQL statement>...

END LOOP [ <label naam> ] ;

declareteller integer;som integer := 0;

beginfor teller in 0..9 loop

som := som + teller;dbms output.put line(teller || ’ : ’ || som );

end loop;end;

8.5 Functies

Het declare gedeelte wordt vervangen door <Blok hoofding> om een function of een procedurete definieren.

78

Page 82: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

CREATE [ OR REPLACE ] { FUNCTION | PROCEDURE } <naam>

[ (<parameterlijst>) ] IS[ <declaraties> ]

BEGIN<PL/SQL statements>

END;

Een <parameter> in een <parameterlijst>:

<naam> [ IN | OUT | IN OUT ] <datatype> [{ := | DEFAULT } <expressie>]

8.5.1 Een functie zonder argumenten

create or replace function een return integer isbegin

return 1;end;

Gebruik: SELECT een AS antwoord FROM dual;

Ook mogelijk: EXEC dbms output.put line(een)

8.5.2 Een functie met eenvoudige argumenten

create or replace function som(een integer,twee integer) return integer isbegin

return een+twee;end;

Gebruik: SELECT som(1,2) AS antwoord FROM dual;

8.5.3 Een functie met string argumenten

create or replace function concat(een char,twee char) return char asbegin

return een || twee;end;

Gebruik: SELECT concat(’appel’,’tje’) AS kleintje FROM dual;

8.5.4 Een functie met samengestelde argumenten

create or replace function dubbel(x a%ROWTYPE) return integer isbegin

return 2 ∗ x.gewicht;end;

Het is niet mogelijk om de functie op de volgende manier te gebruiken:

SELECT anr, dubbel(?) AS droom FROM a WHERE a.pla = ’Peulis’;

8.5.5 Probleem bij een functie

79

Page 83: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

create or replace function ruim art return integer isbegin

delete from a where a.gewicht <= 0;return 1;

end;

Gebruik: SELECT ruim art AS weg FROM dual;

Er wordt volgende fout door SQL*Plus gegeven:select ruim_art as weg from dual

*

ERROR at line 1:

ORA-14551: cannot perform a DML operation inside a query

ORA-06512: at "EM102.RUIM_ART", line 3

ORA-06512: at line 1

Een mogelijkheid is gebruikmaken van SQL*Plus variabelen:

SQL> VARIABLE res number

SQL> EXECUTE :res := ruim_art

SQL> PRINT res

8.6 Intermezzo: bind variabelen

SQL*Plus voorziet in twee soorten variabelen:

• substitutie variabelen: gebruik bij SQL*Plus scripts;

• bind variabelen: voor de ondersteuning van het gebruik van PL/SQL in SQL*Plus scripts.Bind variabelen worden gebruikt voor het teruggeven van waarden uit een PL/SQL bloknaar SQL*Plus, waar deze data kan gebruikt worden in volgende queries of in anderePL/SQL blokken.

Declaratie: VARIABLE <var naam> <data type>

VARIABLE is een SQL*Plus command dat kan afgekort worden tot VAR.

<data type> : number, char(n), nchar(n), varchar2(n), nvarchar2(n).

Het command VAR kan ook gebruikt worden om een lijst te tonen van alle reeds gedeclareerdevariabelen of, indien de naam van een bestaande variabele vermeld wordt, de informatie omtrentdeze variabele te tonen.Het bereik van een bind variabele is de SQL*Plus sessie waarin de variabele gedeclareerd geweestis. Variabelen die in een PL/SQL blok gedeclareerd worden daarentegen, houden op te bestaanwanneer het blok uitgevoerd is. Bind variabelen zitten dus op een niveau hoger, en kunnen dusdoor meerdere PL/SQL blokken en queries gebruikt worden.Om een bind variabele in een PL/SQL blok te gebruiken, moet de naam voorafgegaan wordendoor een dubbelpunt (:).

SQL> VAR a r t i k e l CHAR(5 )SQL> BEGIN

: a r t i k e l := ’A1 ’ ;END;/

SQL> SELECT ∗ FROM l a WHERE anr = : a r t i k e l ;

Het SQL*Plus command EXECUTE (afgekort EXEC) kan gebruikt worden om een enkelvoudigPL/SQL statement uit te voeren:

80

Page 84: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

SQL> EXEC :artikel := ’A1’

De inhoud van een bind variabele kan op twee manieren getoond worden: met behulp van hetPRINT command of door middel van het SELECT statement.

Formaat van het PRINT (afgekort tot PRI) command: PRINT <var naam>

Wanneer geen variabele gespecificeerd wordt, wordt de inhoud van alle bind variabelen getoond.

Het SELECT statement kan ook gebruikt worden om de inhoud van een variabele te tonen:

SQL> VAR artikel CHAR(5)SQL> EXEC :artikel := ’A2’SQL> SELECT :artikel FROM dual;

In bovenstaand voorbeeld geeft SELECT geen functioneel voordeel ten opzichte van het PRINTcommand. Gebruik van SELECT wordt wel interessant wanneer informatie uit meer dan eenkolom moet getoond worden:

SQL> SELECT : a r t i k e l | | ’ g e l eve rd door ’ | | to cha r ( count (∗ ) )FROM l a WHERE anr = : a r t i k e l ;

8.7 Procedures

8.7.1 Een procedure met een OUT argument

create or replace procedure ruimop art(res OUT integer) isbegin

delete from a where a.gewicht <= 0;res := 1;

end;

Gebruik: declare e integer;begin

ruimop art(e);dbms output.put line(’res ’ || e );

end;

8.7.2 Een procedure met IN en OUT argumenten

create or replace procedure ig( no a.anr%TYPE,ext a.gewicht%TYPE, res OUT integer) is

beginupdate a set a.gewicht = a.gewicht + ext where a.anr = no;res := 1;

end;

Opmerking: de naam van een argument (bijv. no) mag niet gelijk zijn aan de naam van een veldin de tabel (bijv. a.anr).

Gebruik: declare e integer;begin

ig (’A3’, 5, e);dbms output.put line(’res ’ || to char(e) );

end;

Alternatief: SQL> VARIABLE ee number

SQL> EXEC ig(’A2’, 7, :ee)

SQL> PRINT ee

81

Page 85: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

8.8 Cursors

Het verwerken van query resultaten rij per rij gebeurt met behulp van een cursor.Declaratie: cursor <cursornaam> [ (<parameterlijst>) ] is <select statement>]

8.8.1 Een FOR loop

create or replace function gewogen(mas a.gewicht%type) return integer iscursor acur IS SELECT ∗ from a;som integer := 0;x a%ROWTYPE;

beginOPEN acur;loop

FETCH acur into x;exit when acur%NOTFOUND;if x.gewicht < mas then

som := som + x.gewicht;end if;

end loop;CLOSE acur;return som;

end;

Gebruik: SELECT gewogen(30) AS weinig FROM dual;

Attributen van een cursor die kunnen getest worden:

%NOTFOUND : heeft de waarde NULL voor de eerste fetch;heeft de waarde false indien de meest recente fetch een tuple gelezen heeft.

%FOUND : logisch tegengestelde van %NOTFOUND.

%ISOPEN : heeft de waarde true als de cursor geopend is.

%ROWCOUNT : aantal rijen reeds opgehaald uit de cursor.

8.8.2 Een cursor FOR loop

create or replace function gewogen(mas a.gewicht%type) return integer iscursor acur(m a.gewicht%TYPE) IS SELECT ∗ from a

WHERE gewicht < m;som integer := 0;x a%ROWTYPE;

beginfor x in acur(mas) loop

som := som + x.gewicht;end loop;return som;

end;

Gebruik: SELECT gewogen(30) AS weinig FROM dual;

8.8.3 Een impliciete cursor

In plaats van een CURSOR naam te declareren en deze te gebruiken, kan de FOR lus gedefinieerdworden met behulp van een SELECT statement tussen haakjes.

82

Page 86: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

create or replace function gewogen(mas a.gewicht%type) return integer issom integer := 0;x a%ROWTYPE;

beginfor x in (select ∗ from a where gewicht <= mas)loop

som := som + x.gewicht;end loop;return som;

end;

Gebruik: SELECT gewogen(30) AS weinig FROM dual;

8.8.4 Aanpassingen bij gebruik van een cursor

create or replace function pasaan(mas A.gewicht%TYPE) return integer iscursor acur(m a.gewicht%TYPE) is SELECT ∗ FROM a WHERE gewicht <= m

FOR UPDATE;teller integer := 0;x a%ROWTYPE;begin

for x in acur(mas) loopUPDATE a SET gewicht = x.gewicht ∗ 2 WHERE CURRENT OF acur;teller := teller + 1;

end loop;return teller ;

end;

Gebruik met behulp van een SQL*Plus variabele:

SQL> VARIABLE aantal numberSQL> EXECUTE :aantal := pasaan(25)SQL> PRINT aantal

8.8.5 Een functie met samengestelde argumenten

create or replace function dubbel(x a%ROWTYPE) return integer isbegin

return 2 ∗ x.gewicht;end;

Gebruik: declarecursor x is select ∗ from a;r integer := 0;y a%ROWTYPE;

beginfor y in x loop

r := dubbel(y);dbms output.put line( y.anaam || ’ ’ || to char(r) );

end loop;end;

Voorbeeld 2:

create or replace function teveel(art a%ROWTYPE, mas integer) return boolean isbegin

83

Page 87: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

if art .gewicht IS NULL thenreturn false;

end if;return art.gewicht > mas;

end;

Gebruik: declarecursor acur is SELECT ∗ FROM a WHERE pla = ’Hever’;r boolean := false;y a%ROWTYPE;

beginfor y in acur loop

r := teveel(y ,40);if r then

dbms output.put(y.anr || ’ ’ );end if;

end loop;dbms output.new line;

end;

8.9 Exceptions

create or replace function gekleurd(kleurtje A.kleur%TYPE) return char isx a%ROWTYPE;

beginSELECT ∗ INTO x FROM A WHERE kleur = kleurtje;return x.anaam;exception

when NO DATA FOUND thenraise application error (−20030,’geen artikels in het ’|| kleurtje );

when TOO MANY ROWS thenraise application error (−20031,’teveel artikels in het ’|| kleurtje );

end;

Gebruik: SQL> SELECT gekleurd(’groen’) AS artikel FROM dual;SQL> SELECT gekleurd(’geel’) AS artikel FROM dual;SQL> SELECT gekleurd(’rood’) AS artikel FROM dual;

Systeem-exceptions:

CURSOR ALREADY OPEN : (ORA-06511) openen van een cursor die reeds open is;

INVALID CURSOR : (ORA-01001) niet toegelaten cursor operatie (bijvoorbeeld het fetchenvan een gesloten cursor);

NO DATA FOUND : (ORA-01403) geen tuple gelezen (door een SELECT of een FETCH);

TOO MANY ROWS : (ORA-01422) een SELECT ... INTO resulteert in meer dan 1 tuple;

ZERO DIVIDE : (ORA-01476) poging om een deling door nul te doen.

Merk op:

create or replace function gekleurd(kleurtje A.kleur%TYPE) return char isx a%ROWTYPE;

begin

84

Page 88: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

SELECT ∗ INTO x FROM A WHERE kleur = kleurtje;if SQL%NOTFOUND then

raise application error (−20030,’geen artikels in het ’|| kleurtje );end if;return x.anaam;

end;

SQL cursor : een impliciete cursor die Oracle opent bij het verwerken van een SQL statementdat niet met een expliciete cursor gerelateerd is.Bijvoorbeeld: SELECT, INSERT, UPDATE, DELETE.Indien een SELECT INTO statement geen rij terug geeft, wordt door PL/SQL de voorgedefinieerdeexception NO DATA FOUND gegenereerd, onafhankelijk van het feit of het %NOTFOUND attribuut vande impliciete SQL cursor getest wordt of niet (zoals in bovenstaand voorbeeld).

8.10 Triggers

Triggers zijn speciale server-side functies, die automatisch opgeroepen worden telkens een tabelaangepast wordt.

Syntax in Oracle voor de creatie van een trigger

CREATE [OR REPLACE] TRIGGER <trigger naam>

BEFORE | AFTERINSERT OR UPDATE [ OF <kolomnamen> ] OR DELETE ON <tabelnaam>

[ FOR EACH ROW ][ WHEN ( <voorwaarde> ) ][ DECLARE

<declaraties> ]BEGIN

<PL/SQL statements>END;

De actie wordt met behulp van PL/SQL statements geschreven. Dit zijn gewone SQL statementsen daarnaarst zijn ook enkele controle statements mogelijk zoals in een klassieke procedurele taal.

8.10.1 Row level trigger

Hierbij de trigger uitgevoerd wordt bij elke gerelateerde rij.Toevoegen van twee bijkomende attributen in de artikel tabel:

CREATE TABLE aex( anr char(3),

anaam char(10),kleur char(6) DEFAULT ’rood’,

CONSTRAINT aex kleurok CHECK ( kleur IN( ’rood’, ’ geel ’, ’blauw’, ’groen’, ’???’ ) ),

gewicht integer CONSTRAINT aex gewichtok CHECK ( gewicht <= 500 ),pla char(10),lastdate date,lastuser char(10),PRIMARY KEY (anr) );

Voorbeeld 1:

85

Page 89: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

CREATE OR REPLACE TRIGGER taexBEFORE INSERT OR UPDATE ON aexFOR EACH ROWBEGIN

IF :NEW.anaam IS NULL THENraise application error ( −20020, ’anaam kan niet NULL zijn’);

END IF;IF :NEW.gewicht IS NULL THEN

raise application error ( −20021,:NEW.anaam || ’ kan geen NULL gewicht hebben’);

END IF;IF :NEW.gewicht < 0 THEN

raise application error ( −20022,:NEW.anaam || ’ kan geen negatief gewicht hebben’);

END IF;:NEW.lastdate := sysdate;:NEW.lastuser := USER;

END;

:NEW bevat de nieuwe waarden van de rij die toegevoegd wordt of aangepast wordt. In deze triggerwordt dus nagegaan of aan een aantal beperkingen omtrent de waarden van een aantal attributenvoldaan is. Indien dit niet zo is, wordt met behulp van raise application error een foutboodschapuitgeschreven en wordt de actie afgebroken. Er zal dus geen toevoeging of aanpassing gebeuren.Indien aan alle voorwaarden voldaan is, wordt de twee bijkomende attributen ingevuld en dan zalde rij aan de tabel toegevoegd (of gewijzigd) worden.

Gebruik: INSERT INTO aex VALUES (’A1’,’schroef’,’rood’,26,’Peulis’,null,null);

Voorbeeld 2:

CREATE OR REPLACE TRIGGER maexBEFORE UPDATE ON aexFOR EACH ROWDECLARE

naam aex.lastuser%TYPE;BEGIN

naam := USER;IF :OLD.lastuser <> naam THEN

raise application error ( −20025, naam || ’ heeft geen rechten ’);END IF;IF :NEW.kleur <> :OLD.kleur THEN

raise application error ( −20026, :NEW.kleur || ’ kan niet wijzigen ’);END IF;:NEW.lastdate := sysdate;

END;

:OLD bevat de oude waarden van de rij die aangepast wordt. Indien aan een aantal voorwaardenvoldaan is, wordt de datum aangepast en wordt de nieuw rij in de plaats gezet van de oude rij.

Gebruik: UPDATE aex SET gewicht = 28 WHERE anr = ’A1’;

8.10.2 Statement level trigger

Deze trigger wordt eenmaal voor alle tuples die tijdens een database operatie gewijzigd zijn,uitgevoerd.Definitie van een logging tabel voor acties op tabel a:

86

Page 90: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

CREATE TABLE logtabel ( logtekst char(10),loguser char(20),logtijd date );

Definitie van de logging trigger:

CREATE OR REPLACE TRIGGER aloggingAFTER INSERT OR UPDATE OR DELETE ON aBEGIN

IF INSERTING THENINSERT INTO logtabel VALUES (’INSERT’, user, sysdate) ;

END IF;IF UPDATING THEN

INSERT INTO logtabel VALUES (’UPDATE’, user, sysdate) ;END IF;IF DELETING THEN

INSERT INTO logtabel VALUES (’DELETE’, user, sysdate) ;END IF;

END;

Gebruik: UPDATE a SET gewicht = 25 WHERE pla = ’Peulis’;

87

Page 91: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

9 Analyse van gegevens: normalisatie

Normalisatie wordt gebruikt om een aantal problemen op het gebied van gegevensonafhankelijk-heid en redundantie op te lossen. De normalisatie stappen worden besproken aan de hand vaneen voorbeeld. Het nut van normalisatie wordt duidelijk gemaakt door telkens te wijzen op deproblemen (qua gebruik en onderhoud van de database), welke er kunnen bestaan wanneer degegevens in een bepaalde vorm voorkomen.Tabel 6 geeft als vertrekbasis de niet genormaliseerde records, waarin een aantal gegevens (attri-buten) zijn opgenomen i.v.m. de programmeurs (entiteit) van het bedrijf.

PROGRAMMEURPROGR. PROGR. TEAM TEAM TEAM SPEC. SPEC. SPEC.NR. NAAM IDENT. LOKAL. NAAM KODE NAAM GRAAD1099 JANSEN 15 B116 BSP 05 ONTWERP A+

06 ANALYSE A2734 JACOBS 23 K32 STIV 03 TEST B+

04 KONTROL A4372 DE WIT 22 K32 ADOC 03 TEST A

02 IMPLEM. A+04 KONTROL C

7299 DAANS 15 B116 BSP 02 IMPLEM B+

Tabel 6: De niet genormaliseerde entiteit

Er gelden volgende externe beperkingen: elke programmeur kan slechts in 1 team werken en elkteam heeft slechts 1 lokatie.Een attribuut of een reeks attributen word(t)(en) de kandidaatsleutel genoemd, wanneer de waar-den uniek de records identificeren; men zegt dat de sleutel de entiteit identificeert. De primairesleutel is deze welke gekozen wordt om de entiteit te identificeren.In het voorbeeld van tabel 6 zijn de attributen (data elements):

programmeur { progr.nr., progr.naam,

team ident., team lokal., team naam,

{spec.kode, spec.naam, spec.graad} }

De voor hand liggende primaire sleutel is progr.nr..

9.1 Eerste normaalvorm.

Een relatie (entiteit) in eerste normaalvorm is een tabel, waarin slechts een waarde op de intersektievan kolommen (attributen) en rijen (tuples) mag voorkomen. Groepen van waarden (repeatinggroups) zijn niet toegelaten.Bekijken we tabel 6. Voor een gegeven waarde van de primaire sleutel kunnen de waarden vande secundaire (niet-sleutel) attributen niet uniek gedefinieerd worden. Dit geeft aanleiding totvolgende anomalieen:

• updaten : verandert bijv. De Wit van team, moeten we de team gegevens wijzigen in alletuples, waarin De Wit voorkomt. Updaten zal dus veel redundant zoekwerk veroorzaken;

• er is geen garantie dat aan de gegeven beperkingen voldaan is, bijvoorbeeld dat elke pro-grammeur tot slechts een team behoort;

• insertion: het is onmogelijk een nieuwe specialisatie toe te voegen zonder dat er een pro-grammeur bestaat die deze specialisatie bezit, (bijvoorbeeld de specialisatie “projectbeheer”met kode 07);

88

Page 92: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

• deletion: onderstel dat Jansen verwijderd wordt. Als gevolg daarvan verdwijnen alle gegevensvan de specialisatie 05 en 06.

De oorspronkelijke entiteit bevat in feite gegevens over de programmeurs. spec.kode, spec.naam,spec.graad vormt de repeating group t.o.v. de attributen i.v.m. programmeur.

EERSTE NORMALISATIESTAP: VERWIJDER DE ZICH HERHALENDE DEELVERZAMELINGEN

(REPEATING GROUPS) IN EEN NIEUWE ENTITEIT.

Daartoe introduceren we een tweede entiteit progr.spec. In de oorspronkelijke entiteit programmeurzijn de repeating groups verwijderd. De twee nieuwe entiteiten worden in tabel 7 voorgesteld.Hierin vormen de dubbel onderlijnde attributen de primaire sleutel voor deze entiteiten.

entiteit PROGRAMMEURPROGR. PROGR. TEAM TEAM TEAMNR. NAAM IDENT. LOKAL. NAAM

1099 JANSEN 15 B116 BSP2734 JACOBS 23 K32 STIV4372 DE WIT 22 K32 ADOC7299 DAANS 15 B116 BSP

entiteit PROGR.SPEC.PROGR. SPEC. SPEC. SPEC.NR. KODE NAAM GRAAD

1099 05 ONTWERP A+1099 06 ANALYSE A2734 03 TEST B+2734 04 KONTROL A4372 03 TEST A4372 02 IMPLEM. A+4372 04 KONTROL C7299 02 IMPLEM B+

Tabel 7: Eerste normaalvorm

We moeten de occurrences van de entiteit progr.spec. uniek kunnen identificeren. Het verwijde-ren van de zich herhalende deelverzamelingen resulteert dus steeds in een samengestelde sleutel(compound key) voor de nieuwe entiteit, namelijk prog.nr en spec.kode.

9.2 Tweede normaalvorm.

Bekijken we de entiteit progr.spec., dan zien we o.a. volgende anomalieen opduiken:

• redundantie, bijvoorbeeld spec.kode 03 met naam TEST;

• verwijderen van een programmeur, doet de specialisatie gegevens verdwijnen, indien hij deenige was in de beschouwde specialiteit, bijvoorbeeld bij het verwijderen van 1099 verdwijnende specialisaties 05 en 06.

De oorzaak van deze anomalieen is het feit dat niet alle secundaire attributen functioneel afhan-kelijk zijn van de volledige samengestelde primaire sleutel.Definieren we het begrip functionele afhankelijkheid:

beschouw: de attributen X en Y van de entiteit E.

Y is functioneel afhankelijk van X

89

Page 93: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

(of X identificeert Y) in E als, op elk ogenblik,

met iedere waarde van X niet meer dan een waarde

van Y in verband staat onder E.

In het voorbeeld is het attribuut spec.naam in de entiteit progr.spec. niet functioneel afhankelijkvan de volledige compound key, doch alleen van het key-attribuut spec.kode.

TWEEDE NORMALISATIESTAP: VERWIJDER DE ATTRIBUTEN DIE SLECHTS

FUNCTIONEEL AFHANKELIJK ZIJN VAN EEN GEDEELTE

VAN DE PRIMAIRE SLEUTEL IN EEN NIEUWE ENTITEIT.

We splitsen de entiteit progr.spec. dan ook op in twee entiteiten. Zie tabel 8. De entiteit program-meur staat reeds in de 2NV (bevat namelijk geen samengestelde sleutel).

entiteit PROGR.SPEC.PROGR. SPEC. SPEC.NR. KODE GRAAD

1099 05 A+1099 06 A2734 03 B+2734 04 A4372 03 A4372 02 A+4372 04 C7299 02 B+

entiteit SPEC.SPEC. SPEC.KODE NAAM

02 IMPLEM.03 TEST04 KONTROL05 ONTWERP06 ANALYSE

Tabel 8: Tweede normaalvorm

9.3 Derde normaalvorm.

Bekijken we de entiteit programmeur (tabel 7) van nabij, zien we de volgende anomalieen:

• insertion: een nieuw team kan niet geıntroduceerd worden tenzij er ten minste een program-meur lid is;

• deletion: indien een programmeur van team verandert of verwijderd wordt, gaan de gegevensvan het team verloren, indien hij het enige teamlid was, wanneer bijvoorbeeld De Wit naarteam 15 verhuist, dan verdwijnt de informatie over team 22;

• de beperking dat elk team slechts een lokatie heeft, is niet gegarandeerd;

• updaten van de team lokatie of het team nummer geeft aanleiding tot redundant zoekwerk,als bijvoorbeeld team 15 van lokaal verandert dan moet op twee plaatsen de waarde B116aangepast worden.

De oorzaak is de transitieve afhankelijkheid.

Stel : X, Y en Z zijn attributen van de entiteit E:

Y is funktioneel afhankelijk van X

Z is funktioneel afhankelijk van Y

dan is: Z is transitief afhankelijk van X.

DERDE NORMALISATIESTAP: VERWIJDER DE ATTRIBUTEN, WELKE VOLLEDIG

FUNCTIONEEL AFHANKELIJK ZIJN VAN EEN ANDER ATTRIBUUT IN DE

ENTITEIT (DAT GEEN PRIMAIRE SLEUTEL IS), NAAR EEN NIEUWE ENTITEIT.

90

Page 94: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

entiteit PROGRAMMEURPROGR. PROGR. TEAMNR. NAAM IDENT.

1099 JANSEN 152734 JACOBS 234372 DE WIT 227299 DAANS 15

entiteit TEAMTEAM TEAM TEAMIDENT. LOKAL. NAAM

15 B116 BSP23 K32 STIV22 K32 ADOC

Tabel 9: Derde normaalvorm

In de entiteit programmeur zijn de attributen team lokal. en team naam funktioneel afhankelijkvan het attribuut team ident., wat op zijn beurt afhankelijk is van de primaire sleutel progr.nr..De entiteit programmeur wordt in twee entiteiten opgesplitst. Zie tabel 9.Nieuwe teams kunnen nu zonder probleem aan de tweede tabel van tabel 9 toegevoegd wordenzonder dat hiervoor een programmeur reeds lid moet zijn.

9.4 Normalisatie: een eindpunt?

Normalisatie is een stap-voor-stap omkeerbaar proces van vervanging van een gegeven verzamelingvan relaties (entiteiten) door opeenvolgende verzamelingen, waarin de relaties steeds een meereenvoudige en meer effektieve struktuur hebben. Deze vereenvoudiging gaat echter gepaard meteen verhoging van de processing complexity. Verschillende file accessen kunnen nodig zijn, daarwaar in de niet-genormaliseerde struktuur een access volstond.Het inbouwen van een zekere redundantie kan, i.v.m. performantie en eisen betreffende respons-tijden noodzakelijk zijn. Maar dan spreken we niet meer over de logische struktuur, maar over deopslagstruktuur. De logische struktuur kan, door eisen betreffende de toegang tot gegevens, nietzomaar overgenomen worden in de opslagstruktuur. Dit heeft te maken met de verschillende doel-stellingen: normalisatie leidt tot een eenvoudig logisch model, niet noodzakelijk tot een efficientmodel.De volgende stap is er dan ook op gericht een compromis te vinden tussen de file complexity (in-gebouwde redundantie) en processing complexity. Het gevonden compromis is bepalend voor hetprestatievermogen van de database, bijvoorbeeld de snelheid waarmee informatie kan teruggevon-den worden.

9.5 Een tweede voorbeeld op normalisatie.

Een bestelformulier voor boeken (figuur 33) bevat volgende elementen:

• een opdrachtnummer

• een klantnummer, de naam en de woonplaats van de klant

• per besteld boek wordt aangegeven: het ISBN, de titel, de prijs/eenheid en het aantal besteld

• de datum en de totaalprijs.

Om tot de eerste normaalvorm te komen, moet de repeating group (de verschillende bestelde

boeken) in een tweede entiteit geplaatst worden:

ORDER opdrachtnr, klantnr, klantnaam, woonplaats, datum, totaalprijsREGEL opdrachtnr, ISBN, titel, prijs/eenheid, aantal

Bij het opstellen van de tweede normaalvorm merkt men op dat in de entiteit REGEL titel en

prijs/eenheid functioneel afhankelijk zijn van slechts een gedeelte van de sleutel. Deze entiteit

wordt dus gesplitst in twee entiteiten:

91

Page 95: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Totaal bedrag: 120 euro

2. Productions and Operations Management 0-13-725268-4 1 40

1. Bestandsorganisatie 90-6233-075-4 5 16

Bestellingen:

datum: 31/05/2003

opdrachtnr: 23 klantnr: 1063

naam: Appeltans

woonplaats: Diest

Figuur 33: Bestelformulier

REGEL opdrachtnr, ISBN, aantalBOEK ISBN, titel, prijs/eenheid

Bij de derde normaalvorm moet de entiteit ORDER nog gesplitst worden omdat klantnaam en

woonplaats functioneel afhankelijk zijn van klantnr, dat op zijn beurt functioneel afhankelijk is

van de sleutel opdrachtnr:

ORDER opdrachtnr, klantnr, datum, totaalprijsKLANT klantnr, klantnaam, woonplaats

9.6 Oefening.

Op een rapport staan volgende gegevens vermeld:

• datum van de deliberatie; klas, opleiding, minor;

• naam en voornaam van de student;

• per vak: naam, gewichtsfaktor, behaalde punten op 20;

• behaalde procent en graad.

Breng deze gegevens in 3NV.

92

Page 96: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

10 Information retrieval: aanvullingen

10.1 Indexeren van tekst

Verschillende soorten: CONTEXT en CTXCAT tekstindices.

create index boek content on boek(tekst)indextype is ctxsys.context;

create index boek ctxcat on boek(tekst)indextype is ctxsys.ctxcat;

Voordeel: synchronisatie van de gegevens in de basistabel en in de tekstindexen

Op basis van zo’n tekstindex: mogelijkheden van tekst zoeken sterk uitgebreid:sleutelwoord contains (context index) en catsearch (ctxcat index) in de where van een selectDaarnaast: CTXRULE: bouwen van een inhoudgebaseerde document classificatie toepassing

Bij een content index worden vier tabellen gecreeerd:

select table name from user tables;

TABLE_NAME

-----------------

DR$BOEK_CONTENT$K

DR$BOEK_CONTENT$N

DR$BOEK_CONTENT$R

DR$BOEK_CONTENT$I

De K tabel bevat twee attributen: een DOCID en een TEXTKEY (een ROWID). Voor elke rij inboek is er een rij in deze K tabel.De N tabel (met attributen NLT DOCID en NLT MARK) bevat geen rijen.De R tabel (met attributen ROW NO en DATA) bevat 22 rijen.De I tabel bevat verschillende attributen:

Name Null? Type

----------------------------------------- -------- ----------------------------

TOKEN_TEXT NOT NULL VARCHAR2(64)

TOKEN_TYPE NOT NULL NUMBER(3)

TOKEN_FIRST NOT NULL NUMBER(10)

TOKEN_LAST NOT NULL NUMBER(10)

TOKEN_COUNT NOT NULL NUMBER(10)

TOKEN_INFO BLOB

Deze tabel bevat 60 rijen.Na aanpassingen in de basistabel, moet een content index hersynchroniseerd worden:

begin ctx ddl .sync index(’boek content’); end;

Toepassing: index set . Vroeger: problemen bij een gecombineerde where met non-tekst entekst elementen in de voorwaarde:

select titel , score(5) from boekwhere auteur = ’mie groen’

and contains(tekst, ’appelen’, 5) > 0;

Oplossing: gebruikmaken van index set: de indexen in deze verzameling kunnen gemaakt zijn opde gestructureerde relationele kolommen en op de tekstkolommen.Om zo’n index set te creeren, wordt gebruik gemaakt van de CTX_DDL package.

execute CTX DDL.CREATE INDEX SET(’boeken’);execute CTX DDL.ADD INDEX(’boeken’, ’auteur’);execute CTX DDL.ADD INDEX(’boeken’, ’datum’);

93

Page 97: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Na het toevoegen van de non-tekst indexen kan een ctxcat index gecreeerd worden:

create index boek ctxcat on boek(tekst)indextype is ctxsys.ctxcatparameters (’index set boeken’ );

De resultaten van de text search kunnen nu geordend worden op basis van de datum:

select titel , score(5) from boekwhere catsearch(tekst, ’appelen’, ’auteur = ’’mie groen’’

order by datum desc) > 0;

10.2 Tonen van de tekst

Hiervoor kunnen PL/SQL procedures uit o.a. ctx doc package gebruikt worden.

1 declare a clob;2 totaal integer;3 i integer := 1;4 n number := 80;5 l varchar2(80);6 begin7 ctx doc. filter (’boek content’,1,a,FALSE);8 totaal := dbms lob.getlength(a);9 while ( i < totaal ) loop

10 dbms lob.read(a,n,i , l );11 dbms output.put(l);12 i := i+n;13 end loop;14 dbms output.new line;15 dbms lob.freetemporary(a);16 end;

Om bovenstaande procedure te parametriseren kan gebruikt gemaakt worden van een bind varia-bele:

var tnr numberexec :tnr := 2

De eerste lijn wordt dan ctx doc. filter (’boek content’, :tnr, a,FALSE);

10.3 Parameters bij een context index

Stopwoorden. Creatie van een stopwoorden lijst:

beginctx ddl . create stoplist (’ stopvz’, ’BASIC STOPLIST’);ctx ddl .add stopword(’stopvz’, ’het ’);ctx ddl .add stopword(’stopvz’, ’de ’);ctx ddl .add stopword(’stopvz’, ’een ’);ctx ddl .add stopword(’stopvz’, ’om’);ctx ddl .add stopword(’stopvz’, ’ te ’);ctx ddl .add stopword(’stopvz’, ’via ’);ctx ddl .add stopword(’stopvz’, ’voor ’);ctx ddl .add stopword(’stopvz’, ’met’);ctx ddl .add stopword(’stopvz’, ’ bij ’);ctx ddl .add stopword(’stopvz’, ’en ’);ctx ddl .add stopword(’stopvz’, ’ er ’);

94

Page 98: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

ctx ddl .add stopword(’stopvz’, ’zo ’);ctx ddl .add stopword(’stopvz’, ’ niet ’);ctx ddl .add stopword(’stopvz’, ’wat’);ctx ddl .add stopword(’stopvz’, ’ook’);

end;

Gebruik van de stopwoorden lijst bij het maken van de index:

create index boek content on boek(tekst)indextype is ctxsys.contextparameters (’STOPLIST stopvz’);

In de I tabel zijn de stopwoorden niet meer opgenomen; er zijn nog slechts 47 rijen.Verwijderen van een stopwoorden lijst:

begin ctx ddl . drop stoplist (’ stopvz ’); end;

Stamwoorden. Aangeven dat stammen op basis van de nederlandse taal gemaakt worden:

beginctx ddl . create preference (’vlaams’,’BASIC LEXER’);ctx ddl . set attribute (’vlaams’,’ index stems ’,’DUTCH’);

end;

Index met stamwoorden:

create index boek content on boek(tekst)indextype is ctxsys.contextparameters (’LEXER vlaams STOPLIST stopvz’);

De I tabel bevat 78 rijen; naast tomaten is ook het woord tomaat opgenomen.Verwijderen van een lexer preferentie lijst:

begin ctx ddl .drop preference(’vlaams’); end;

Om bij het zoeken stamwoorden en fuzzy matching te activeren, moet de wordlist preferentiegebruikt worden. Het enige type dat beschikbaar is, is BASIC WORDLIST.Belangrijkste attributen zijn:

• stemming: welke taal voor stemming gebruikt moet worden, bijv. DUTCH;

• fuzzy match: welke fuzzy matching cluster gebruikt moet worden, bijv. DUTCH;

beginctx ddl . create preference (’ stamvlaams’, ’BASIC WORDLIST’);ctx ddl . set attribute (’ stamvlaams’,’FUZZY MATCH’,’DUTCH’);ctx ddl . set attribute (’ stamvlaams’,’STEMMER’,’DUTCH’);

end;

Bij de creatie van de index:

create index boek content on boek(tekst)indextype is ctxsys.contextparameters (’Wordlist stamvlaams’);

select titel , score(1) from boekwhere contains(tekst,’fuzzy(beren, 50, 5, weight )’,1) > 0

Vroegere syntax: contains(tekst , ’?beren’, 1)fuzzy heeft vier parameters:

95

Page 99: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

term : het woord (minstens 3 letters) waarop de fuzzy expansie uitgevoerd wordt; deze expansiebevat enkel woorden die in de index gevonden worden;

score : geexpandeerde termen met een similariteitscore lager dan deze waarde worden nietbeschouwd (tussen 1 en 80, default is 80);

numresults : maximum aantal termen dat in de expansie van de gegeven term kan beschouwdworden (tussen 1 en 5000, default is 100);

weight : resultaten worden gewogen volgens de similariteitscores (alternatieve waarde is no-weight).

Resultaat: fruit eten 43

groenten 13

Wanneer een minimum score van 70 gevraagd wordt, wordt alleen het eerste document gevondenmet een score van 39.Wanneer de databank teksten in verschillende talen bevat, kunnen de stammen op basis van eenautomatisch gedetecteerde taal gemaakt worden:

beginctx ddl . create preference (’vlaams’,’AUTO LEXER’);ctx ddl . set attribute (’vlaams’,’ index stems ’,’YES’);end;

Index met stamwoorden:

create index boek content on boek(tekst)indextype is ctxsys.contextparameters (’LEXER vlaams STOPLIST stopvz’);

De I tabel bevat 115 rijen.

10.3.1 Locatie van de tekst.

Bij een context index zijn er drie mogelijke locaties. Het type wordt bij de creatie van de indexaangegeven met de DATASTORE parameter:

create index boek content on boek(docs)indextype is ctxsys.contextparameters (’DATASTORE CTXSYS.DEFAULT DATASTORE’);

• DIRECT DATASTORE (of DEFAULT DATASTORE): de tekst wordt volledig in de ta-bel opgenomen; mogelijke types voor de tekstkolom zijn VARCHAR2, CLOB, BLOB,CHAR, of BFILE; elke rij komt overeen met een document.

• FILE DATASTORE: de tekst wordt extern in een bestand van het besturingssysteem be-waard; de bestandsnaam wordt in de tabel opgenomen.

• URL DATASTORE: de tekst wordt extern in bestanden opgeslagen, die op het intranet ofhet internet gelokaliseerd zijn; de bijhorende URL wordt in de tabel opgenomen.

Bij een CTXCAT of CTXRULE index, is alleen de eerste techniek (volledig in de tabel) mogelijk.

Tekst in externe bestanden. Creatie van de tekst tabel en bijhorende index:

create table txtpdf(

pnr integer,titel varchar2(40),

96

Page 100: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

filenaam varchar2(40),constraint pdf pk primary key (pnr)

);insert into txtpdf values (10,’oText’,’/home/hcr/t/4sp/les.pdf’);insert into txtpdf values (20,’ infret ’,’/ home/hcr/t/4cc/les.pdf’);create index pdf ctx on txtpdf(filenaam)

indextype is ctxsys.contextparameters(’datastore ctxsys. file datastore ’);

Zoeken naar het woord vlaams:

select titel , score(1) from txtpdfwhere contains(filenaam,’vlaams’,1) > 0

In plaats van de volledige padnaam in de tabel op te nemen, kan een PATH attribuut bij depreferentie gedefinieerd worden:

beginctx ddl . create preference (’padpl ’,’ FILE DATASTORE’);ctx ddl . set attribute (’padpl ’,’ PATH’,’/home/hcr/t/4sp:/home/hcr/t/4cc’);

end;

Tekst in webpagina’s. Creatie van de tekst tabel en bijhorende index:

create table txtweb(

wnr integer,titel varchar2(20),urlnaam varchar2(80),constraint web pk primary key (wnr)

);insert into txtweb values (17, ’db nv’,

’http://spline/˜hcr/db/nv.html’);insert into txtweb values (27, ’db nvvb’,

’ file :/home/hcr/public html/db/nvboek.html’);

create index web ctx on txtweb(urlnaam)indextype is ctxsys.contextparameters(’datastore ctxsys. url datastore

filter ctxsys. null filtersection group htmgroep’);

Filteren van de tekst. Heel wat documenten: beschikbaar in geformatteerde vorm (bijv. PDF,MS-Word, ...). Om zo’n documenten te indiceren moeten ze gefilterd worden naar tekst. Hiervooris default de ctxsys. auto filter beschikbaar: deze filter detecteert automatisch het formaat vanhet document en doet de omzetting naar tekst.Voor pure tekst of HTML-pagina’s is zo’n filtering niet nodig. Hiervoor kan bij de creatie van deindex de NULL FILTER gespecificeerd worden:

create index urlindex on webpag(htmlfile)indextype is ctxsys.contextparameters(’ filter ctxsys. null filter

section group ctxsys.html section group’);

Daarnaast zijn door gebruik te maken van de interne structuur van HTML document sectiesgedefinieerd en geındiceerd. Dit laat toe om het bereik van een query te verengen, bijv. zoekennaar documenten die een bepaalde term in een specifieke sectie hebben (bijv. in TITLE).

97

Page 101: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Er zijn systeemgedefinieerde sectie definities voor HTML en XML. Het is ook mogelijk om zelfsectie definities te definieren.

beginctx ddl . create section group (’htmgroep’, ’HTML SECTION GROUP’);ctx ddl . add field section (’htmgroep’, ’ titel ’, ’TITLE’);ctx ddl .add zone section(’htmgroep’, ’hoofding’, ’H1’);ctx ddl .add zone section(’htmgroep’, ’hoofding’, ’H2’);ctx ddl .add zone section(’htmgroep’, ’hoofding’, ’H3’);ctx ddl .add zone section(’htmgroep’, ’tekst ’, ’P’);

end;

begin ctx ddl .drop section group(’htmgroep’); end;

Zone sectie dat alle CONTENT attributen voor de META tag met NAME waarde gelijk aan authorindiceert:

beginctx ddl .add zone section(’htmgroep’, ’auteur’, ’meta@author’);

end

Mogelijke zoekvraag: contains(urlnaam, ’hcr within auteur’,1)

Zone section. Extract uit het nv.html document:

<meta name="author" content="hcr" />

<h1 class="blauw"> Tweede normaalvorm</h1>

<h3 class="rood">Problemen:</h3>

Zoeken naar een woord dat in een hoofding staat:

select titel , score(1) from txtwebwhere contains(urlnaam,’normaalvorm within hoofding’, 1) > 0

Er kunnen meerdere zone sections in een document voorkomen en deze worden als aparte onder-delen beschouwd. Als gevolg hiervan heeft volgende vraag geen resultaat:

select titel , score(1) from txtwebwhere contains(urlnaam,’(normaalvorm and problemen) within hoofding’, 1) > 0

Bij een gelijkaardige vraag zonder de within operator worden wel documenten gevonden.

Field section. Bij het zoeken naar het woord normalisatie:

select titel , score(1) from txtwebwhere contains(urlnaam,’normalisatie’,1) > 0

is er geen resultaat, alhoewel het woord in de titel van beide webpagina’s voorkomt.De reden hiervoor is dat TITLE als een field section toegevoegd is aan de htmgroep. Zo’n fieldsection wordt als een sub-document geındiceerd, apart van de rest van het document.Op die manier is een beperkende zoekvraag mogelijk:

select titel , score(1) from txtwebwhere contains(urlnaam,’normalisatie within titel ’,1) > 0

Wanneer de tekst in zo’n field section toch als onderdeel van het omvattende document moetgeındiceerd worden, moet een vierde parameter met waarde TRUE toegevoegd worden:

ctx ddl . add field section (’htmgroep’, ’ titel ’, ’TITLE’, TRUE);

98

Page 102: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

10.4 Thesaurus

• een gereedschap voor vocabulaire controle

• bevat allerlei soorten informatie om indexers en zoekers te leiden naar gebruik van juistetermen zodat de kwaliteit van opvragen verbetert

• aangeven van voorkeurtermen: welke termen indexers en zoekers mogen gebruikenop die manier wordt het vocabularium beperkt zodat het gemakkelijker te voorspellen iswelke woorden gebruikt zijn om een concept te indiceren

• aangeven van non-voorkeurtermen: woorden welke beter niet gebruikt wordenhet is mogelijk een non-voorkeurterm op te zoeken en dan de voorkeurterm te krijgen welkein de plaats kan gebruikt wordenbij het opzoeken van een voorkeurterm in de thesaurus krijgt men ook de non-voorkeurtermente zien: dit geeft een duidelijker idee omtrent de betekenis van een term

• semantische relaties: het met elkaar linken van verschillende voorkeurtermen: dit maakt debetekenis van een term duidelijker en kan de gebruiker helpen bij het kiezen van de juisteterm

• bereik notitie is een definitie van een term en kan de gebruiker ook helpen bij het kiezenvan de juiste term

Twee types

{

enumeratief: opsomming van alle voorkeurtermensynthetisch: met regels om voorkeurtermen te construeren uit componenten

10.4.1 Constructie: verzamelen van termen

Bronnen:

• bestaande lijsten van termen: andere thesauri, indexen, woordenlijsten, ...

• teksten waaruit termen kunnen gehaald worden: titels, abstracts, volledige teksten metgeındiceerde elementen

• mensen: domeinspecialisten

Welke type termen:

• algemeen genoeg zodat het als index kan gebruikt worden voor een aantal documentenbijv. eigennamen worden best niet opgenomen in een thesaurus

• maar ook niet te algemeen, zodat het een index zou zijn in het overgrote deel van dedocumenten binnen het onderwerp van de thesaurusbijv. nieuws in een thesaurus om nieuwsitems te indiceren

• zelfstandige naamwoorden in volgende vormmeervoud bij telbare dingen emmersenkelvoud bij massa woorden houtenkelvoud voor processen, eigen-schappen, voorwaarden

koeling, gewicht, armoede

geen omkeringen radar antenne (ipv. antenne, radar)met weglaten van voorzetsels hogeschool wetenschap kunstmet weglaten van leestekens, diacriti-calen, speciale tekens en afkortingen

cooperatieve programmas

Termen met meer dan een betekenis:een homograaf is een uitdrukking met dezelfde spelling maar met een andere betekenis;een thesaurus maakt onderscheid tussen homografen door bijvoorbeeld een qualifier tussen haakjestoe te voegen port (wine)(omwille van bovenstaande suggestie kunnen de haakjes ook weggelaten worden)

Introduceren van nieuwe termen:

99

Page 103: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

1. brede concepttermen, bruikbaar bij brede zoekopdrachten

2. structurele termen: helpen de structuur van semantische relaties te verduidelijken

3. termen uit non-tekstueel materiaal, bijv. uit een foto of een prent

10.4.2 Voorkeurtermen en non-voorkeurtermen

Na het verzamelen van de woordenlijst moeten de equivalente termen bepaald worden: voorindexeren en zoeken worden equivalente termen beschouwd dezelfde betekenis te hebben en kunnenze weergegeven worden door een voorkeurterm.Equivalent omwille van:

• spelling: burokratie of bureaucratie

• synoniemen: automatisatie of mechanisatie

• quasi-synoniemen: in het reele leven duiden ze verschillende dingen aan, maar voor indexe-ren en zoeken is het beter ze te groeperen:∗ termen met overlappende betekenissen: school en hogeschool∗ term waarvan het bereik in dat van een andere term vervat is: ijzer en metaal∗ tegengestelden, wanneer de ene term waarschijnlijk relevant is bij een zoekopdracht voor

de tegengestelde term: transparant en ondoorzichtig

USE non-voorkeurterm verbinden met voorkeurtermUF (used for) omgekeerde relatie

Bijv. met de voorkeurterm school:hogeschool schoolUSE school UF hogeschool

Voorkeurtermen worden gekozen op basis van dagdagelijks gebruik, breedte, minder dubbelzinnig-heid, beknoptheid, meervoudsvorm (voor telbare dingen), consistensie, ...Het is soms aangewezen om in plaats van een non-voorkeurterm meerdere voorkeurtermen samente gebruiken. Bij de USE worden de verschillende voorkeurtermen vermeld en de UF referentiewordt gewoonlijk speciaal gemarkeerd:

sneeuwmobielen sneeuw voertuigenUSE voertuigen+sneeuw UF+ sneeuwmobielen UF+ sneeuwmobielen

10.4.3 Semantische relaties

Meestal aanduiding van een hierarchische relatie tussen voorkeurtermenbroader term (BT) en narrower term (NT):

1. soort: alle elementen van de klasse aangeduid door B zitten ook in de klasse aangeduiddoor A : A is BT en B dus NTbijv. beesten is een bredere term voor kattenmaar huisdieren is geen bredere term voor katten

2. klasse/lid: de NT benoemt een klassse met slechts een lidbijv. hogescholen is een bredere term voor hogeschool voor wetenschap & kunst

3. hierarchisch geheel/onderdeel: alles wat in B (NT) zit is onderdeel van iets dat in A (BT)zitbijv. hoofd is een bredere term voor neus (in een medische thesaurus)maar bossen is geen bredere term voor bomen

4. geografisch geheel/onderdeelbijv. Europa is een bredere term voor Zwitserlandmaar Zwitserland is geen bredere term voor meer van Geneve

BT en NT referenties

100

Page 104: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

1. BT en NT zijn gewoonlijk inverse relaties

AlspennenBT schrijfmaterialen

danschrijfmaterialenNT pennen

2. polyhierarchisch: een term kan meer dan een onmiddellijk bovenliggende bredere termhebben

sociale psychologieBT psycholgieBT sociologie

daarmee worden ook discussies vermeden om-trent welk nu de beste bredere term is

3. niet elke hierarchische relatie moet expliciet in de thesaurus opgenomen wordenals X een bredere term is voor Y en Y een bredere term voor Z, dan hoeven er geen BT/NTreferenties tussen X en Z opgenomen te worden

plantenNT fruit

enfruitNT vers fruit

maar nietplantenNT vers fruit

Gerelateerde termen RT: wordt gebruikt voor een niet-hierarchische relatie in de thesauruszo’n RT relatie wordt best opgenomen wanneer een indexer of een zoeker die het gebruik van termX overweegt, ook best er aan herinnerd wordt dat de term Y ook bestaat

eigen inversepennenRT calligrafie

calligrafieRT pennen

Bepalen van gerelateerde relaties: in functie van een aantal categorien:tijd vrijetijdslectuur plaats vreemde talen

RT vrijetijd RT taallabosproduct scheepsbouw oorzaak vandalisme

RT schip RT vijandigheidtoepassing computers apparaat schilderen

RT tekstverwerking RT borstelsonderdeel voertuigen complement ouders

RT wielen RT kinderen

10.4.4 Bereik notities

Scope notes zijn de meest gebruikte manier voor het aansturen om termen in een thesaurus tegebruiken:

1. geven van een definitie

pleinvrees

SN neiging om in problemen te geraken door een ruimtelijke positie

2. aangeven welke concepten ingesloten en welke uitgesloten zijn

gemechaniseerd informatie opvragen

SN omvat pre-computer methodes zoals ponskaart systemen

beren

SN met uitsluiting van panda’s

partij

SN alleen voor politieke partijen, niet voor sociale samenkomsten

3. verwijzing naar andere termen

4. opnemen van bijkomende instructies voor de indexers

hospitalisatie

SN wijs ook termen toe voor de voorwaarden waarin patienten

gehospitaliseerd worden

gereedschap

SN brede term, geef de voorkeur aan specifieke types van gereedschap

101

Page 105: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

5. instructie voor synthese

geschiedenis

SN voegtoe als een onderdeel na termen die disciplines, activiteiten,

levende wezens, ... aanduiden bijv. geiten-geschiedenis

Bereik notities moeten relevant zijn zowel voor de indexer als de vrager. De inhoud ervan moet ietstoevoegen aan wat de term op zich al zegt. Een bereik notitie moet welgevormd zijn, bijvoorbeeldzonder spellingfouten en syntactisch correct geformuleerd.

10.4.5 Thesaurus in Oracle Text

Een thesausus kan gecreeerd en ingevuld worden met het ctx thes package:

beginctx thes .create thesaurus (’default’,FALSE);ctx thes . create relation (’default ’,’eten ’,’ syn ’,’ voedsel ’);ctx thes . create relation (’default ’,’voedsel ’,’ nt ’,’ fruit ’);ctx thes . create relation (’default ’,’appelen ’,’ bt ’,’ fruit ’);

end;

Verwijderen kan met hetzelfde package:

exec ctx thes .drop thesaurus(’default’);

In plaats van de naam default kan een andere naam gekozen worden, maar dan moet bij hetgebruik van deze thesaurus telkens deze naam vermeld worden. De FALSE parameter geeft aande toegevoegde elementen hoofdletterongevoelig zijn.Een andere manier om een thesaurus te creeren is met behulp van ctxload:

ctxload -user xxx/xxx -thes -name default -file ischat.txt

In plaats van -thes kan ook -thesdump gebruikt worden: De ingeladen thesaurus wordt dangeexporteerd naar het bestand gespecificeerd bij de -file optie.Het import bestand beschrijft de structuur van de thesaurus en bevat een reeks entries van devolgende vorm:

term

SYN synoniem

NT engere term

BT bredere term

RT gerelateerde term

USE geprefereerde term

SN tekst

Bij elke term kunnen meerdere lijnen met SYN, NT, BT en RT voorkomen. Er kan slechts een USEaangegeven worden (in plaats hiervan kan ook PT of SEE gebruikt worden). De lengte van zo’n term(een of meerdere woorden) is maximaal 255 letters (geen speciale tekens). Samengestelde termen(met een + teken) kunnen alleen als synoniem of als geprefereerde term aangegeven worden. BijSN kan de tekst maximaal 2000 tekens lang zijn; bij meerdere lijnen moet elke lijn beginnen metSN.Een hierarchie (NT/BT relaties) kan ook op een geındenteerde manier voorgesteld worden:

term

NT1 engere term

NT2 engere term

NT3 engere term

NT2 engere term

102

Page 106: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Gebruik van een thesaurus met behulp van de ctx_thes package:

declare termen varchar2(200);begin

termen := ctx thes.bt(’bananen’,3);dbms output.put line(’ bredere termen voor bananen: ’ || termen );

end;

De bt functie heeft drie argumenten: de term die opgezocht wordt, het aantal niveaus en de naamvan de thesaurus (indien deze naam default is, kan deze weggelaten worden).Er zijn gelijkaardige functies voor nt, pt, rt, sn, syn en tt (top term).Als query operator in CONTAINS:

select titel , score(1) from boekwhere contains(tekst, ’bt(bananen)’, 1) > 0

Als tweede argument kan het aantal niveaus dat moet bekeken worden, aangegeven worden. Alsderde argument kan de naam van de te raadplegen thesaurus gegeven worden (in dat geval moethet aantal te doorzoeken niveaus gegeven worden).

10.5 Classificeren van documenten

Probleem: iedereen wordt overladen met informatie. Het is dus belangrijk om documenten op tedelen in klassen: die met bruikbare en die met niet-bruikbare informatie.

• sleutelwoord zoekmachines, maar beperkingen, bijv. geen onderscheid op basis van con-text: in veel talen hebben woorden en zinsneden meerdere betekenissen, een zoekvraag kanresulteren in een aantal documenten die niet gerelateerd zijn aan het gewenste topic.

• document classificatie op basis van inhoud; maar niet realiseerbaar door mensen voor grotevolumes.

• regel-gebaseerde classificatie: de ontwerper schrijft enkele regels uit waarmee de classificatiezal gebeuren;

• superviseerde classificatie: classificatie regels worden gegenereerd op basis van een verza-meling vooraf geclasseerde documenten;

• niet-superviseerde classificatie: clustering op basis van de inhoud.

10.5.1 Regel-gebaseerde classificatie

De gebruiker verzamelt de documenten, beslist welke catergorien er zijn en formuleert regels omdeze categorien te definieren.∗ voordeel: nauwkeurig voor klein documentverzamelingen∗ nadeel: moeizaam om juiste regels te definieren voor grote documentverzamelingen

1. creeer een tabel voor de documenten, en voeg deze documenten toe;

2. creeer een regeltabel, met categorienaam en regels;

3. creeer een CTXRULE index op de regeltabel;

4. classificeer de documenten met het MATCHES statement.

Voorbeeld. Creatie van de tabellen:

create table cursus( cnr integer primary key,

titel varchar2(40),datum date,filenaam varchar2(40),inhoud clob );

103

Page 107: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

create table klassen( vnr integer primary key,

klasse varchar2(40),vraag varchar2(400) );

create table curs klas(

vnr integer,klas id integer

);

Inladen van de documenten met SQLLDR:

load datainfile ∗into table cursusfields terminated by ’\t’(

cnr position(1) integer external,titel char,datum date ”DD/MM/YYYY”,filenaam char,inhoud lobfile (filenaam) terminated by eof

)begindata1 databanken 20/09/08 /home/hcr/t/3db/sli/infdb.pdf2 Java 30/08/08 /home/hcr/t/3oo/sli/infoo.pdf3 webjee 20/11/08 /home/hcr/t/jee/sli/infee.pdf

Definieren van de klassen:

insert into klassen values(1, ’besturingssystemen’, ’unix or windows or proces or bestand’);

insert into klassen values(2, ’databanken’, ’ sql or tabel or rij or zoekvraag’);

insert into klassen values(3, ’programmeertalen’, ’java or C or sql or fortran ’);

Creatie van de CTXRULE index:

create index curs kls idx on klassen(vraag)indextype is ctxsys. ctxrule ;

Voor het classificeren van de documenten wordt de CLASSIFIER.DOEN PL/SQL procedure ge-bruikt. Deze procedure doorloopt de cursus tabel, matcht elk document met een categorie enschrijft het resultaat in de curs_klas tabel:

1 create or replace package classifier as procedure doen; end;2 /3 show errors4 create or replace package body classifier as5 procedure doen is6 v document clob;7 v item number;8 v doc number;9 begin

10 for doc in (select cnr, inhoud from cursus)11 loop12 v document := doc.inhoud;13 v item := 0;14 v doc := doc.cnr;15 for c in (select vnr, klasse from klassen16 where matches(vraag, v document) > 0 )

104

Page 108: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

17 loop18 v item := v item + 1;19 insert into curs klas values (doc.cnr,c.vnr);20 end loop;21 end loop;22 end doen;23 end;24 /25 show errors26 exec classifier .doen

Merk op. Queries voor CTXRULE zijn gelijkaardig aan CONTAINS queries:operatoren: AND, NEAR, NOT, OR, STEM, WITHIN, en THESAURUS, ook zinsneden ("object gericht ontwerpen")zijn mogelijk.

10.5.2 Superviseerde classificatie

Gelijkaardig aan regel-gebaseerde classificatie, maar het definieren van de regels is geautomatiseerd.∗ voordeel: automatisch definieren van regels, erg bruikbaar bij grote documentverzamelingen∗ nadeel: op voorhand documenten aan klassen toewijzen zonder regels;∗ nadeel: regels misschien niet zo specifiek en nauwkeurig als degene die een ontwerper zelf

schrijft.Regels worden automatisch gegenereerd met behulp van de CTX CLS.TRAIN procedure waarbijgebruikt gemaakt wordt van een verzameling leerdocumenten om de classificatieregels af te leiden.

10.5.3 Clustering

Documenten groeperen en categorie regels schrijven is geautomatiseerd. Er gebeurt een statistischeanalyse van de documenten en op basis van de inhoud worden documenten gecorreleerd metclusters.∗ voordeel: je hoeft geen classificatie regels of voorgeclassificeerde documentenverzameling te

voorzien;∗ voordeel: patronen of gelijkaardigheden die je zelf niet voorzien had, kunnen ontdekt worden.∗ nadeel: onverwachte groeperingen omwille van het intern algoritme∗ nadeel: regels waarmee de clusters gecreeerd worden, zijn niet gekend;∗ clustering operatie is CPU-intensief.

Met behulp van de CTX CLS.CLUSTERING procedure: creeert een hierarchie van document-groepen (cluster) en berekent relevantie scores.

Voorbeeld. Creatie van een CONTENT index op de inhoud, zonder deze effectief in te laden.

create index curs clus on cursus(inhoud)indextype is ctxsys.context parameters(’nopopulate’);

Creatie van de resultaat tabellen (eventueel automatisch gegenereerd), attribuutnamen zijn voor-gedefinieerd:

create table clus res(

docid NUMBER,clusterid NUMBER,score NUMBER );

create table clusters(

clusterid NUMBER,descript varchar2(4000),label varchar2(200),sze number,quality score number,parent number );

Zetten van preferenties:

105

Page 109: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

exec ctx ddl .drop preference(’ c cluster ’);exec ctx ddl . create preference (’ c cluster ’,’ KMEAN CLUSTERING’);exec ctx ddl . set attribute (’ c cluster ’,’ CLUSTER NUM’,’2’);

Uitvoeren van clustering:

beginctx output. start log (’ cluster log ’);ctx cls . clustering (’ curs clus ’,’ cnr ’,’ clus res ’,’ clusters ’,’ c cluster ’);ctx output.end log;

end;

Resultaten:CLUSTERID SZE QUALITY_SCORE PARENT

--------- --- ------------- ------

1 0 ,387537 0

2 1 0 1

3 2 ,254536 1

DOCID CLUSTERID SCORE

---------- ---------- ----------

2 2 ,999999999

1 3 ,999999871

3 3 ,999999874

106

Page 110: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

A Oracle SQL*Plus

Basis werking. Starten met % sqlplus /

Na de prompt kunnen SQL statements ingetikt worden en ook SQL*Plus commands:

• EXIT of QUIT: stoppen.

• DESCribe <tabelnaam>: lijst van tabel met veldnamen en types.

• DESCribe <functienaam>: functie met returnwaarde en lijst van argumenten.

• GET <filenaam>: lees de query uit het genoemde bestand in de query buffer.

• EDit: editeer de actuele query buffer.

• RUN of /: stuur de actuele query buffer naar de backend, om uit te voeren.

• SAVe <filenaam>: schrijf de actuele query buffer weg naar het genoemde bestand.

• List: druk de inhoud van de query buffer af.

• @<filenaam> of STArt <filenaam>: lees en voer de queries uit het genoemde bestand uit.

• SHOW USER: toon de Oracle gebruikersnaam.

• SHOW ALL: toon de waarde van elke parameter in SQL*PLUS.

• SHOW ERRORS: toon de fouten na een ”compilation with errors”van een PL/SQL blok.

• HOST <unix_command> (of !<unix_command>): uitvoeren van unix command.

Datumfuncties:

SQL> select sysdate from dual;

SQL> select to_char(sysdate, ’MM’) from dual;

SQL> select to_char(sysdate, ’IW’) from dual;

SQL> select to_char(sysdate, ’YYYY’) from dual;

Data dictionary:

SQL> select table_name from user_tables;

SQL> select view_name from user_views;

SQL> select table_name,column_name,date_type from user_tab_columns;

SQL> select table_name,search_condition from user_constraints;

Importeren van gegevens: % sqlldr / control=meubel.ctl

Formaatspecificatie:

9 tonen van significante cijfers0 markeren van de plaats vanaf waar leidende nullen getoond wordenA<getal> voor characters, getal geeft de kolombreedte aanTO CHAR(datum, formaat) D dag van de week

DD dag van de maandDY afgekorte dagnaamIW week van het jaarMM maandnummerMON afgekorte maandnaamYYYY jaartalYY laatste twee cijfers van het jaartal

Merk op. Om het leven wat gemakkelijker te maken:

% sql en % ladendb iets.ctl

107

Page 111: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

B Oefening: databanken

B.1 Beschrijving van de gegevens

Voor het creeren van een uurrooster is informatie in verband met opleidingen, activiteiten, do-centen en lokalen nodig. Een opleiding wordt gekenmerkt door de afkorting (afk), de volledigenaam en de fase. Er zijn twee soorten opleidingen: basisopleidingen en minorgedeeltes. Zo’nminorgedeelte behoort steeds bij een basisopleiding. Bij elke opleiding wordt een schatting vanhet aantal studenten (astd) gegeven en het aantal groepen (agrp) dat moet voorzien worden. Bijeen basisopleiding wordt een programmacoordinator (bpc) aangegeven en of deze basisopleidingal of niet minoren bevat (bsoort).Binnen een opleiding worden activiteiten georganiseerd. Een activiteit kan in meerdere opleidingenopgenomen zijn. Per activiteit wordt de anaam en het aantal contacturen op semesterbasis (ascu)bijgehouden. Er zijn verschillende soorten activiteiten: hoorcolleges theorie met vermelding vande docent (tdafk), oefeningen en practica (oefpra) waarbij het aantal groepen (aant) wordt aan-gegeven dat een bepaalde docent toegewezen krijgt; voor practica is er nog bijkomende informatieomtrent het lokaal waarin het practicum georganiseerd wordt (plid) en het aantal begeleidendedocenten (padoc).Per lokaal wordt lnaam, lcapa (maximum aantal studenten) en het al of niet aanwezig zijn vaneen lbeamer bijgehouden.Activiteiten worden verzorgd door docenten. Per docent wordt dnaam, dgeslacht en geboorte-datum (dgbd) bijgehouden.Als extra informatie wordt per activiteit nog een bijkomende fiche voorzien met daarin de be-schrijving van de doelstellingen (fdoel), de inhoud (finh), de studiepunten (fstp) en de geschattestudielasturen (fslu).Tip. Geef aan elke entiteit ook een ID-attribuut: opleiding (bafk, mafk), activiteit (aid), docent(dafk), lokaal (lid), ...

Opgave. Maak een analyse van deze gegevens door middel van ER-modellering.

Tabellen. Creeer de verschillende tabellen met behulp van SQL-statements.Implementeer hierbij een aantal beperkingen.

• Bouw referentiele integriteiten (foreign keys) in waar mogelijk is.

• Het aantal contacturen op semesterbasis ligt tussen 9 en 36.

• Het aantal studiepunten is een geheel getal tussen 1 en 20.

• Het aantal studenten in een opleiding is ten hoogste 200.

• Het aantal groepen in een opleiding is ten hoogste 10.

• Geboortedatum van een docent moet na 1 januari 1950 liggen.

• De capaciteit van een lokaal ligt tussen 5 en 400.

• De studielasturen van een activiteit moet liggen in het interval 25 × studiepunten en 30 ×studiepunten.

Voorbeeld. De basisopleiding master elektromechanica (EM), fase 4, bevat twee minoren: elek-tromechanica (EM) en automotive engineering (AE). Programmacoordinator is Marc Schepers(MSC). De activiteit CAD van type hoorcollege met docent Peter Arras (PAR) met een omvangvan 9 contacturen wordt in deze basisopleiding opgenomen. Daarnaast is er een specifiek practi-cum automotive elektron met 12 contacturen in lokaal D012 met twee begeleidende docenten datalleen opgenomen is in de minor AE. Deze activiteit wordt in twee groepen georganiseerd; beidegroepen worden toegewezen aan Michel Van Dessel (MVD) en Wilfried Pelgrims (WPE) samen.Daarnaast is er opleiding bouwkunde-landmeten (BL), tweede fase waarin alle practica en oe-feningen voor drie groepen moeten ingepland worden. De oefeningenactiviteit bouwfysica (18

108

Page 112: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

contacturen) wordt voor twee groepen door Kathleen Maes (KMA) gedaan. De derde groep istoegewezen aan Inge Deygers (IDE). Programmacoordinator van BL is Ann Van Gysel (AVG).

B.2 Eenvoudige SQL statements

Elk statement moet bewaard worden in een apart bestandje waarvan de naam met de letter e beginten gevolgd wordt door de nummer van de opgave. (Deze nummer moet uit twee cijfers bestaan,eventueel moet dus een 0 tussengevoegd worden.) Gebruik hiervoor het command SAV <naam>.

1. Geef een overzicht van de activiteiten.

2. Geef een overzicht van de docenten.

3. Geef de afkortingen en namen van alle basisopleidingen.

4. Geef de nummers en namen van alle activiteiten.

5. Geef de afkorting en namen van de vrouwelijke docenten.

6. Geef de namen en geboortedata van de mannelijke docenten.

7. Geef de nummers en namen van alle activiteiten die beginnen met ’i’.

8. Geef de namen van alle minoropleidingen die eindigen op ’ie’.

9. Geef de afkortingen en namen van alle basisopleidingen waarin het woord ’chemie’ voorkomt.

10. Geef de afkortingen en namen van alle minoropleidingen waarin het woord ’master’ voor-komt.

11. Geef nummers en namen van lokalen met een capaciteit tussen 20 en 40 personen.

12. Geef de namen van de basisopleidingen waarvan het aantal groepen tussen 2 en 4 ligt.

13. Geef de namen van de minoropleidingen waarvoor juist een groep bestaat.

14. Geef de afkortingen van lokalen die geen beamer bezitten.

15. Geef een alfabetische lijst van docentafkortingen.

16. Geef een alfabetische lijst van activiteiten.

17. Geef het aantal docenten per geslacht.

18. Geef het aantal lokalen met hun capaciteit waarbij deze groter is dan 40.

19. Geef de grootste en kleinste geboortedatum en hernoem de hoofding naar jong en wijs.

20. Geef het kleinste, grootste en gemiddelde lokaal en hernoem de hoofding naar mini, maxi,gemid.

21. Geef het totaal aan contacturen.

22. Geef het totaal aan minorgroepen.

23. Geef het totaal aan basisgroepen waarbij het aantal geschatte studenten meer dan 40 is.

24. Geef het totaal aantal oef/practica-groepen toegewezen aan docent ’HCR’.

25. Geef de actuele datum en hernoem die naar ’nu’.

26. Geef de info van de docenten die in maart geboren zijn.

27. Geef de info van de docenten die vorige maand jarig waren.

28. Geef de info van de docenten die volgende week jarig zijn.

29. Geef het aantal docenten per geboortejaar.

30. Geef het aantal docenten per geboortejaar van jong naar oud.

31. Geef het totaal aantal minoren per basisopleiding.

32. Geef het aantal verschillende maanden waarin een docent jarig is.

33. Geef per docent het totaal aantal groepen waar hij oefeningen of practica moet geven.

34. Geef per oefeningen en practica activiteit het totaal aantal betrokken docenten.

35. Geef voor de basisopleidingen het totaal aantal groepen dat voorzien is, per geschat stu-dentenaantal.

36. Geef voor de basisopleidingen het totaal aantal groepen dat voorzien is, per geschat stu-

109

Page 113: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

dentenaantal waarvoor er minstens in totaal 2 groepen zijn.

37. Geef voor de basisopleidingen het totaal aantal groepen dat voorzien is, per geschat stu-dentenaantal dat meer dan 30 bedraagt, waarvoor er minstens in totaal 2 groepen voorzienzijn..

38. Geef het aantal fiches en de studiepunten en de studielast,per studiepunt en per studielast,gesorteerd op aantal.

39. Geef het aantal fiches en de studiepunten en de studielast,per studiepunt en per studielast,gesorteerd op studiepunt en studielast.

Het afdrukken van de queries kan bijvoorbeeld gedaan worden met: listing e[0-9]* .

B.3 Bewerkingen op verzamelingen en views

Elk statement wordt bewaard in een apart bestandje waarvan de naam met de letter v begint engevolgd wordt door de nummer van de opgave.

1. Geef de afkorting en naam van alle opleidingen.

2. Geef de alfabetische lijst van de afkortingen van alle opleidingen.

3. Geef de alfabetische lijst van de afkortingen van alle opleidingen met dubbels.

4. Geef de alfabetische lijst van de afkortingen van de basisopleidingen zonder die van deminor.

5. Geef de alfabetische lijst van de afkortingen die zowel in de basis als in de minoropleidingvoorkomen.

6. Creeer een view met daarin de activiteiten waarin het woord ’syst’ voorkomt.Probeer op basis van deze view het aantal contacturen op semesterbasis met 2 te verlagen.

7. Creeer een view dat per oefenpract activiteit het aantal groepen (totgroep) weergeeft.Probeer op basis van deze view dit aantal met 1 te verhogen.

8. Creeer een view (beamerlokaal) met de lokaal info die een beamer hebben.

9. Creeer een view (grootlokaal) met de lokaal info dat een capaciteit van minstens 30 heeft.

10. Maak de doorsnede van de ’beamerlokaal’ view en de ’grootlokaal’ view.

11. Maak het verschil van de ’grootlokaal’ view en de ’beamerlokaal’ view.

B.4 Join van tabellen

Elk statement wordt bewaard in een apart bestandje waarvan de naam met de letter j begint engevolgd wordt door de nummer van de opgave.

1. Geef het cartesisch product van practicum en lokaal.

2. Geef een lijst met practica en bijhorende lokaalnaam.

3. Geef de docentnamen die een theorieactiviteit verzorgen, met bijhorende activiteitsnummer.

4. Geef de docentnamen die een theorieactiviteit verzorgen, met bijhorende activiteitsnaam.

5. Geef een alfabetische lijst van lokaalnamen waar een practica in gegeven wordt.

6. Geef een lijst van lokalen met een beamer waar practica in gegeven wordt, samen met huncapaciteit, geordend op capaciteit.

7. Geef nummers en namen van de activiteiten en de namen van de basisopleidingen waartoedeze activiteiten behoren.

8. Geef de minornaam, nummers en namen van activiteiten die bij een minoropleiding horenin de 4-de fase.

9. Geef de geboortedatum en naam van de docenten die een theorie activiteit verzorgen waar-van het aantal contacturen per semester minder dan 20 is.

10. Geef een alfabetische lijst van basisopleidingen die geen minor hebben met al hun bijho-rende activiteitsnamen.

110

Page 114: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

11. Geef een alfabetische lijst van alle opleidingen met al hun activiteitsnamen.

12. Geef een lijst van alle lokalen met hun capaciteit geordend op lokaalid en in een bijhorendekolom het gecumuleerd totaal.

13. Geef een lijst van minoropleidingen met in bijhorende kolom het gecumuleerd aantal groe-pen per basisopleiding.

14. Geef een lijst van minoropleidingen met in bijhorende kolom het gecumuleerd aantal groe-pen over de basisopleidingen heen.

B.5 Subqueries

Elk statement wordt bewaard in een apart bestandje waarvan de naam met de letter s begint engevolgd wordt door de nummer van de opgave.

1. Geef de namen van de docenten die theorie verzorgen.

2. Geef de namen van de docenten en de namen van de theorie activiteit die ze verzorgen.

3. Geef de namen van lokalen die voor een practicum gebruikt worden.

4. Geef de namen van lokalen en de namen van het practicum dat er in georganizeerd wordt.

5. Geef de activiteiten die in een basisopleiding voorkomen ( met exists).

6. Geef de activiteiten die niet in een basisopleiding voorkomen ( met exists).

7. Geef de nummer van het practicum dat in het grootste lokaal wordt gegeven.

8. Geef de naam van het practicum dat in het kleinste lokaal wordt gegeven.

9. Geef de nummer van de theorieactiviteiten waarvan de docent reeds verjaard is.

10. Geef de nummers van de oefpractica die door een vrouwelijke docent worden gegeven.

11. Geef de namen van de oefpractica die door een vrouwelijke docent worden gegeven.

12. Geef de activiteitnaam die het meeste voorkomt in de basisopleiding.

13. Geef de naam van de oudste docent.

14. Geef de namen en de geboortedata van de 4 jongste docenten.

B.6 Teksten

Elk statement wordt bewaard in een apart bestandje waarvan de naam met de letter t begint engevolgd wordt door de nummer van de opgave.

1. Geef alle gegevens van de fiche-tabel.

2. Geef fid,anaam voor het woord opbouw in de inhoud.

3. Geef fid,anaam en score > 0 voor het woord opbouw in de inhoud.

4. Geef fid,anaam en score > 5 voor het woord opbouw in de inhoud.

5. Geef fid,anaam en score > 0 voor het woord programmeren in de inhoud.

6. Geef fid,anaam en score > 0 voor de woorden opbouw en programmeren in de inhoud.

7. Geef fid,anaam en score > 0 voor de woorden opbouw of programmeren in de inhoud.

8. Geef fid,anaam en de geaccumuleerde score > 0 voor de woorden opbouw en programmerenin de inhoud.

9. Geef fid,anaam en score > 0 voor de woorden opbouw verminderd met de score voor pro-grammeren in de inhoud.

10. Geef fid,anaam en score > 0 voor de woorden programmeren verminderd met de score vooropbouw in de inhoud.

11. Geef fid,anaam en score > 0 voor de woorden programmeren zonder opbouw in de inhoud.Verklaar het verschil in resultaat tussen nr 9 en 10.

12. Geef fid,anaam en score > 0 voor de woorden programmeren verminderd met de score vooropbouw waarbij je opbouw 2× meer gewicht geeft, in de inhoud.Verklaar het verschil in resultaat tussen nr 9 en 11.

111

Page 115: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

13. Geef fid,anaam en score > 0 voor de zin “programmeren in Java” in de inhoud.

14. Geef fid,anaam en score > 0 voor de woorden programmeren en elementen in elkaars buurtin de inhoud.

15. Geef fid,anaam en score > 0 voor de woorden programmeren en oefening in elkaars buurtin de inhoud.

16. Geef fid,anaam en score > 0 voor de woorden die beginnen met “program” in de inhoud.

17. Geef fid,anaam,fslu en score > 0 voor het woord programmeren met als extra voorwaardedat het geschat aantal studielasturen 90 bedraagt, in de inhoud.

18. Geef fid,anaam en score > 0 voor het woord opbouw met als extra voorwaarde dat deanaam “machinecomponenten” is, in de inhoud geordend op studiepunten.

19. Geef fid,anaam en score > 0 voor de woorden programmeren en elementen met een maxi-mum van 8 tussenliggende woorden in de inhoud.

20. Zelfde vraag als vorige maar de volgorde van de woorden in uw vraag moet zelfde zijn alsdie in de inhoud.

21. Tel het aantal keren dat het woord opbouw in de inhoud voorkomt.

B.7 OLAP

Elk statement wordt bewaard in een apart bestandje waarvan de naam met de letter w begint engevolgd wordt door de nummer van de opgave.

1. Geef het totaal aantal studenten dat aan een of andere opleiding deelgenomen heeft metdaarbij ook het totaal aantal dat geslaagd is.

2. Geef per opleidingsonderdeel het aantal studenten dat deelgenomen heeft met daarbij hetaantal dat geslaagd is.

3. Combineer de twee vorige opgaven in een OLAP SQL statement.

4. Geef per opleiding en per type student de sommen. Met som wordt bedoeld het aantalstudent dat deelgenomen heeft en het aantal dat geslaagd is.

5. Geef per opleiding het totaal aantal studenten dat deelgenomen heeft met daarbij het aantaldat geslaagd is, en geef dit ook per type student en ook de globale totalen.

6. Geef de sommen per opleiding en per type student, de sommen per opleiding en de totalesommen.

7. Geef de sommen per type student,per leeftijd en per opleiding en ook alle geaggregeerdesommen.

8. Geef de sommen per type student,per leeftijdscategorie en per opleiding en ook alle geag-gregeerde sommen.

9. Geef de sommen per type student en per leeftijdscategorie voor de eerste opleidingsfase enook alle geaggregeerde sommen.

10. Geef de sommen per type student,per leeftijdscategorie en per provincie en ook alle geag-gregeerde sommen.

11. Welke opleiding heeft het hoogste slaagaantal voor vrouwelijke niet-rokers.

B.8 Functies en triggers

Elk statement wordt bewaard in een apart bestandje waarvan de naam met de letter f begint engevolgd wordt door de nummer van de opgave.

1. Schrijf een trigger die bij het toevoegen of wijzigen van een practica nagaat of de capaciteitvan dat lokaal niet meer dan 20 bedraagt.Indien wel geef een foutmelding.

2. Schrijf een trigger die bij het toevoegen van een docent in de groepoefpra tabel nakijkt of diedocent niet al teveel groepen heeft zodanig dat hij niet overwerkt geraakt. Het maximaalaantal groepen is bijvoorbeeld 10. Geef een foutmelding als je over het maximum geraakt.

112

Page 116: Databanken - KU Leuvenjoost.vennekens/DN/DB-EICT.pdf · Associatie KULeuven Campus De Nayer Industrieel ingenieur Opleiding Elektronica-ICT 3e academisch bachelorjaar Databanken Academiejaar

Voeg eventueel een kleiner aantal groepen dan gevraagd toe maar laat het de gebruiker danweten.

3. Schrijf een procedure die voor een gegeven docent de opleidingen geeft waar de docenttheorie geeft.

4. Schrijf dan een procedure die, gebruikmakend van de voorgaande procedure voor alle do-centen de bijhorende opleidingen geeft.

5. Schrijf een procedure die voor elke opleiding de totale som geeft van het aantal semester-contacturen.Vergeet ook de bijhorende minoren niet. Voeg deze resultaten toe in een tabeldie twee velden bevat nl. bafk en semuren.

6. Schrijf een procedure die de fiche inhoud laat zien voor een gegeven woord.

113