Databases en SQL DBSQLF

advertisement
vrg:
trefwoord
trefwrd onderverdeling
omschrijving
aant Css: 4
DBSQLF Databases en SQL
Hoofdstuk:
732
1
Principes van databases
Doel ve database -
blz 9
om op het juiste moment op de juiste plaats de juiste gegevens beschikbaar te hebben richten we
informatiesystemen in.
1.1
DATABASE > Het deel vd technologie waarin de gestructueerde gegevens worden opgeslagen.
DBMS = DATABASE MANAGEMENT SYSTEEM > Is de technologie die ons ondersteund bij het
gebruiken (opvragen, lezen, wijzigen, verwijderen) en beheren van deze gegevens.
De database wordt benaderd op drie niveau's die onafhankelijk van elkaar aangepast kunnen
worden:
- intern niveau: fysieke opslag
- conceptueel niveau: beschrijving van de structuur van de DB (welke objecten, welke gegevens van
de objecten, welke regels gelden er voor de gegevens en de relaties tussen de gegevens)
- extern niveau: wie of welke groep mag welke gegevens zien en hoe worden de gegevens
gepresenteerd (applicaties en views op de DB)
247
733
Werking ve DB -
blz 10
objecten en records
(of tupels) -
1.2.1
OBJECTEN > Bij het inrichten van een DB denken we in objecten, met de gegevens in een DB zeggen
we iets over dingen in de werkelijkheid. De gegevens die we hierover opslaan zijn de eigenschappen
v die objecten. Een object is hier gewoon een onderwerp en heeft hier niet dezelfde betekenis als in
de OO.
In een DB maken we voor ieder object een tabel. De kolommen in deze tabel beschrijven elk één
eigenschap vh object.
RECORD of TUPEL > is één specifiek voorkomen ve object met zijn gegevens.
zaterdag 15 augustus 2015
Pagina 1 van 18
vrg:
trefwoord
734
Werking ve DB -
blz 10
relaties -
1.2.2
trefwrd onderverdeling
omschrijving
In een DB slaan we gegevens op over objecten in tabellen. Tussen deze tabellen kunnen we relaties
leggen. Relaties zijn op te delen in 3 categoriën:
a. 1-1 > (g)één-op-(g)één
b. 1-n > (g)één-op-veel
c. n-m > veel-op-veel
De categorie ve relatie is bepalend voor de wijze waarop een DB moet worden ingericht.
Met "1" bedoelen we hier 0 of 1, dus maximaal 1.
Met "n" bedoelen we maximaal meer dan 1.
Met "m" bedoelen we maximaal meer dan 1 en gebruiken we allen bij de veel-op-veel relatie.
Ad a. 1-1 (g)één-op-(g)één >
Met "1" bedoelen we hier 0 of 1, dus maximaal 1.
Er wordt alleen een UITSPRAAK gedaan OVER MAXIMALE RELATIE. Bij een 1-1 relatie is het niet
verplicht dat bv een afdeling een hoofd heeft en vise versa (GEEN OF ÉÉN). Figuur 1.3.
Ad b. 1-n (g)één-op-veel >
Met "n" bedoelen we maximaal meer dan 1.
Omdat niet duidelijk is hoeveel, in dit voorbeeld personeelsleden er zijn, spreken we van n. Dit zou
dus ook oneindig kunnen zijn als er geen technische beperkingen zijn. Zie figuur 1.4, in een stad
kunnen geen of een of meer personeelsleden wonen, maar elk personeelslid woont maar in een stad.
Ad c. n-m veel-op-veel >
Deze relatie geldt als het "veel" beide kanten uitwerkt. Waarbij n >= 1 en m >= 0 is. Figuur 1.5.
248
735
Werking ve DB -
blz 13
navigeren -
1.2.3
NAVIGEREN > is een proces dat ervoor zorgt dat databases in staat zijn om records langs te lopen en
na te gaan of deze voldoen aan bepaalde voorwaarden. Als er gezocht moet worden naar een
relatie, dan kan een DB kijken of het ene object een relatie heeft met het andere.
Omdat deze techniek per soort database verschilt, zal ook de navigatie per databasesoort verschillen.
zaterdag 15 augustus 2015
Pagina 2 van 18
vrg:
trefwoord
736
Eisen -
blz 14
eenduidigheid en
samenhang v
gegevens -
1.3
trefwrd onderverdeling
omschrijving
EENDUIDIGHEID > objecten en eigenschappen ve object hebben in een database een eenduidige
betekenis. De betekenis v iedere eigenschap is maar op één manier te intrepeteren en geldt niet
alleen voor de definitie van eigenschappen maar ook voor de defintie van objecten.
Elke eigenschap van een object heeft maar één betekenis en is maar voor één interpretatie vatbaar.
SAMENHANG v GEGEVENS > In DB kunnen verschillende soorten relatie tussen objecten vastleggen,
het is de taak vh DBMS om te zorgen dat de regels voor deze relaties niet overtreden worden.
737
Taken -
blz 15
gebruik en beheer -
wordt mogelijk gemaakt door een DBMS = datamanagement systeem.
1.4
GEBRUIK >
a. SELECTEREN > gegevens opvragen
b. TOEVOEGEN > records toevoegen aan een tabel
c. VERWIJDEREN > records verwijderen in de DB
d. WIJZIGEN > het wijzigen ve bepaalde eigenschap ve object.
E. ONDERHOUD > onderhoudstaken, deze zouden eigenlijk onder beheer moeten vallen,
bv maken ve reservekopie, of DB herstellen bij problemen.
BEHEER > bestaat uit 2 hoofd taken:
1. definieren en wijzigen vd structuur v gegevens
2. toestaan dat gebruikers bepaalde taken uitvoeren.
Onder beheer valt: grenzen afbakenen, maken en veranderen v tabellen en geven en ontnemen van
rechten aan gebruikers.
738
Taken ve DB - structuur v gegevens -
blz 15
view -
1.4.2.1
Een VIEW is een virtuele tabel en is een vd mogelijkheden om het externe niveau vast te stellen. Is
het resultaat van een query.
246
zaterdag 15 augustus 2015
Pagina 3 van 18
vrg:
739
trefwoord
trefwrd onderverdeling
omschrijving
Taken ve DB -
blz 15
structuur v gegevens - bij definieren vd structuur v gegevens houden we ons bezig met:
- objecten waarover we gegevens willen opslaan
1.4.2.1
- de relevante eigenschappen v deze objecten
- relaties tussen deze objecten
Om te voorkomen dat een kleine wijziging in een gebruikersgroep ook gevolgen heeft voor een
andere gebruikersgroep of applicatie, heeft men een model opgesteld met drie niveaus, dan kan
men op het ene niveau wijzigingen doorvoeren zonder dat de andere niveaus daar iets van merken.
Deze drie niveaus zijn:
a. INTERN niveau
b. CONCEPTUEEL niveau
c. EXTERN niveau
Ad a. INTERN niveau > is vooral van technische aard. Hier wordt exact beschreven waar de DB zijn
gegevens opslaat. FYSIEKE OPSLAG v gegevens > is in werkelijkheid moeten alle rijen in een tabel
achter elkaar op een harde schijf worden opgeslagen.
INDEX is een vd technieken die op intern niveau werkt, kost wel ruimte, maar versnelt de manier
waarop een DB kan zoeken naar records. Meestal worden nieuwe records achteraan toegevoegd. BV
oko het opnieuw sorteren van reeds opgeslagen records.
Ad b. CONCEPTUEEL niveau > hier beschrijven we de structuur vd gegevens die we willen opslaan.
Hier krijgen we antwoord op de volgende vragen:
b1. Over welke objecten we gegevens bijhouden (welke tabellen)
b2. Welke gegevens we over deze objecten bijhouden (welke velden in de tabellen)
b3. Wat de structuur van deze gegevens is (de soort velden: string, datum, numeriek ed)
b4. Welke regels er gelden voor deze individuele gegevens en de relatie tussen deze gegevens
Ad c. EXTERN niveau > hier wordt het onderscheid beschreven tussen gebruikers en
gebruikersgroepen, wie wat mag zien, (onderhouden, toevoegen, wijzigen e.d.) en op welke manier
deze gegevens gepresenteerd worden. Dit kan dmv views.
249
zaterdag 15 augustus 2015
Pagina 4 van 18
vrg:
trefwoord
740
trefwrd onderverdeling
omschrijving
Taken ve DB - structuur v gegevens -
blz 19
functionele en
1.4.2.1 logische
onafhankelijkheid -
FUNCTIONELE of FYSIEKE ONAFHANKELIJKHEID > Het belangrijkste onderscheid tussen intern en
conceptueel niveau is dat de structuur vd gegevens is losgekoppeld van de fysieke opslag. Het is
mogelijk om wijzigingen aan te brengen op intern niveau zonder dat dit op conceptueel - en extern
niveau merkbaar is. Hierdoor is het mogelijk een database op een andere HD te zetten of op een
andere wijze te sorteren zonder dat de bovenliggende niveaus aangepast hoeven te worden.
LOGISCHE ONAFHANKELIJKHEID > als er op conceptueel niveau wijzigingen aangebracht kunnen
worden zonder dat dit effect heeft op extern niveau.
Onafhankelijkheid tussen extern niveau en conceptueel niveau. Als je de attributen die worden
opgeslagen van objecten aanpast, hoeven de views/applicaties niet worden aangepast. In de praktijk
zul je echter wel minimaal één applicatie of view aanpassen, want je verandert de structuur van de
DB omdat je in een applicatie/view die gegevens wil gebruiken.
INTERN -------------------> CONCEPTUEEL -------------------> EXTERN
fysiek of functionele
logische
onafhankelijkheid
onafhankelijkheid
741
Taken ve DB - structuur v gegevens -
blz 19
autorisatie -
1.4.2.2
is een belangrijke taak van het DBMS. Hiermee bepalen we welke gebruiker voor welke acties
toestemming heeft. Het DBMS kan geven en wegnemen.
Hoofdstuk:
742
2
Databasemodellen
Flat Files -
blz 34
2.1
zaterdag 15 augustus 2015
FLAT FILES = platte bestanden.
Oorspronkelijk werden alle gegevens in grote computerbestanden opgeslagen, deze heten flat files.
Hier komt veel redundantie (dubbele gegevens) voor, dit is niet wenselijk omdat gegevens dan veel
meer opslagruimte gebruiken dan nodig is en als er ergens iets gewijzigd moet worden dan moet dit
op meerdere plaatsen gebeuren.
Zodra er relaties tussen verschillende groepen gemaakt moeten worden heb je een probleem en
komt er veel redundantie voor. Wordt niet meer gebruikt.
Pagina 5 van 18
vrg:
743
trefwoord
trefwrd onderverdeling
omschrijving
Hiërarchische database -
blz 36
bestaat uit records die met elkaar verbonden worden door links. Een record is een verzameling
velden (attributen) die precies één waarde kunnen bevatten. De link is een associatie tussen precies
twee records.
2.2
In een hiërarchische database worden rijen (records of tupels) verbonden in een boomstructuur.
Deze boomstructuur lijkt sterk op de wijze waarop bestanden op een computer zijn georganiseerd.
De boomstructuur heeft ook weer parents (bovenste) en child (elementen onder de parent).
Hiërarchische structuren werden veel gebruikt in de eerste DBMS systemen voor mainframes.
De veel-op-veel relatie levert ook in het hiërarchische model problemen op. Een child kan maar naar
één parent wijzen.
Een ander probleem bij Hiërarchische databases is dat we de verbindingen (links) tussen de records
niet kunnen zien. Om een child vanuit een ander child te kunnen benaderen moeten we dat via de
gemeenschappelijke parent doen. Records zijn met elkaar verbonden door links in een
boomstructuur. Wordt niet meer gebruikt.
1-1 en 1-n relatie
250
251
zaterdag 15 augustus 2015
Pagina 6 van 18
vrg:
744
trefwoord
trefwrd onderverdeling
omschrijving
Netwerkdatabases -
blz 38
In netwerkdatabases kan een child meerdere parents hebben. Een veel-op-veel relatie is hier dus
mogelijk.
2.3
n-m relatie
252
745
Relationele database -
blz 39
2.4
In deze databases gaat het vooral om relaties tussen objecten. Een veel-op-veel relatie is hier
mogelijk.
Relaties: In een relationele Db gaat het juist om de relaties tussen objecten.
Records of Tupels: Per object (tabel) heb je records die met andere objecten relateerd zijn.
Viewdefinitie: Je kunt een view op een DB definieeren, dan zie je alleen die attributen die nodig zijn
voor een bepaald doel (extern niveau).
Tabeldefinitie: Bij de tabeldefinitie worden alle attributen die je van een object wil registreren
betrokken (conceptueel niveau).
n-m relatie
Hoofdstuk:
zaterdag 15 augustus 2015
3
Relationeel Model
Pagina 7 van 18
vrg:
trefwoord
746
Relationeel model -
blz 49
begrippen -
3.1
trefwrd onderverdeling
omschrijving
Een model is de weegave vd werkelijkheid, met een relationeel model proberen we structuur aan te
brengen in de gegevens die nodig zijn voor de informatievoorziening.
Hierbij denken we in verzamelingen van gegevens en deze kunnen in drie onderdelen onderscheiden
worden:
1. RELATIE of ENTITEIT od OBJECT of TABEL > hiermee bedoelen we de beschrijving ve object
waar we gegevens over willen opslaan. Beschrijving van een object
in de werkelijkheid.
2. ATTRIBUTEN of KOLOM > zijn de eigenschappen van een relatie / entiteit.
2a. ATTRIBUUTWAARDE > veldwaarde, de veldinhoud. De waarde/inhoud die de
eigenschap v.e. relatie aanneemt (van één instantie).
2b. ATTRIBUUTNAAM > de veldnaam of kolomnaam.
3. ASSOCIATIES > de relaties of entiteiten staan niet op zich zelf, maar zijn geassocieerd aan
andere relaties. Een relatie kan ook een associatie hebben met zichzelf.
Let op: we spreken over een relatie tussen tabellen én over relaties of entiteit. Beide hebben een
verschillende betekenis.
Een relatie of entiteit noteer je als volgt, zie figuur:
module (code, naam, vragen, tijd) >>> dit is dus de hele tabel uit de figuur.
TUPEL > is een record, een rij uit de figuur, bv de rij: IMF, Infrastructure….. , 20 , 30
De relatie/entiteit/tabel/object module in de figuur heeft als attributen: code, naam, vragen en tijd
(dit noemt men ook veldnamen).
Een attribuutwaarde is veldinhoud.
Een kolom is een verzameling waarden die tot één attribuut behoren.
Indien er NULL staat, betekent dit dat in het betreffende veld geen waarde is ingevuld.
Indien men altijd een waarde in een veld wil hebben, moet men dit veld met de optie NOT NULL
opbouwen.
DBMS voert opdrachten sequentieel (één voor één) uit.
253
zaterdag 15 augustus 2015
Pagina 8 van 18
vrg:
trefwoord
trefwrd onderverdeling
747
Integriteit -
blz 52
entiteitisintegriteit -
3.2.1
omschrijving
ENTITEITSINTEGRITEIT: iedere relatie moet een attribuut of combinatie van attributen hebben
waarmee elk tupel als uniek en aanwezig te identificeren is. Dat attribuut is de PRIMARY KEY of
PRIMAIRE SLEUTEL. Het is meestal de meest compacte.
Er is altijd maar één primaire sleutel, deze sleutel wordt onderstreept weergegeven.
Indien meerdere velden samen de primaire sleutel vormen spreken we van een gecombineerde of
SAMENGESTELDE SLEUTEL.
De velden ve primaire sleutel zijn doorlopend onderstreept.
KANDIDAATSLEUTEL > de sleutel(s) die voldoen aan het principe dat ze kunnen zorgen voor de
identificatie van tupels als uniek en aanwezig. Deze sleutel kan een primairy key worden, of een
onderdeel ervan, maar dit hoeft hij niet te worden. Uit alle kandidaatsleutels wordt de primairy key
gekozen.
Kandidaatssleutels en dus ook primaire sleutels kunnen worden samengesteld uit meerdere
attributen. Dan spreken we over samengestelde of gecombineerde sleutels.
748
Integriteit -
blz 53
domein -
3.2.2
749
Integriteit -
blz 53
referentiële
integriteit -
3.2.3
hiermee kunnen we beperkingen op de invoer van velden leggen. We geven hiermee aan welke
waarden een attribuut mag bevatten. En kan zelfs verder gaan dan alleen het aangeven of een veld
numeriek moet zijn, het kan zelfs voorwaarden bevatten, zoals bv de in te geven datum moet liggen
na vandaag.
hiermee bedoelen we dat de gegevens in de ene tabel zich op een bepaalde manier verhouden tot
de gegevens in de andere tabel. In beide tabellen moeten wel dezelfde velden aan elkaar gekoppeld
kunnen worden.
REFERENTIËLE INTEGRITEIT > is dat als een vreemde sleutel een waarde heeft moet deze waarde ook
voorkomen in de relatie (als primaire key) waar de vreemde sleutel naar verwijst.
750
Integriteit - referentiële integriteit -
blz 54
foreign key of
vreemde sleutel -
3.2.3
Bij het opvoeren van een vreemde sleutel wordt de naam van het veld tussen het "kleiner dan <" en
"groter dan >" teken gezet. Een vreemde sleutel hoeft niet dezelfde naam te hebben als het veld
naar waar hij verwijst.
Een vreemde sleutel mag ook leeg zijn (NULL), maar als deze een waarde heeft moet deze waarde
ook voorkomen in de relatie waar de vreemde sleutel naar verwijst.
Bij een één-op-veel relatie ligt de vreemde sleutel altijd op de veel positie.
Een bijzondere vorm van een één-op-veel relatie is een associatie ve relatie naar zichzelf. De naam
van het veld dat naar zichzelf verwijst moet dan wel anders heten.
Men kan ook gebruik maken van tussentabellen.
Een TUSSENTABEL heeft een primaire sleutel die uit alle velden die in de tussentabel staan bestaat.
zaterdag 15 augustus 2015
Pagina 9 van 18
vrg:
trefwoord
751
Integriteit -
blz 55
update en delete -
3.2.4
trefwrd onderverdeling
omschrijving
Door het vastleggen vd entiteitsintegriteit en de referentiële integriteit zorgen we dat er geen
gegevens in de DB kunnen komen die niet aan de eisen voldoen, dit kan beperkend werken.
De referentiële integriteit eist dat, als een vreemde sleutel een waarde heeft, deze moet voorkomen
in de relatie waar de vreemde sleutel naar verwijst, zie figuur.
We kunnen dus geen gegevens verwijderen als er vreemde sleutels aan gekoppeld zijn, zonder eerst
in de tabel met de vreemde sleutels deze ook te verwijderen. In de figuur zouden we eerst alle
onderdelen uit de tabel onderwerp moeten verwijderen voor we het record uit de tabel module
kunnen verwijderen.
Hier zijn 3 mogelijkheden voor:
1. RESTRICTED (NO ACTION) > is standaard. Een tupel mag niet worden verwijderd of we
mogen de primaire sleutel niet wijzigen zolang er nog vreemde sleutels zijn die
de waarde vd betreffende primaire sleutel hebben.
2. CASCADES > betekent waterval. Is als we een de primaire sleutel wijzigen, de vreemde
sleutel die hier ook naar verwijst, ook gewijzigd. Als we een primaire sleutel
verwijderen, worden alle tupels/records en de wordt ook de foreign key die naar
deze primaire key die hierna verwijzen ook (volledig) verwijderd.
3. NULL FILES > hierbij worden alle verwijzigingen in een vreemde sleutel leeggemaakt (NULL).
254
Hoofdstuk:
752
4
Relationeel Database Base Management Systeem (RDBMS)
RDBMS -
blz 71
4
RDBMS = Relationeel Database Base Management Systeem > beheert een database volgens de
regels van het relationele model. Hiermee willen we tabellen definieren en de relaties tussen
tabellen aangeven.
SQL = Structured Query Language > is de taal die we hiervoor gebruiken.
zaterdag 15 augustus 2015
Pagina 10 van 18
vrg:
trefwoord
753
RDBMS -
blz 73
onderdelen (3
soorten) -
4.2
trefwrd onderverdeling
omschrijving
DDL > Definieren (---------> Dcm)
DCL > Controleren (---------> dCm)
DML > Manipuleren (---------> dcM)
DDL = DATA DEFENITION LANGUAGE > deze worden gebruikt bij het aanmaken van een DB, is op
beheerdersniveau. Het gaat hier om structureren. De basiscommando's zijn:
- CREATE (maken)
- DROP (verwijderen)
- ALTER (wijzigen)
DCL = DATA CONTROL LANGUAGE > hiermee kunnen we de rechten van gebruikers en
gebruikersgroepen aanpassen, toekennen en afnemen, is op beheerniveau. Het gaat hier om
rechten. De basiscommando's zijn:
- GRANT (toestemming geven)
- REVOKE (intrekken)
Hierbij kun je voor de negatieve benadering kiezen, dat is eerst alles intrekken en dan toekennen
wat mag.
DML = DATA MANIPULATION LANGUAGE > hiermee kun je gegevens uit de DB opvragen, toevoegen,
wijzigen en verwijderen, voor beheerder en gebruiker en gebeurt op record/tupel niveau. Het gaat
hier om de inhoud, de gegevens. De basiscommando's/opdrachten zijn:
- SELECT (keuze maken)
- INSERT (invoegen)
- UPDATE (bijwerken/wijzigen)
- DELETE (verwijderen)
Kunnen met de volgende clausules gebruikt worden:
- SELECT (selecteer)
- SELECT * (selecteer alle attributen)
- FROM (van de DB)
- WHERE (waarvoor geldt, bij rijen)
- AND (en)
- OR (of)
- NOT (niet)
- DISTINCT (uniek)
- GROUP BY (groeperen per attribuut)
- HAVING: gebruik je bij een aggregatie met voorwaarden, bijvoorbeeld "geef het aantal
onderwerpen per module waarbij het aantal onderwerpen minimaal 4 bedraagt:
SELECT code, count(*) FROM onderwerp GROUP BY code HAVING count(*) >= 4;
- INSERT INTO (invoegen in)
- VALUES (waardes,in combinatie met INSERT INTO)
- DELETE FROM (verwijder van)
- UPDATE (wijzig)
- SET (in combinatie met Update)
kolom: een attribuut in z'n domein
rij: een tupel of record
object / tabel: een relatie of entiteit
selectie: deel van de inhoud van de tabel
Hoofdstuk:
754
5
Structures Qeury Language (SQL)
DDL = data Defenition language -
blz 85
5.1
zaterdag 15 augustus 2015
DDL = DATA DEFENITION LANGUAGE > deze worden gebruikt bij het aanmaken van een DB, is op
beheerdersniveau. Het gaat hier om structureren. De basiscommando's zijn:
- CREATE (maken)
- DROP (verwijderen)
- ALTER (wijzigen)
Pagina 11 van 18
vrg:
trefwoord
trefwrd onderverdeling
755
DDL = data Defenition language -
blz 87
Tabellen maken -
5.1.2
omschrijving
Gegevenstypen/domeinen (standaarddomeinen, in de praktijk zijn er veel meer) zijn:
- INTEGER: gehele getallen
- SMALLINT: kleine gehele getallen
- DATE: datum (jaar-maand-dag)
- TIME: tijd (hh:mm:ss)
- CHAR(n): string met vaste lengte n en moet de totale lengte bij ieder veld gevuld zijn.
- VARCHAR(n): string met variable lengte, met max lengte n, hele veld hoeft niet gevuld te zijn.
Het commando om een tabel te maken ziet er als volgt uit:
CREATE TABLE tabelnaam
(
kolomnaam1 domein1 [NOT NULL],
[kolomnaam2 domein2 [NOT NULL],]
[kolomnaam3 domein3 [NOT NULL],]
[kolomnaam4 domein4 [NOT NULL],]
[primaire sleutel,]
[vreemde sleutel],
)
tussen [….] is optioneel.
Er moet altijd minimaal 1 kolomnaam in een nieuwe tabel worden aangemaakt.
Een primaire sleutel moet altijd een waarde hebben en dit veld moet dus altijd met de optie NOT
NULL worden aangemaakt.
Een primaire sleutel wordt als volgt gedefinieert, moet altijd direct na de attributen/velden worden
geplaatst én mag maar één keer voorkomen:
PRIMAIRY KEY (kolomnaamX [, kolomnaamY]…)
In dit geval zou het veld met naam: kolomnaamX ook met NOT NULL moeten zijn aangemaakt bij de
velden.
Als er gebruik wordt gemaakt van een vreemde sleutel moet die ook toegewezen worden, dit
gebeurd na de toewijzen van de primairy key, als volgt:
FOREIGN KEY (kolomnaamX [, kolomnaamY]…)
REFERENCES tabelnaam
De tabelnaam is de naam vd tabel waar uit de foreign key komt. De naam van de foreign key hoeft
niet gelijk te zijn aan de naam die die heeft in de tabel van waar hij uit komt.
Door het definiëren ve vreemde sleutel implementeren we de referentiële integriteitsregels.
Indien met vreemde sleutels gewerkt wordt, moet natuurlijk eerst de tabel aangemaakt zijn waar de
vreemde sleutel uit komt, voordat je de tabel met de koppeling naar die vreemde sleutel aanmaakt.
Men kan niets koppelen als het nog niet bestaat.
Hier een voorbeeld met een samengestelde vreemde sleutel:
CREATE TABLE exameneis (
code
VARCHAR(6) NOT NULL,
nummer
SMALLINT NOT NULL,
eisnr
SMALLINT NOT NULL,
eisomschrijving VARCHAR(50),
ISBN
CHAR(20),
PRIMAIRY KEY (code, nummer, eisnr),
FOREIGN KEY (code, nummer)
REFERENCES onderwerp,
FOREIGN KEY (ISBN)
REFERENCES Literatuur)
zaterdag 15 augustus 2015
Pagina 12 van 18
vrg:
trefwoord
trefwrd onderverdeling
756
DDL = data Defenition language -
blz 90
tabellen
verwijderen -
5.1.3
omschrijving
Dat kan met het commando:
DROP TABLE tabelnaam
Hiermee wordt de tabel volledig inclusief inhoud, definitief verwijderd. De volgorde van verwijderen
is van belang als er vreemde sleutels in de tabel zitten.
757
DDL = data Defenition language -
blz 91
tabellen wijzigen -
Kan met het commando:
5.1.4
ALTER TABLE tabelnaam
daarna komt de regel waarin we de verandering aangeven, bv:
ALTER TABLE module
RENAME tijd examentijd
Hiermee veranderen we de kolomnaam tijd naar examentijd.
zaterdag 15 augustus 2015
Pagina 13 van 18
vrg:
758
trefwoord
trefwrd onderverdeling
omschrijving
DCL = data Control language -
blz 92
5.2
DCL = DATA CONTROL LANGUAGE > hiermee kunnen we de rechten van gebruikers en
gebruikersgroepen aanpassen, toekennen en afnemen, is op beheerniveau. Het gaat hier om
rechten. De basiscommando's zijn:
- GRANT (toestemming geven)
- REVOKE (intrekken)
Hierbij kun je voor de negatieve benadering kiezen, dat is eerst alles intrekken en dan toekennen
wat mag. De autorisatie wordt ook al in de praktijk vaak afgedwongen door de
applicatie/programma dat van de database gebruik maakt.
We kunnen de autorisatie per gebruikers groep of per gebruiker bepalen, voor iedereen te gelijk
doet men dat met (PUBLIC).
AUTORISEREN toestaan doen we met de opdracht:
GRANT wat1 [,wat2]….ON tabel1 [, tabel2]…. TO wie1 [, wie2]….
Een voorbeeld van iederen laten selecteren en wijzigen is dus:
GRANT SELECT, UPDATE ON tabel1 TO PUBLIC
AUTORISEREN intrekken doen we met de opdracht:
REVOKE wat1 [,wat2]….ON tabel1 [, tabel2]…. FROM wie1 [, wie2]….
Een voorbeeld van iederen laten intrekken is dus:
REVOKE SELECT, UPDATE ON tabel1 FROM PUBLIC
Sequentie bij autorisatie:
- negatieve benadering > eerst alles revoken en daarna onderdelen toestaan (voorkeur).
- positieve benadering > eerst alles toestaan en wat niet mag daarna revoken.
Bij autorisatie, met name als je GRANT en REVOKE opdrachten door elkaar gebruikt is de volgorde
van de commando's van cruciaal belang. Het DBMS voert de opdrachten in volgorde na elkaar uit, en
als de volgorde niet juist is, kan het zijn dat bepaalde opdrachten door vervolgopdrachten weer
teniet gedaan worden.
OPDRACHTEN:
- GRANT (toekennen)
- REVOKE (afnemen)
CLAUSULES (rechten die je kunt toekennen of afnemen):
- SELECT (select opdracht uitvoeren)
- UPDATE (aanpassen tupel/gebruiker mag kolommen en rijen aanpassen en kolommen
definieren)
- INSERT (invoegen tupel op tabel/men mag rijen toevoegen)
- DELETE (verwijderen tupel/gebruiker mag rijen cq tupels cq records verwijderen)
- ALTER (wijzigen tabel/structuur wijzigen, kolommen toevoegen, hernoemen en vewijderen)
- ALL (alle rechten)
* ON (op de tabel..)
* TO (aan de persoon...bij GRANT)
* FROM (van de persoon .. bij REVOKE)
PUBLIC: algemeen aan iedereen rechten tegelijk toekennen kan met PUBLIC.
GRANT {SELECT | INSERT | DELETE | UPDATE [kolomnaam] ? | INDEX | ALTER | ALL } ON tabelnaam
TO {PUBLIC | gebruikernaam ? }
REVOKE {SELECT | INSERT | DELETE | UPDATE | INDEX | ALTER | ALL } ON tabelnaam FROM {PUBLIC
| gebruikernaam ? }.
zaterdag 15 augustus 2015
Pagina 14 van 18
vrg:
trefwoord
trefwrd onderverdeling
759
DML = data Manipulation language -
blz 95
SELECT -
5.3
omschrijving
DML = DATA MANIPULATION LANGUAGE > hiermee kun je gegevens uit de DB opvragen, toevoegen,
wijzigen en verwijderen, voor beheerder en gebruiker en gebeurt op record/tupel niveau. Het gaat
hier om de inhoud, de gegevens. Een van de basiscommando's is:
- SELECT (keuze maken)
enkele voorbeelden van het gebruik van select:
SELECT kololmnaam1 [, kolomnaam2]….. FROM tabelnaam [WHERE] vrw1 [AND/OR] vrw2]
SELECT * FROM tabelnaam
SELECT DISTINCT kololmnaam1 FROM tabelnaam
DISTINCT > zorgt ervoor dat de DB alleen maar rijen vertoont waarvan de inhoud nog niet is
weergeven. Een rij moet volledig gelijk zijn aan een andere rij voordat deze wordt overgeslagen.
Clausules / voorwaarden toevoegen doen we als volgt:
SELECT kololmnaam1 [, kolomnaam2]…..
FROM tabelnaam
WHERE (voorwaarde1 AND voorwaarde2)
of:
SELECT kololmnaam1 [, kolomnaam2]…..
FROM tabelnaam
WHERE (voorwaarde1 OR voorwaarde2)
bij de WHERE-clausule vergelijken we in de voorwaarden met OPERATORS, hiervan kennen we de
volgende soorten:
> groter dan
< kleiner dan
= gelijk aan
>= groter dan of gelijk aan
<= kleiner dan of gelijk aan
<> ongelijk aan
IN alle waarden die in een lijst genoemd wordt.
NOT IN niet in
subquery met [NOT] IN: gebruik je bijvoorbeeld bij de vraag :geef een overzicht van
alle docenten die geen modules onderwijzen. Dit kun je niet in één query defineeren,
dus moet je subquery maken:
SELECT naam FROM docent WHERE nummer NOT IN (SELECT nummer
FROM docentmodule);
LIKE bv "Er%" is alles weergeven dat begint met "Er" % is een wildcard voor een of
meerdere tekens
Technisch gezien opent het systeem de tabellen achter FROM, dan wordt er rij voor rij gekeken of
deze aan de voorwaarden van de WHERE clausule voldoen, als dat zo is worden ze getoond en
anders niet. Voor de duidelijkheid mag men ronde haken plaatsen
We kunnen met select ook gegevens uit meerdere tabellen tegelijk opvragen. Deze tabellen kunnen
we ook een alias geven (bijnaam voor het gemak), dat doe je door achter de tabelnaam minimaal
één spatie te zetten en dan de aliasnaam op te geven. Bijv:
SELECT t1.veldtb1, t1.veldtb2, t2.veldtb1, t2.veldtb2
FROM tabel1 t1
tabel2 t2
WHERE t1.veldtb1 = t2.veldtb2
AND
t2.veldtb1 = t1.veldtb2
Eerst wordt bij where gekeken of een record meetelt en daarna wordt gekeken welke velden er in
het resultaat moeten staan.
SELECT {[tabelnaam.]* | {[tabelnaam.]kolomnaam1 | [,functie1]|berekening}
[[tabelnaam.]kolomnaam2 | [,functie2]|berekening]?}
FROM tabelnaam1 [alias] [, tabelnaam2 [alias]}?
[WHERE-clausule]
[GROUP BY [tabelnaam.]kolomnaam1 [, [tabelnaam2 ] ] ]
[HAVING functievoorwaarde1
zaterdag 15 augustus 2015
Pagina 15 van 18
vrg:
trefwoord
trefwrd onderverdeling
omschrijving
[{AND|OR} functievoorwaarde2 ] ] ]
[WHERE voorwaarde1 [ {AND | OR} voorwaarde2 ] ?]
Voorwaarde
{{constante | berekening | [tabelnaam.]kolomnaam} {=|>|<|>=|<=|<>} {{constante | berekening |
[tabelnaam.]kolomnaam|(subquery1)} |[tabelnaam.]kolomnaam {IS [NOT] NULL | [NOT] IN
(subquery2) | [NOT] EXISTS subquery3) }
functievoorwaarde
{functie | constante } {=|>|<|>=|<=|<>} {functie | constante }
760
DML = data Manipulation language -
blz 105 aggregatie en group
5.3.5 by -
Als we een query willen maken die iets zegt over de verzameling. Worden gebruikt bij het SELECT
commando.
AGGREGATIES zijn:
- SUM
> optellen/totaaltelling
- AVG
> gemiddelde weergeven
- COUNT > aantal records die voldoen tellen > deze kan altijd gebruikt worden (enige)
- MAX
> hoogste waarde weergeven
- MIN
> laagste waarde weergeven
GROUP BY
Als we, bij gebruik van aggregaties de geselecteerde gegevens willen groeperen moeten we dit
aangeven, dat kan bijvoorbeeld als volgt:
SELECT
veld1, AVG(veld2)
FROM
tabel1
GROUP BY veld1
Stelregel is dat niet alle geaggregeerde velden verplicht in een GROUP BY voorkomen. Als we het
aantal records willen tellen doen we dat als volgt:
SELECT COUNT(*)
FROM
tabel1
of als het gebruikt moet worden met group by…..
SELECT COUNT(*)
FROM
tabel1
GROUP BY veld3
>> er wordt hier gegroepeerd op veld3 en aangegeven hoeveel records hier tot
diezelfde groep horen.
GROUP BY …. HAVING
Bij GROUP BY kunnen we ook HAVING gebruiken en een voorwaarde stellen wat er gegroepeerd
moet worden. Bijv:
SELECT
veld1, COUNT(*)
FROM
tabel1
GROUP BY veld1
HAVING count(*)>=4
>> Hier worden alleen het aantal records per groep weergegeven als dat aantal
groter of gelijk is aan 4.
Bij GROUP BY gebruiken we altijd de clausule HAVING voor de voorwaarde in de query en niet de
clausule WHERE.
zaterdag 15 augustus 2015
Pagina 16 van 18
vrg:
761
trefwoord
trefwrd onderverdeling
omschrijving
DML = data Manipulation language -
blz 106 Subqueries 5.3.6
In een query kun je ook nog een of meerdere subqueries zetten. De subquery wordt als eerste
uitgevoerd. De sub-query komt vaak voor als we een vraag stellen met een ontkenning ve primairevreemde sleutel relatie. Sub-queries bouwen we in twee fasen. We maken eerste de subquery en
daarna de hoofdquery.
Bijvoorbeeld:
SELECT veld1 [, veld2]…..
FROM tabel1
WHERE veld1 NOT IN (SELECT veld3
FROM tabel2)
met een subquery maken we een tijdelijke tabel aan met de gewenste resultaten, de query haalt
dan weer zijn resultaten uit die tijdelijke tabel. Bij WHERE……IN….. Moeten ze wel in de tijdelijke
tabel staan en bij WHERE…..NOT IN…… niet.
Echter als we in een subquery het gelijk aan (=) teken gebruiken mag het resultaat van die query
maar een record opleveren.
762
DML = data Manipulation language -
blz 110 INSERT INTO 5.3.7
DML = DATA MANIPULATION LANGUAGE > hiermee kun je gegevens uit de DB opvragen, toevoegen,
wijzigen en verwijderen, voor beheerder en gebruiker en gebeurt op record/tupel niveau. Het gaat
hier om de inhoud, de gegevens. De basiscommando's zijn:
- INSERT (invoegen)
Toevoegen van rijen doen we met:
INSERT INTO tabelnaam (kolom(men)) VALUES (waarden)
Als we alle kolommen willen vullen is het niet nodig om de kolommen allemaal te benoemen, de
tabelnaam is voldoende met de opgave van de waarden. BV:
INSERT INTO tabel VALUES ("tekst1", 10, "Tekst2")
Er komt met het commando insert altijd een nieuwe rij/nieuw record in de DB.
INSERT
INTO tabelnaam [ (kolomnaam1 [.kolomnaam2]) ]
{VALUES (waarde1 [,waarde2]..) | query }
763
DML = data Manipulation language -
blz 111 DELETE 5.3.8
DML = DATA MANIPULATION LANGUAGE > hiermee kun je gegevens uit de DB opvragen, toevoegen,
wijzigen en verwijderen, voor beheerder en gebruiker en gebeurt op record/tupel niveau. Het gaat
hier om de inhoud, de gegevens. Een van de basiscommando's is:
- DELETE (verwijderen)
Met het commando DELETE verwijderen we records/rijen uit de tabel. Dit gaat als volgt:
DELETE FROM tabel
Deze opdracht verwijdert alle rijen die er zijn.
Als we maar een aantal rijen willen verwijderen die aan een bepaalde voorwaarde voldoen kan dit
weer met WHERE, bv:
DELETE FROM tabel WHERE veld1=X
DELETE FROM tabelnaam [WHERE-clausule]
zaterdag 15 augustus 2015
Pagina 17 van 18
vrg:
trefwoord
764
trefwrd onderverdeling
omschrijving
DML = data Manipulation language -
blz 111 UPDATE 5.3.9
DML = DATA MANIPULATION LANGUAGE > hiermee kun je gegevens uit de DB opvragen, toevoegen,
wijzigen en verwijderen, voor beheerder en gebruiker en gebeurt op record/tupel niveau. Het gaat
hier om de inhoud, de gegevens. Een van de basiscommando's is:
- UPDATE (bijwerken)
Met het commando UPDATE kunnen we gegevens bijwerken in de tabel. Dit gaat als volgt:
UPDATE tabel
SET
veld1 = waarde
Ook hier kunnen we weer voorwaarden toevoegen met WHERE, bv:
UPDATE tabel
SET
veld1 = waarde1
WHERE veld2=waarde2
Hoofdstuk:
765
9
Divers
Overige -
blz 999
- Gebruikers maken nooit rechtstreeks gebruik van de DB
- Een object/tabel bestaat uit meerdere records.
- Het verwijderen van verouderde gegevens valt niet onder beheerstaken.
- Op conceptueel niveau hebben we een totaal overzicht van alle beschikbare gegevens.
- In een relationele DB zijn de relaties voor de gebruikers zichtbaar.
- Een vreemde sleutel verwijst altijd naar een primaire sleutel.
9.9.9
- een WHERE clausule wordt altijd op een rij uitgevoerd
- een HAVING clausule wordt altijd op een groep uitgevoerd.
766
Zelfstudie online -
blz ####
9.9.9.9
Op de volgende site staat een gratis online SQL cursus:
http://www.w3schools.com/sql/default.asp
http://sqlzoo.net
http://www.tutorialspoint.com/sql/index.htm
Op deze site kun je een gratis SQL browser downloaden, om op een eenvoudige manier met
bestanden en queries te oefenen:
http://sqlitebrowser.org
zaterdag 15 augustus 2015
Pagina 18 van 18
Download