DATABASES
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
INLEIDING
Digitaleleeromgeving
Bijsommigeopdrachtenhebjehulpmiddelennodig.Bijvoorbeeldfilmpjes,formulierenofeenlinknaareen website.Dezestaanallemaalindedigitaleleeromgeving.Diticoontjeverwijstnaardedigitaleleeromgeving.Om hiertekomengajenaardigitaal.boomonderwijs.nl/beroepsonderwijs.
Eerstekeerinloggenindedigitaleomgeving
Voordatjededigitaleleeromgevingkuntgebruikenmoetjejelicentieactiveren.
• Overlegmetjedocentwelktypeaccountjegebruikt.
• Ganaarwww.boomberoepsonderwijs.nl/licentie.
• Bekijkdeinstructiefilmofleeshetstappenplan.
• Volgdestappen.
Daarnakunjeaandeslag!
Inleiding
Databaseszijneenessentieelonderdeelvandeinformatiemaatschappij.Eenbedrijfofoverheidsinstantiekan nietfunctionerenzonderdatabases.
TAALREDACTIE)
Leerdoelen
CONCEPT
1. Jehebtbasiskennisvanhetrelationeelmodel.
2. JehebtbasiskennisvanGegevensanalyse.
Bekijkhetfilmpje"SQLExplainedin100Seconds".HetiseeninleidingtotSQL-databasesin100seconden.
3. JekuntrelationeledatabasescreërenenmanipulerenmetMySQL.
4. Jehebtbasiskennisvanhetdocumentmodel.
5. JekuntdocumentdatabasescreërenenmanipulerenmetNoSQL.
(ZONDERBEELD-EN
2
COLOFON
BoomBeroepsonderwijs
info@boomberoepsonderwijs.nl
www.boomberoepsonderwijs.nl
Auteurs:GabrielSanchéz-Cano
Eindredactie:<<Vulhierdenaamvandeeindredacteurin.>>
Titel:Databases
ISBN:9789037267440
Eerstedruk/eersteoplage
©2024BoomBeroepsonderwijs|Boom
BehoudensdeinofkrachtensdeAuteurswetgesteldeuitzonderingenmagnietsuitdezeuitgaveworden verveelvoudigd,opgeslagenineengeautomatiseerdgegevensbestand,ofopenbaargemaakt,inenigevormof openigewijze,hetzijelektronisch,mechanisch,doorfotokopieën,opnamenofenigeanderemanier,zonder voorafgaandeschriftelijketoestemmingvandeuitgever.
Voorzoverhetmakenvanreprografischeverveelvoudigingenuitdezeuitgaveistoegestaanopgrondvanartikel 16hAuteurswetdientmendedaarvoorwettelijkverschuldigdevergoedingentevoldoenaandeStichtingReprorecht (www.reprorecht.nl).Voorhetovernemenvaneen(ofmeerdere)gedeelte(n)uitdezeuitgaveinbijvoorbeeldeen (digitale)leeromgevingofeenreaderinhetonderwijs(opgrondvanartikel16,Auteurswet1912)kanmenzich wendentotStichtingUitgeversorganisatievoorOnderwijslicenties(Postbus3060,2130KBHoofddorp, www.stichting-uvo.nl).
CONCEPT
Deuitgeverheefternaargestreefddeauteursrechtenteregelenvolgensdewettelijkebepalingen.Degenendie desondanksmenenzekererechtentekunnendoengelden,kunnenzichalsnogtotdeuitgeverwenden.
Doorhetgebruikvandezeuitgaveverklaartukennistehebbengenomenvanenakkoordtegaanmetdespecifieke productvoorwaardenenalgemenevoorwaardenvanBoomBeroepsonderwijs,tevindenop www.boomberoepsonderwijs.nl.
(ZONDERBEELD-EN TAALREDACTIE)
INHOUD 2 Inleiding 5 HetRelationeelModel 1 6 OpdrachtensetDatamodellen 1.1 13 OpdrachtensetNormalisatie 1.2 18 TheorieRelationeelModel 1.3 31 Begrippen 1.4 31 Oefentoets 1.5 32 Praktijkopdrachten 1.6 34 Terugblik 1.7 35 Toets 1.8 37 Relationeledatabases(MySQL) 2 38 OpdrachtensetSQL 2.1 52 OpdrachtensetDataDefinitionLanguage 2.2 59 OpdrachtensetDataManipulationLanguage 2.3 62 OpdrachtensetTransactionControlLanguage 2.4 63 OpdrachtensetDataQueryLanguage 2.5 73 TheorieStructuredQueryLanguage 2.6 81 Begrippen 2.7 81 Oefentoets 2.8 82 Praktijkopdrachten 2.9 84 Terugblik 2.10 85 Toets 2.11 89 Sub-queriesenStoredProgramma's 3 90 OpdrachtensetSub-queries 3.1 91 OpdrachtensetJOIN-queries 3.2 92 OpdrachtensetSTOREDPROCEDURES 3.3 96 OpdrachtensetCursorsenHandlers 3.4 97 OpdrachtensetViewsenTriggers 3.5 99 TheorieSub-queriesenStoredProgramma's 3.6 112 Begrippen 3.7 112 Oefentoets 3.8 113 Praktijkopdrachten 3.9 115 Terugblik 3.10 115 Toets 3.11 119 Niet-relationeledatabases 4 120 OpdrachtensetNoSQL 4.1 128 TheorieNiet-relationeledatabases 4.2 131 Begrippen 4.3 131 Oefentoets 4.4 132 Praktijkopdrachten 4.5 133 Terugblik 4.6 134 Toets 4.7 136 Index 4
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Blok1
HetRelationeelModel
CONCEPT
Informatieanalyseiseensystematischebenaderingvandebeschikbareinformatiebijhetbouwenvandatabases. Hetstelteenorganisatieinstaatominterneenexternegegevensteanalyserenentestructureren.Hetrelationele model(RM)iseenbenaderingvoorhetbeherenvangegevensmetbehulpvaneenstructuureneen databasemodelleringdiewordtgebruiktomeenvisueleweergavevaneeninformatiesysteemtemaken.
Leerdoelen
1. Jehebtbasiskennisvanhetrelationeelmodel.
2. Jekunteentop-downanalysemaken.
3. Jekentdenormalisatieprocessen.
(ZONDERBEELD-EN TAALREDACTIE)
4. JekuntEntiteitRelatieDiagramERD'smaken.
5. Jekuntdatabasemodellerensoftwareinstallerenengebruiken.
Opdracht1 OriëntatieopdrachtRelationeelModel
Databaseszijneenessentieelonderdeelvandeinformatiemaatschappij.Eenbedrijfofoverheidsinstantiekan nietfunctionerenzonderdatabases.
Ganaareenwebsite,bijvoorbeelddewebsitevaneenreisbureau.Welkeinformatieziejediewaarschijnlijkuit eendatabasekomt?
1.1 OpdrachtensetDatamodellen
Opdracht2 Top-down-model
RaadpleegzonodigdetheorieoverDatamodellen.
CONCEPT
a. Maakeentop-down-analysegebaseerdopdezeafbeelding.Bedenkdeentiteittypen,entiteitenenattributen.
(ZONDERBEELD-EN TAALREDACTIE)
6
b. Geefdemogelijkeattributen,PRIMARYKEYSenFOREIGNKEYSvoordegegevenentiteiten.
c. Maakdekoppelendeentiteitomdedrieentiteitenhierboventekunnenkoppelen.
CONCEPT
Opdracht3 Datamodellerings-software
RaadpleegzonodigdetheorieoverDatamodellen.
VisualStudioCodeheeftinterfacesvoorhetmodellerenvandata.VoerdevolgendestappenuitomdeERDEditor extensioninVSCodeteinstalleren.
Stap1:InstalleerVSCode
VisualStudioCodeiseencode-editordiegeoptimaliseerdisvoorhetbouwenendebuggenvanmodernewebencloudtoepassingen.VisualStudioCodeisgratisenbeschikbaaropjefavorieteplatform:Linux,macOS.en Windows.DownloadVSCodevanuitdevolgendelink:
Stap2:InstalleerdeERDEditorextension.
InstalleerdeERD-extensioninVisualStudioCode.ZoekoperdinextensionsenselecteerERDEditor.Ziefiguur:
(ZONDERBEELD-EN TAALREDACTIE)
7 Blok1 HetRelationeelModel
Stap3:Maakeenmapmetdenaamsmartshop.
MaakeenmapmetdenaamsmartshopenopenhetmetVSCode.
1. Maakeenbestandmetdenaamsmartshop.erd.
2. JezietdeERDcanvasvoorhetmakenvanERD'sverschijnen:
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
Stap4:ERDEditorcanvas.
1. Inhethoofdmenugeefdedatabasedenaamsmartshop.
2. KlikophetERD-icoonomjecanvastezien.
8
3. Klikophetdatabase-icoonomdeMySQL-codetezien.
4. Rechterklikophetcanvasomhetcanvasmenutezien.
Stap5:Maakdetabelsmartphone.
Maakeennieuwtabelmetdenaamsmartphone.Voerdevolgendestappenuit:
1. KlikmetjerechtermuisknopenselecteerNewTable.
2. Geefdetabeldenaamsmartphone.
3. KliklinksbovenophetplustekenomhetattribuutIDtemaken.
4. KlikmetjerechtermuisknopophetattribuutIDomeenprimarykey(PK)temaken.
5. Selecteercoloromdebovenrandvandetabeleenkleurtegeven.
Stap6:GeefdePrimaryKeysvandevierentiteitenaan
MaakdecompleteERDmetPrimaryKeysalsvolgt:
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
9 Blok1 HetRelationeelModel
Stap7:Hoemaakjerelaties?
Steljedevolgendetweetabellenvoor.
1. TabelklantmetPRIMARYKEYklantID.
2. TabelordermetPRIMARYKEYorderID.
Zievolgendefiguur:
(ZONDERBEELD-EN
CONCEPT
TAALREDACTIE)
10
CONCEPT
Omeenrelatietussendezetweetabellentemaken,klikjemetjerechtermuisknopopjecanvasenselecteerje Relationshipsomeenrelatietussendetweetabellentemaken.Zievolgendefiguur:
• Oméénopveelrelatietemaken,selecteerOneN.
• Klikopdetabelklant.
• Daarnaklikjeoptabelorder.
(ZONDERBEELD-EN TAALREDACTIE)
Derelatieisgemaaktzoalsindevolgendefiguur:
11 Blok1 HetRelationeelModel
RelatieszijnCONSTRAINTS
JezietdatdeFOREIGNKEYklantIDdoorderelatiewastoegevoegd.DezeFOREIGNKEYnoemenweeen CONSTRAINT.EenCONSTRAINTiseenbeperkingvandemogelijkewaardenvandezeFOREIGNKEY,metname datdeFOREIGNKEYmoetverwijzennaareenbestandeklantIDindetabelklant.AlsdezeFOREIGNKEYeenwaarde krijgtvaneennietbestandeklantIDintabelklantdankrijgjeeenCONSTRAINTerror-melding.
Stap8:VoegderelatiesaanjesmartshopERDtoe.
1. Selecteerderelatieéén-op-veel.
2. Klikopdetabelklant(derelatieverschijnt).
3. Klikopdetabelweborder(derelatiewordtgemaakt).
Voegderelatiesvoordeanderetabellentoe.Ziefiguur:
12
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
a. Isdevolgendestellingwaarofonwaar? Eentop-downmodelgaatvanspecifiekenaaralgemeneinformatie. waar onwaar
b. Koppeldebeschrijvingenaandejuisteconcepten.
Attribuut Klanteniseen...
Primarykey Klantiseen...
Entiteit KlantIDiseen
Entiteittype Klantnaamiseen
1.2 OpdrachtensetNormalisatie
Opdracht4 NormalisatiePhoneShop
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
RaadpleegzonodigdetheorieoverNormalisatie.
NaeencyberaanvalmoetDePhoneShophaareigendatabasereconstrueeren.
a. Maakhieronderdenormalisatievandenuldenormaalvormtotenmetdederdenormaalvormvande bestelgegevensvandePhoneShopuithetvolgendepapierdocument.
13 Blok1 HetRelationeelModel
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
MaakeentabelinExcelzoalshieronderenvoerdenormalisatieuit.
b. MaakeenEntiteitRelatieDiagram(ERD)metjeERDEditorinVSCodemetderelatiestussenderesulterende tabellenvandePhoneShop.
14
c. Koppelderelatiesaandebijbehorendevoorbeelden.
één-op-éénrelatie
één-op-meerrelatie
veel-op-veelrelatie
Opdracht5 NormalisatieDeWijnShop
RaadpleegzonodigdetheorieoverNormalisatie.
Eénklantmagéénofmeerbestellingenplaatsen en Eénbestellingmagdooréénofmeerklanten geplaatstworden.
Eénklantmagéénbestellingplaatsen en
Eénbestellingmagdooréénklantgeplaatst worden.
Eénklantmagéénofmeerbestellingenplaatsen en Eénbestellingmagdooréénklantgeplaatst worden.
DeWijnShopverkooptkwaliteitswijnaaneenklantenbestandmetwijnliefhebbers:
• Elkefactuurheefteenfactuurnummer.
• Elkeklantheefteenklantnummer.
• Deartikelcodeidentificeerteenuniekewijn.
DeWijnshopheeftmomenteeleenfactureringssysteemdatgebaseerdisoppapier.Hieronderziejeeenexemplaar vaneenfactuur.
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
15 Blok1 HetRelationeelModel
a. Maakdenormalisatievandenuldenormaalvormtotenmetdederdenormaalvormvandefactuurvande WijnShop.
MaakeentabelinExcelzoalshieronderenvoerdenormalisatieuit.LevereenscreenshotvanjeERDin.
(ZONDERBEELD-EN
CONCEPT
TAALREDACTIE)
b. MaakeenEntiteitRelatieDiagram(ERD)metderelatiestussenderesulterendetabellenvandeWijnShop.
LevereenscreenshotvanjeERDin.
16
Opdracht6 NormalisatieBoekhandelMaxx
BoekhandelMAXXbesteltboekenvaneenaantaluitgevers:
• Elkebestellingheefteenbestelnummer.
• Elkeuitgeverheefteenuniekuitgeversnummer.
• ISBN(InternationalStandardBookNumber)iseenunieknummerdatiedereboektitelidentificeert.
BoekhandelMAXXheeftmomenteeleenordersysteemdatgebaseerdisoppapier.Hieronderziejeeenexemplaar vaneenbestelling.
a. Maakhieronderdenormalisatievandenuldenormaalvormtotenmetdederdenormaalvormvandefactuur vanBoekhandelMaxxuithetvolgendedocument.
MaakeentabelinExcelzoalshieronderenvoerdenormalisatieuit.LeverhetExcelSheetin.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
17 Blok1 HetRelationeelModel
b. MaakeenEntiteitRelatieDiagram(ERD)metderelatiestussenderesulterendetabellenvanBoekhandelMaxx. LevereenscreenshotvanjeERDin.
1.3 TheorieRelationeelModel Datamodellen
Gegevensanalyse
TAALREDACTIE)
Informatieanalyseiseensystematischebenaderingvandebeschikbareinformatiebijhetbouwenvandatabases.
Ditisnodigvanwegedetoenemendecomplexiteitvansoftwaresystemen. Gegevensanalysestelteenorganisatie instaatominterneenexternegegevensteanalyserenenstructureren.Dezeanalyseswordengebruiktvoorde dagelijksebesturingvandeorganisatieenvoorbelangrijkebesluitvormingbinnendeorganisatie.
Deelementenvangegevensanalysezijn:
• entiteittypen
• entiteiten
• attributen
• sleutels
Databaseswordenoverhetalgemeenoptweemanierenontworpen:top-down(datwilzeggen,beginnendmet eenbedrijfsvraagenvanalgemenetotspecifiekeinformatie)ofbottom-up(beginnendmetrauwedataen toewerkendnaarinzichten).
Indithoofdstukbehandelenwedetweemethodiekenvangegevensanalysevoordatamodellering:
CONCEPT (ZONDERBEELD-EN
• Top-down-methode
• Bottom-up-methode
18
Top-down-methode
Detop-down-methode begintbijhetalgemeneengaatoverinhetspecifieke.Jebegintmeteenglobaalideevan waternodigisvoorhetsysteemenvraagtvervolgensaandeeindgebruikerswelkegegevenszemoetenopslaan.
Deanalistzalvervolgenssamenmetdegebruikersbepalenwelkegegevensindedatabasemoetenworden bewaard.
Bedrijfsvraag
Steljevoordateenbedrijfoforganisatiedevolgendebedrijfsvraagsteltvoorhetontwerpenvaneendatabase:
Deorganisatieverkooptlaptopsenwileendatabaserealiserenvoorhetopslaanvanklantenengegevensvan bestellingen.
Uitdezesimpelebedrijfsvraagkuntjedenaamwoordenlaptops,klantenenbestellingonderstrepenalsde entiteittypenofgroepeninformatiediebelangrijkvoorhetbedrijfzijn.Indevolgendefiguurziejeeenschetsvan eentop-down-modelvoordeterealiserendatabase.Beginnendmetaandetopdeentiteittypen,gevolgddoor deentiteiteneneindigendmetdeattributenvandeentiteiten.
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
19 Blok1 HetRelationeelModel
CONCEPT
Figuur 1.1
Hetmodelonderscheidtdeinformatieindriecategorieen:
1. Deinformatieisgegroepeerdinetiteittypen.
(ZONDERBEELD-EN TAALREDACTIE)
2. Eenexemplaarvaneenentiteittypeiseenentiteit.
3. Attributenzijngegevensvanentiteiten.
Eenattribuutiseen kenmerk vaneenentiteit.Naamisbijvoorbeeldeenattribuutvandeentiteitklant.
Attributen
Erzijnverschillendesoortenattributen.
20
• Simpel:eenattribuutdatnietopgesplitstkanwordeninandereattributen,zoalseenvoornaam.
• Samengesteld:eenattribuutdatkanwordenopgesplitstinandereattributen,zoalseennaamdiewordt opgesplitstinvoor-,midden-enachternaam.
• Afgeleid:eenkenmerkdatwordtberekendofbepaaldopbasisvaneenanderkenmerk,zoalsbedragenen totalen.
Jekunthetmodelverderontwerpenmetdevolgendeattributen:
Tabel 1.1
Klant
Weborder Laptop
ID ID
Naam
Merk
ID
KlantID
Datum Model Straat
Postcode
Woonplaats
Primairesleutels(primarykeys,PK)
Prijs
Eensleuteliseenattribuutdateenentiteit(uniek)identificeert.HetattribuutIDindeentiteitklantisbijvoorbeeld eenuniekeidentificatievaneenklant.Ditnoemenweeenprimarykey(PK)ofprimairesleutel
Verwijzendesleutels(foreignkeys,FK)
Hetmodelmaggeendubbelegegevenshebben.Eenweborderheeftklantgegevensnodigendeklantgegevens zijntevindeninentiteitklant.Inplaatsvandatwealleklantgegevensdubbelopschrijvenindeentiteitweborder, nemenwealleenhetattribuutklantIDop.HetattribuutIDindeentiteitklantiseenprimarykey,maarindeentiteit weborderisklantIDeenforeignkeyofverwijzendesleuteldieverwijstnaardeentiteitklant.
Koppelendentiteit
Alsjemeerlaptopsperweborderwilthebbendanmoetjeeenitems-entiteittoevoegen.Deentiteititemmoet eeneigenuniekeIDhebben.Eenbestelditemhoortbijeenwebordereneenlaptop.Deorganisatiewildater meerderelaptopsbesteldkunnenwordenperbestelling.Ziehetvolgendevoorbeeldvandekoppelendeentiteit
EntiteitRelatieDiagram(ERD)
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Datamodelleringiseengrafischeweergavevanderelaties(samenhang)tussendeentiteittypen.Dezerelaties gevenweschematischweerineenEntiteitRelatieDiagram (ERD).EenEntiteitRelatieDiagramiseenzeerabstracte beschrijvingvaneendatamodel.EenERDomvatdegrafischeelementendiejenodighebtomderelatiestussen deentiteittypeninhetdatamodeltebeschrijven.Webehandelendevolgenderelaties:
• één-op-éénrelatie
• één-op-veelrelatie
• veel-op-veelrelatie
Item ID weborderID laptopID aantal
Tabel 1.2
21 Blok1 HetRelationeelModel
Eén-op-éénrelatie(1:1)
Eenéén-op-éénrelatie iseentyperelatieinhetERDwaarbijéénentiteitaanéénandereentiteitwordttoegewezen. Eenrecord(rij)vaneenentiteitisdirectgerelateerdaaneenandererecord(rij)vaneenandereentiteit.
Bijvoorbeeld,deeersterecordinentiteitklantisgerelateerdaandetweederecordinentiteitweborder.
Tabel 1.3 klant woonplaats adres naam klantID Utrecht Kruislaan22 Albert 1 Amsterdam Middenweg6 Jane 2
Tabel 1.4 weborder
EenrefererendsleutelattribuutForeignKeyverwijstnaaréénrecord(rij)vandeandereentiteit.Inentiteitweborder verwijstdeForeignKeyklantIDindetweederijnaardePrimaryKeyIDindeeersterijvanentiteitklant.
CONCEPT
Deéén-op-éénrelatietussentweeentiteitengeefjeaanmeteenlijntussendeentiteitenenmetdeformuleof multiplicity:(1:1).
Figuur 1.2
Derelatielezenwevanlinksnaarrechtsalsvolgt:Eénklantmagéénweborderplaatsen.Derelatielezenwevan rechtsnaarlinksalsvolgt:Eénwebordermagdooréénklantgeplaatstworden.
Eén-op-veelrelatie(1:*)
(ZONDERBEELD-EN TAALREDACTIE)
Deéén-op-veelrelatieiseenrelatiewaarbijeenrecordvaneenentiteitisgerelateerdaaneenofmeerrecordsvan eenandereentiteit.Deéén-op-veelrelatietussentweeentiteitengeefjeaanmeteenlijntussendeentiteitenen metdeformule:(1:*).
datum productID klantID weborderID 01-01-2024 100 2 20 03-03-2024 300 1 21
22
Figuur 1.3
Derelatielezenwevanlinksnaarrechtsalsvolgt:Eénklantmagéénofmeerwebordersplaatsen.Derelatielezen wevanrechtsnaarlinksalsvolgt:Eénwebordermagalleendooréénklantgeplaatstworden.
Veel-op-veelrelatie(*:*)
Eenveel-op-veelrelatie iseenrelatiewaarbijveelrecordsvandeeneentiteitkunnenwordengerelateerdaan veelrecordsvaneenandereentiteit.Deveel-op-veelrelatietussentweeentiteitengeefjeaanmeteenlijntussen deentiteitenenmetdeformule:(*:*).
CONCEPT
Figuur 1.4
Derelatielezenwevanlinksnaarrechtsalsvolgt:Eénklantmagéénofmeerwebordersplaatsen.Derelatielezen wevanrechtsnaarlinksalsvolgt:Eénwebordermagdooréénofmeerklantengeplaatstworden.
Nul-optionaliteit
Eennul-optionaliteit betekentdater niet perseeenrelatiehoefttezijn.Dezerelatiegeefjeaanmeteennulnaast deentiteit.
(ZONDERBEELD-EN TAALREDACTIE)
23 Blok1 HetRelationeelModel
Figuur 1.5
Derelatielezenwevanlinksnaarrechtsalsvolgt:Eénklantmaggeen,éénofmeerwebordersplaatsen.
ERDmetrelatiesensleutels
DecompleteERDvooronzedatabasezoueralsvolgtuitzien:
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
Figuur 1.6
DedrierelatiesindezeERDkuntjealsvolgtlezen:
• Eenklantmageenofmeerwebordersplaatseneneenwebordermagbesteldwordendoorenkeleenklant.
• Eenwebordermaguiteenofmeeritemsbestaaneneenitemhoortbijenkeleenweborder.
• Eenlaptopmagineenofmeeritemsbesteldwordeneneenitemhoortbijenkeleenlaptop.
24
Normalisatie
Normalisereniseenbottom-up-aanpakomvanuitbekendeinformatieeengegevensmodelteontwerpen.Door hetnormaliserenvangegevensvoorkomjedrieproblemen:
• Overbodigegegevens:datzijngegevensdiemeermaleningevoerdmoetenworden.
• Inconsistentie:steldathetadresvaneenklantverandertendatdezewijzigingopmeerdereplaatsenmoet wordendoorgevoerd.Alsdatnietgoedgebeurt,heeftditeeninconsistente(tegenstrijdige)gegevensverzameling totgevolg.
• Inefficiëntie:hetiszeerinefficiëntomdezelfdegegevensopmeerdereplaatsenbijtehouden.
Ditsoortproblemen(overbodige,inconsistenteeninefficiëntegegevens)kanwordenvoorkomenmetnormaliseren.
Soortengegevens
Erzijnviersoortengegevens:
1. Constantegegevens:ditzijngegevensdiezeldengewijzigdworden,bijvoorbeeldnaamenadresgegevens vaneenbedrijfofeenbtw-percentage.
2. Procesgegevens:procesgegevenskunnenuitanderegegevensafgeleidworden,bijvoorbeeld:bedragof totaal.
3. Elementairegegevens:datzijnalleanderegegevens,zoalsklant-ofproductgegeens.
4. Binnendeelementairegegevensvindenwerepeterendegegevens:datzijnherhalendegegevens.
Inhetvolgendedocumentziejedeviersoorten.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
25 Blok1 HetRelationeelModel
Figuur 1.7
Normalisatieprocessen
Normalisereniseenbottom-up-aanpakomeengegevensmodelteontwerpenvanuitbekendeinformatie.
DeVinylShop
BijdevolgendeprocessengaanwedegegevensuiteenpapierendocumentvanhetVinylShopbedrijfgebruiken omeendatabasetemodelleren.DeVinylShopiseenretrobedrijfdatvinylplatenviaeenwebsiteverkoopt.Hier iseenpapierenexemplaarvaneenbestelling:
Figuur 1.8
Voorhetnormalisatieprocesbeschrijfjedebeschikbaregegevensineentabel.Jeletopherhalendegegevens. Dezegegevensnoemenwederepeterendegroep.Hetnormalisatieproceskentdevolgendevormen:
• nuldenormaalvorm
• eerstenormaalvorm
• tweedenormaalvorm
• derdenormaalvorm
Nuldenormaalvorm(0NV)
Denuldenormaalvormmakenweindriestappen:
Stap 1: Maakeentabelmetalleendeelementairegegevens.Constantegegevenszoalsbedrijfsadresen telefoonnummerneemjenietmee.Ookprocesgegevenszoalsbedragenentotalenneemjenietmee.
Stap 2: Geefderepeterendegroepaan.Ineenbestellingkunnenmeerderealbumtitelswordenbesteld.Albums isderepeterendegroep(RG).
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Stap 3:Geefdeprimairesleutelaan(PK).Eenprimairesleutelidentificeerteenuniekeentiteit.Inditgeval identificeert bestellingID eenuniekebestelling.
26
Figuur 1.9
Omvandenuldenormaalvormnaardeeerstenormaalvormtegaan,zijntweestappennodig.
Deeerstenormaalvorm(1NV)
Stap 1:Maakeentweedetabelmetderepeterendegroeppluseenkopievandeprimairesleutel.Dezesleutel wordteenforeignkey(FK),ofverwijzendesleutel,envormtdekoppelingtussendetweetabellen.
Stap 2:Bepaaldesamengesteldesleutel(tweeofmeersleutels)vandetweedetabel.Hiermaakjebijvoorbeeld eentweedetabelmeteenkopievan bestellingID plusderepeterendegroep(RG).Vervolgensmaakjeeen samengesteldesleutelmet bestellingID plus albumID.Inditgevalidentificeertonzesamengesteldesleuteleen albumuniekineenbestellingintabel2.
(ZONDERBEELD-EN TAALREDACTIE)
27 Blok1 HetRelationeelModel
CONCEPT
Figuur 1.10
Detweedenormaalvorm(2NV)
Stap 1: Maakeenderdetabelmeteenkopievanhettweededeelvandesamengesteldesleutelindetweedetabel plusdebijbehorendeattributen.Hettweededeelvandesamengesteldesleutelis albumID Debijbehorende attributenzijn titel, artiest, genre, en prijs. Aantalhoortnietbij albumID, welbij bestellingID.
CONCEPT
Stap 2: Dezesleutel albumID vormtdekoppelingtussentabel2entabel3.
(ZONDERBEELD-EN TAALREDACTIE)
28
Figuur 1.11
Dederdenormaalvorm(3NV)
Stap 1: Kijkofereentabelisdieverderopgesplitstkanworden.
Stap 2: Alsdatzois,maakjeeenvierdetabelmetdeovertolligeattributen.
CONCEPT
Stap 3: Maakeenkoppelingtussendetweetabellenmeteenprimairesleuteleneenverwijzendesleutel.
Bijvoorbeeld,tabel1bevatzowelklant-alsbestelgegevens.Indevolgendestapsplitsenwetabel1intabel1en tabel4.
(ZONDERBEELD-EN TAALREDACTIE)
29 Blok1 HetRelationeelModel
Figuur 1.12
Hetresultaatistabel4met klantID enbijbehorendeattributenvandeklant.Maak klantID deprimarykeyintabel 4endeforeignkeyintabel1.
Bijhetbenoemenvandetabellenkijkenwepertabelnaardeinhoud.Wezien:
• tabel1isdetabelbestelling;
• tabel2isdetabelitem;
• tabel3isdetabelalbum;
• tabel4isdetabelklant.
Samenvatting
IneendatamodelmogenwePrimaryKeysenForeignKeyskopiërenomdetabellentekunnenlinken,maarwe mogengeendubbelegegevenshebben.Wemogenbijvoorbeeldgeenalbumgegevensineentweedeofderde tabelhebben.Alseengegevengewijzigdmoetworden,dandoenwedatmaarinééntabel.
Zozorgenweervoordatdegegevensaltijdconsistentzijn.Eriseenuitzonderingophetnietkopiërenvangegevens –datzijnprijzen.Bijvoorbeeldbijdetabelitemisde verkoopprijs eenkopievande prijs indetabelalbum We moetenonderscheidmakentussende prijs vaneenalbumende verkoopprijs,hetkanzijndatdooreenspeciale verkoopactiede verkoopprijs andersisdandevasteprijs.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Bovenstaandproceskunjeookalsvolgtsamenvatten:
• bestelling(bestellingID,klantID,datum)
• item(itemID, bestellingID, albumID,verkoopprijs,aantal)
• album(albumID,titel,artiest,genre,prijs)
• klant(klantID,naam,straat,postcode,woonplaats,e-mail)
30
ERD
HetERDvoordeVinylShopzieteralsvolguit:
1.4 Begrippen
1.5 Oefentoets
Opdracht7
Watiseen kenmerk vaneenentiteit?
Entiteit
Attribuut
Entiteittype
Sleutel
Opdracht8
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
Welkevandevolgendeantwoordmogelijkhedenzijnvoorbeeldenvanattributen?Erzijnmeeredereantwoorden goed.
Naam
Geboortedatum
Curriculum
Woonplaats
Factuur
Figuur 1.13
31 Blok1 HetRelationeelModel
Opdracht9
Koppeldebegrippenaandebijbehorendeomschrijving.
Primarykey
Foreignkey
Entiteit
Attribuut
Opdracht10
iseen kenmerk vaneenentiteit
iseenexemplaarvaneenentiteittype
iseenkeydieverwijstnaareenentiteit
iseenattribuutdateen entiteit(uniek)identificeert.
Welkemethodeiseenbottom-up-aanpakomvanuitbekendeinformatieeengegevensmodelteontwerpen?
Top-down-methode
Normalisatie-methode
Normalisatie-Up-methode
Opdracht11
Watzijnrepeterendegegevens?
Eenanderwoordvoorrepeterendegegevensis gegevens.
Opdracht12
Watzijnconstantegegevens?
CONCEPT
Constantegegevenszijngegevensdie gewijzigdworden.
Opdracht13
Watzijnprocesgegevens?
Procesgegevenskunnenuitanderegegevens worden.
1.6 Praktijkopdrachten
Opdracht14 Top-downanalyse
(ZONDERBEELD-EN TAALREDACTIE)
a. Maakeentop-down-analysevooreendatabaseroostermetdevolgendeentiteittypen:
• Studenten
• Vakken
• Docenten
• Roosters
32
Benoemdeattributenengeefdeprimaireenverwijzendesleutelsaan.
b. Maakdekoppelendeentiteit.
Opdracht15 Normalisatieanalyse
Tele-4wileennieuwfactureringssysteemintroducerenzoalsindevolgendefiguur.
a. Maakhieronderdenormalisatievandenuldenormaalvormtotenmetdederdenormaalvormvandefactuur vanTele-4uithetvolgendedocument.
CONCEPT
MaakeentabelinExcelzoalshieronderenvoerdenormalisatieuit.
(ZONDERBEELD-EN TAALREDACTIE)
33 Blok1 HetRelationeelModel
b. MaakeenEntiteitRelatieDiagram(ERD)metderelatiestussenderesulterendetabellenvanTele-4.
1.7 Terugblik
Opdracht16 Terugblik
Zeteenkruisjeindekolomdievoorjouvantoepassingis. Nee Ja
Beoordelingscriteria
Jehebtbasiskennisvanhetrelationeelmodel.
Jekunteentop-downanalysemaken.
Jekentdenormalisatieprocessen.
JekuntEntiteitRelatieDiagramERD'smaken.
Jekuntdatabasemodellerensoftwareinstallerenengebruiken.
Opdracht17 Terugblik
Denknaoverwatjehebtgedaaninditblok.
a. Noemtweedingenwaaroverjetevredenbent.
1.
2.
b. Noemtweedingendiejedevolgendekeeranderswiltdoen.
1.
2.
34
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
c. Vraagjedocenten/ofleermeesteromfeedback.
Tops: Tips:
1.8 Toets
Opdracht18
Watnoemenweeenexemplaarvaneenentiteittype?
Entiteitype
Attribuut
Entiteit
Sleutel
Opdracht19
Welkezijndeverschillendesoortenattributen?Erzijnmeerdereantwoordengoed.
Simpele
Complex
Samengesteld
Afgeleid
Opdracht20
Koppelderelatiesaandebijbehorendeomschrijving.
één-op-éénrelatie
één-op-veelrelatie
Eenrelatiewaarbijveelrecordsvandeeneentiteit kunnenwordengerelateerdaanveelrecordsvan eenandereentiteit
Eenrelatiewaarbijeenrecordvaneenentiteitis gerelateerdaaneenofmeerrecordsvaneen andereentiteit
Eenrelatiewaarbijeenrecordvaneenentiteitis gerelateerdaaneenrecordvaneenandereentiteit veel-op-veelrelatie
Opdracht21
Detop-down-methodebegintbijhetalgemeneengaatoverinhetspecifieke.Plaatsdevolgendeconceptenin dejuistevolgordevanalgemeennaarspecifiek.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Entiteittype
Entiteit
Attribuut
35 Blok1 HetRelationeelModel
Database
Opdracht22
Welkevandevolgendezijnvoorbeeldenvanprocesgegevens?Erzijnmeerdereantwoordengoed.
naam
woonplaats
bedrag
prijs
totaal
bestellingnummer
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
36
Blok2
CONCEPT
Relationeledatabases(MySQL)
SQLiseenalgemeneprogrammeertaaldiehetmogelijkmaaktgegevensineendatabasetezettenofgegevens optehalen.SQLwordtgebruiktomgegevenstusseneenapplicatieeneendatabaseuittewisselenentebewerken.
Leerdoelen
1. JekuntdatabasestructurenmakenmetdeDataDefinitionLanguage.
2. JekuntdatabasegegevensmanipulerenmetdeDataManipulationLanguage.
3. JekuntgegevensuitdedatabasehalenenordenenmetdeDataQueryLanguage.
4. JekunttransactiesbeïnvloedenmetdeTransactionControlLanguage.
(ZONDERBEELD-EN TAALREDACTIE)
Opdracht1 OriëntatieopdrachtMySQL
Kritieketransactieswaarbijietsmiskangaankunnenongedaangemaaktworden.Noemeenvoorbeeldvaneen kritieketransactieineendatabase.
2.1 OpdrachtensetSQL
Opdracht2 InstalleerMySQL8.XServer
Stap1:DownloadMySQLinstaller
IndezeeerstestapgajeMySQL8.0ofhogerdownloaden.KlikopdevolgendelinkomdeMySQL8.xinstallerte downloaden
KlikopdelinkinBoomDigitaalomMySQLinstallertedownloaden. GanaardepaginavoordeMySQLCommunityServer8.x.Jezietdevolgendepagina.KlikopGotoDownload
Page.Zievolgendefiguur:
Stap2:MySQLinstaller
CONCEPT
KlikopSelectVersionenopSelectOperatingSystemomdejuisteinstallerteselecteren.KlikopDownloadom deexecutableInstallertedownloaden.
(ZONDERBEELD-EN TAALREDACTIE)
38
Stap3:MySQLCommunityDownloads
OpdevolgendepaginaklikjeopNothanks,juststartmydownload.
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
39 Blok2 Relationeledatabases(MySQL)
Stap4:SelectProducts SelecteerinAvailableProductsdeMySQLServer8.xenklikophetgroenepijltjeomdeserverteverplaatsennaar ProductsToBeInstalled.
DaarnaklikjeopNextengajenaardevolgendestap.
(ZONDERBEELD-EN
CONCEPT
TAALREDACTIE)
40
Stap5:TypeandNetworking
OpdevolgendepaginakiesjevooreenDevelopmentComputerserverendevolgendepoorten:
• Port3306voorjeMySql8.xserver
• Port33060voordeXProtocolserver.
CONCEPT
DeMySQLserverpoortisvoorMySQL-databasesendeXProtocolserverpoortisvoordeDocumentStore-databases.
DaarnaklikjeopNextengajenaardevolgendestap.
(ZONDERBEELD-EN TAALREDACTIE)
41 Blok2 Relationeledatabases(MySQL)
Stap6:AuthenticationMethod
OpdezepaginakiesjevoorUseStrongPasswordforAuthentication.
DaarnaklikjeopNextengajenaardevolgendestap
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
42
Stap7:WindowService
IndezestapklikjeopNextengajenaardevolgendestap.
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
43 Blok2 Relationeledatabases(MySQL)
Stap8:ServerFilePermissions
Opdezepaginakiesjevoorgrantfullaccesstotheuser.
DaarnaklikjeopNextengajenaardevolgendestap.
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
44
Stap9:ApplyConfiguration
OpdezepaginaklikjeopExecuteomdeconfigutatiouittevoeren.
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
45 Blok2 Relationeledatabases(MySQL)
Stap10:ProductConfiguration
OpdezepaginaklikjeopNextomdeMySQLServerteconfigureren.
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
46
Stap11:InstallationComplete
Alsallesgoedverloopt,krijgjedeInstallationComplete-paginatezien.
KlikopFinish.
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
47 Blok2 Relationeledatabases(MySQL)
MySQL80servicestoppeninWindows
JeMySQL80serviceisnuactief.AlsjeeenandereversievanMySQLwiltstarten,moetjeeerstversie8.0stoppen. InWindowsdoejeditinvierstappen.
StoppenenenstartenmetMySQL8xservice
• 1.
• 2.
• 3.
• 4.
CONCEPT
DrukopWindows+Romhetopdrachtpromptdialoogvensterteopenen.
Typ cmd endrukopCtrl+Shift+Enteromdeopdrachtpromptalsbeheerderuittevoeren.
OmMySQLservicetestoppentyphetvolgende net stop MySQL80
OmMySQLserviceoptestartentyphetvolgende net start MySQL80
Zievolgendefiguur.
(ZONDERBEELD-EN TAALREDACTIE)
48
MySQL80stoppeniniMac
AlsjeMySQLhebtgeïnstalleerdmetHomebrew,typjehetvolgendeinjeterminalomjeMySQL80serviceiniMac testoppen: brew services stop mysql
OmjeMySQL80serviceiniMacoptestarten,typjehetvolgendeinjeterminal: brew services start mysql
Eenrestartdoejezo: brew services restart mysql
Opdracht3 InstalleerMySQLShell
MySQLShelliseeninteractieveinterfacevoorSQLdieJavaScriptenPythonondersteunt.JekuntMySQLShell gebruikenomprototypesvanapplicatiestemaken,query'suittevoerenengegevensbijtewerken.
OmdeopdrachtenmetSQL-commando'steoefenen,moetjeeerstdeMySQLShellinstallereninjeVSCode.Voer devolgendestappenuit:
Stap1:InstalleerMySQLShell.
CONCEPT
1. Klikophetextensions-icooninjeVSCode.
ZoekopMySQLShellindezoekbalk.
(ZONDERBEELD-EN TAALREDACTIE)
49 Blok2 Relationeledatabases(MySQL)
Stap2:MaakeennieuweverbindingmetjeMySQL-server. OmeenverbindingtemakentussenjelocalhostMySQL-serverenMySQLShell,voerjedevolgendedriestappen uit:
1. KlikopheticoonvandeMySQLShellaandelinkerkantvanVSCode.
2. KlikopDBConnection.
3. KlikdaarnaopNewConnection.
Zievolgendefiguur:
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
Stap3:DatabaseConnectionConfiguration
HetDatabaseConnectionConfigurationschermverschijnt.
VoerjeUserNamein(rootisdedefaultUsernane)enklikopOK.
50
Stap3:OpenMySQLConnection
Omjeverbindingteopenen,typjejewachtwoordin.HetwachtwoordhebjetijdensdeinstallatievanMySQL aangemaakt.
CONCEPT
HiercreëerjeeenNewConnection1tussenMySQLShellenjeMySQL-server.Jenieuweverbindingcreëerteen
(ZONDERBEELD-EN TAALREDACTIE)
DBNotebookvoorhetcoderenenuitvoerenvanjeSQL-opdrachtenuitditboek.Ziefiguur:
51 Blok2 Relationeledatabases(MySQL)
1. JezietdeNewConnectionverschijnenaandelinkerkant(zieeersterodepijl).Klikopdehetzwartepijlpunt omdeDBNotebookteopenen.
2. JezietookeennieuwetabmetdeDBNotebookwaarjedeSQL-opdrachtengaatcoderen.JezaljeSQLcode uitvoerendoorophetflitsicoonopteklikken(zietweederodepijl)ofdooropCTRL-ENTERtedrukken.
2.2 OpdrachtensetDataDefinitionLanguage
Opdracht4 CREATEDATABASE
RaadpleegzonodigdetheorieoverDataDefinitionLanguage.
IndezeopdrachtgajeoefenenmethetcoderenvanDDL-code.
Creëerdedatabasemetdenaamdemo.
InjeDBNotebookgajedevolgendedrieregelsSQLcoderen:
Dezecodezaldedatabasedemoverwijderen,alsdiealbestaat,eneennieuwedatabasecreëren.Met USE demo;openjededatabasedemo.Jekuntmaarééndatabasetegelijkopenen.
DROP DATABASE IF EXISTS demo;
CREATE DATABASE demo;
USE demo;
Codeerenvoerdecodeuit.Zievolgendefiguur:
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
• Inhetgrijzeblokziejehetresultaatvandeuitgevoerdecode.
• Klikophetrefresh-ikoonlinksboven.Jezietdeaangemaaktedatabasedemo.
52
Opdracht5 CREATETABLE
Eennieuwetabelmaken
Voerdevolgendestappenuitomeennieuwetabelaanjedemodatabasetoetevoegen.
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• Klikophetrefresh-icoonaandelinkerkant.Jezietdeaangemaaktetabelindedatabasedemo.
Opdracht6 RENAMETABLE
Eentabelhernoemen
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• Klikophetrefresh-icoonaandelinkerkant.Jezietdatdenaamvantabel1intabel2isgewijzigd.
Opdracht7 ALTERTABLE
Eennieuwetabelkolomcreëren
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
53 Blok2 Relationeledatabases(MySQL)
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• Klikophetrefresh-icoonaandelinkerkant.Jezietdatkolom3istoegevoegd.
Eentabelkolomverwijderen
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• Klikophetrefresh-icoonaandelinkerkant.Jezietdatkolom1isverwijderd.
Eenkolomhernoemen
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• Klikophetrefresh-icoonaandelinkerkant.Jezietdatdenaamvankolom2inIDisgewijzigd.
EenPRIMARYKEYmaken
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
54
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• JezietdatdeeersteendetweedeSQL-opdrachtensuccesvolzijnuitgevoerd.
EenPRIMARYKEYverwijderen
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerd.
• JezietdatdeeersteendetweedeSQL-opdrachtenmetsucceszijnuitgevoerd.
Opdracht8 CREATEINDEX
CONCEPT
Hetmakenvaneenindexiseenmanieromdeprestatiesvandedatabaseteoptimaliserendoorhetophalenvan gegevensteversnellen.
EenINDEXmaken
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
(ZONDERBEELD-EN TAALREDACTIE)
55 Blok2 Relationeledatabases(MySQL)
Opdracht9 Smartshopdatabase
IndevolgendeopdrachtencreëerjededatabasesmartshopmetdecodediegegenereerdwordtdoorjeERDin jeERDEditor.Voerdevolgendestappenuit:
Stap1:Databasesmartshopcreëren
MaakeenverbindingmetjedatabaseserverenopeneennieuwDBNotebook.Codeerdevolgendedrieregels MySQL-code:
DROP DATABASE IF EXISTS smartshop;
CREATE DATABASE smartshop; USE smartshop;
Dezecodezaldedatabasesmartshopverwijderenalsdiealbestaateneennieuwedatabasecreëren.Met USE smartshop;openjededatabasesmartshop.
Stap2:GenereerSQLcodeuitjeERDdiagram
InjeERDEditoropenhetbestandsmartshop.erdenjekliktophetdatabase-icoonomdeMySQLcodetegenereren. DezecodeisgebaseerdopjeERD-diagramencreëertdeviertabellen.
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
Stap3:VoerdegegenereerdeMySQLcodeuit
DegegenereerdeMySQL-codeziejehieronder.
56
CREATE DATABASE smartshop; USE smartshop;
CREATE TABLE item( itemID INT(3) NOT NULL AUTO_INCREMENT, prijs DECIMAL(6,2) NOT NULL, weborderID INT(3) NOT NULL, phoneID INT(3) NOT NULL, aantal INT(3) NOT NULL,
PRIMARY KEY (itemID));
CREATE TABLE klant( klantID INT(3) NOT NULL AUTO_INCREMENT, naam VARCHAR(20) NOT NULL, email VARCHAR(30) NOT NULL, straat VARCHAR(30) NOT NULL, postcode VARCHAR(6) NOT NULL, woonplaats VARCHAR(30) NOT NULL,
PRIMARY KEY (klantID));
CREATE TABLE smartphone( phoneID INT(3) NOT NULL AUTO_INCREMENT, merk VARCHAR(20) NOT NULL, model VARCHAR(20) NOT NULL, GB INT(3) NOT NULL, prijs DECIMAL(6,2) NOT NULL,
PRIMARY KEY (phoneID));
CREATE TABLE weborder( weborderID INT(3) NOT NULL AUTO_INCREMENT, datum DATETIME NOT NULL, klantID INT(3),
PRIMARY KEY (weborderID));
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
ALTER TABLE weborder
ADD CONSTRAINT FK_klant_TO_weborder
FOREIGN KEY (klantID)
REFERENCES klant (klantID);
57 Blok2 Relationeledatabases(MySQL)
ALTER TABLE item
ADD CONSTRAINT FK_weborder_TO_item
FOREIGN KEY (weborderID)
REFERENCES weborder (weborderID);
ALTER TABLE item
ADD CONSTRAINT FK_smartphone_TO_item
FOREIGN KEY (phoneID)
REFERENCES smartphone (phoneID);
Stap4:CONSTRAINTS
SQL-CONSTRAINTSgebruikjeombepaaldevoorwaardenenregelsaanjegegevensopteleggen,zodatjede nauwkeurigheidenvolledigheidervankuntgaranderen.HierbovenziejedrieCONSTRAINTSvoorFOREIGNKEY's. BijvoorbeelddevolgendeCONSTRAINT:
ALTER TABLE weborder
ADD CONSTRAINT FK_klant_TO_weborder
FOREIGN KEY (klantID)
REFERENCES klant (klantID);
DezeCONSTRAINTsteltdatdewaardevandeFOREIGNKEYklantIDindetabelwebordermoetverwijzennaar eenbestandeklantIDindetabelklant.Alsdatnietzois,dankrijgjeeenCONSTRAINT-error.
Stap5:Creëerdesmartshopdatabase
KopieerjegegenereerdeSQL-codeenplakdezeinjeDBNotebookinMySQLShell.Voerdecodeuitdoorophet flitsicoonopteklikken(zierechterrodepijl).Jezietaandelinkerkantdatdedatabasesmartshopisgemaakt(zie linkerrodepijl).Alsjefoutmeldingenkrijgt,losdandefoutmeldingeneerstopenvoerdecodeweeruit.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
58
2.3 OpdrachtensetDataManipulationLanguage
Opdracht10 INSERTrij
RaadpleegzonodigdetheorieoverDataManipulationLanguage.
INSERTklantengegevens
IndezeopdrachtenoefentjemetDataManipulationLanguage.Voegdevolgendegegevensaandeklanttabel toe.
naam
Lex
Miranda
Camila
Jane
postcode straat email
woonplaats
Utrecht 4656RR Hogestraat24 lex@live.nl
Amsterdam 1092RX Middenweg2 ma@gmail.com
Rotterdam 5556RR Kruislaan356 cam@live.nl
Amsterdam 9879AW Polderstraat498 jane@live.nl
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
CONCEPT
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerdendatervierrijenzijntoegevoegd.
SELECTalleklanten
Omtetestenofalleklantenzijntoegevoegd,voerjedevolgendeSELECT-opdrachtuit.
(ZONDERBEELD-EN TAALREDACTIE)
• Inhetgrijzeblokziejedatdequerysuccesvolisuitgevoerdendecompletetabelwordtweergegeven.
• JezietdatdekolomklantIDautomatischisingevoerd,wanthetisalsAUTOINCREMENTgedefinieerd.
59 Blok2 Relationeledatabases(MySQL)
Opdracht11 UPDATErij
UPDATEtabelklant
CodeerenvoerdevolgendecodeuitinjeMySQLShell.
• VoerdeUPDATE-opdrachtuitomdeemailvanklantLexteupdaten.
• VoerdaarnadeSELECT-opdrachtomdegeüpdatetetabeltezien.
• JezietdatdekolomemailvanklantmetID=1isgeüpdatet.
Opdracht12 DELETErij
Voegeennieuweklanttoemetdenaam test
Voerdevolgendeopdrachtuitomdeklantmetdenaamtestteverwijderen.
DELETE FROM klant WHERE naam = 'test';
Opdracht13 DMLtabelsmartphone
Indezeopdrachtgajedevolgendegegevensineentabelmetdenaamsmartphonemaken.
Detabelsmartphone Prijs GB Model Merk 99.00 64 MotoE13 Motorola 279.00 128 GalaxyA23 Samsung 82.00 32 C02 Nokia 99.00 32 MotoE20 Motorola 154.99 128 G21 Nokia 60
CONCEPT
(ZONDERBEELD-EN TAALREDACTIE)
Hetresultaatmoethetvolgendezijn:
Opdracht14 DMLtabelweborder
Indezeopdrachtgajedevolgendegegevensindetabelwebordertoevoegen.
Detabelweborder
CONCEPT
Hetresultaatmoethetvolgendezijn.
(ZONDERBEELD-EN TAALREDACTIE)
VoerdeMySQLopdrachtuitdiededezegegevensaandetabelsmartphonetoevoegt.
date klantID weborderID 2024-01-01 1 1 2024-01-01 1 2 2024-02-05 2 3 2024-02-21 3 4 2024-02-21 3 5
VoerdeMySQLopdrachtuitdiedezegegevensaandetabelwebordertoevoegt.
61 Blok2 Relationeledatabases(MySQL)
Opdracht15 DMLtabelitem
Indezeopdrachtgajedevolgendegegevensindetabelitemtoevoegen.
Detabelitem
VoerdeMySQLopdrachtuitdiededezegegevensindetabelitemtoevoegt.
Hetresultaatmoethetvolgendezijn.
CONCEPT
2.4 OpdrachtensetTransactionControlLanguage
Opdracht16 STARTTRANSACTION
(ZONDERBEELD-EN TAALREDACTIE)
RaadpleegzonodigdetheorieoverTransactionControlLanguage. STARTeentransactie
AlsjemeerdereMySQL-opdrachtenalseentransactiewiltuitvoeren,startjeeentransactiemetSTART TRANSACTION.DitdoejealsjekritischeopdrachtenzoalsDELETEwiltuitvoerenzodatjezonodigdieongedaan kuntmakenmetROLLBACK.MaareerstmoetjeautocommitopFALSEzetten.
• VoerdeDELETE-opdrachtuitomdeklantmetid=4tedeleten.
• VoerdaarnadeSELECT-opdrachtomdegeüpdatetetabeltezien.
aantal phoneID weborderID itemID 10 1 1 1 2 5 1 2 10 2 2 3 3 3 2 4 1 1 3 5 6 5 3 6 10 4 4 7 3 1 5 8
62
• JezietdatklantmetID=4isverwijderd.
Opdracht17 ROLLBACK
ROLLBACKdeDELETE-opdracht
• VoerdeROLLBACK-opdrachtuitomdeDELETE-opdrachtongedaantemaken.
• VoerdaarnadeSELECT-opdrachtuitomdegeüpdatetetabeltezien.
CONCEPT
• JezietdatdeDELETE-opdrachtongedaanis.
Opdracht18 COMMIT
DeCOMMIT-opdrachtzaldevorigetransactiecommiterenendetransactiezalnietmeerongedaangemaakt wordenmetdeROLLBACK-opdracht.VoerdeCOMMIT-opdrachtinMySQLShelluit.
2.5 OpdrachtensetDataQueryLanguage
Opdracht19 SELECTklanten
(ZONDERBEELD-EN TAALREDACTIE)
RaadpleegzonodigdetheorieoverDataQueryLanguage.
IndezeopdrachtenvoerjeSELECT-opdrachtenvoordeklanttabeluit.
StartMySQLShell.OpendedatabasesmartshopenvoerdevolgendeSQL-opdrachtenuit.
Geefalsantwoorddecodediejegebruikthebtomdeopdrachtuittevoeren.
63 Blok2 Relationeledatabases(MySQL)
SELECT
DeopdrachtSELECTwordtgebruiktomrijenuiteentabeloptehalen.
Syntaxis
SELECT kolomnaam [, kolomnaam ...]
FROM tabelnaam;
a. OpenjeSQLShellencodeerdeSQL-opdrachtomallerijenintabelklantweertegeven.
Hetresultaatmoethetvolgendezijn.
SELECTDISTINCT
DeopdrachtSELECTDISTINCTwordtgebruiktomalleenonderscheidende(verschillende)waardenteretourneren.
Syntaxis
SELECT DISTINCT kolomnaam [, kolomnaam ...]
FROM tabelnaam;
b. VoerdevolgendeSQL-opdrachtomallewoonplatsenvandeklantenteselecteren.Selecteergeendubbele woonplaatsen.
ErzijntweeklantenmetAmsterdamalswoonplaats,maardeSELECTDISTINCT-opdrachtselecteertenkeléén Amsterdaminplaatsvantwee.
64
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
SELECTAS
DeopdrachtSELECTASwordtgebruiktomdenamenvankolommenmeteenaliasweertegeven.
Syntaxis
SELECT kolomnaam AS alias [, kolomnaam AS alias ...]
FROM tabelnaam;
c. VoerdeSQL-opdrachtuitomdekolomstraatmetdealiasadresteselecteren.
Hetresultaatmoethetvolgendezijn.
CONCEPT
SELECTWHERE
DeSELECTWHEREopdrachtselecteertderijenuiteentabeldieaaneenvoorwaardevoldoen.
Syntaxis
SELECT kolomnaam [, kolomnaam ...]
FROM tabelnaam
WHERE kolomnaam operator voorwaarde;
(ZONDERBEELD-EN TAALREDACTIE)
d. Voerdeopdrachtuitomalleklantenmetwoonplaats'Amsterdam'tevinden.
65 Blok2 Relationeledatabases(MySQL)
Devoorwaardeisdatwoonplaats'Amsterdam'is.Vergelijkingenzijnniet-hoofdlettergevoelig.Devergelijking woonplaats='amsterdam'geefthetzelfderesultaatals'Amsterdam'.
Hetresultaatzieteralsvolgtuit.
VergelijkingeninMySQLdoejemetdevolgendeoperatoren:
Vergelijkingsoperatoren
Beschrijving Operator
Gelijkaan
= Nietgelijkaan <>
Groterdan >
Kleinerdan <
Groterofgelijkaan >=
Kleinerofgelijkaan <=
SELECTCOUNT
DeSELECTCOUNTopdrachttelthetaantalrijenineentabel.Jekuntookeenvoorwaardespecificeren.
Syntaxis
SELECT COUNT(kolomnaam)
FROM tabelnaam [WHERE voorwaarde];
CONCEPT
e. Voerdeopdrachtuitomhetaantalrijenindetabelklantoptetellen.
Hetresultaatzieteralsvolgtuit.
(ZONDERBEELD-EN TAALREDACTIE)
SELECTCOUNTGROUPBY
DeSELECTGROUPBYopdrachtselecteertrijeningroepen.
66
Syntaxis
SELECT COUNT(kolomnaam) [, kolomnaam ...]
FROM tabelnaam
GROUP BY kolomnaam;
f. Voerdedeopdrachtuitomdewoonplaatsentegroeperenenpergroepoptellen.
Hetresultaatziejehieronder.
SELECTORDERBY[asc][desc]
DeORDERBYselecteerrijeninoplopendeofaflopendevolgorde.
Syntaxis
SELECT kolomnaam [, kolomnaam ...]
FROM tabelnaam
ORDER BY kolomnaam;
g. Voerdedeopdrachtuitomalleklantenteselecteren,geordendinalfabetischevolgorde[asc],watdede defaultis.Voordeaflopendevolgordegebruikje[desc].
Inhetresultaatziejedatdenameninalfabetischevolgordezijnweergegeven.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
67 Blok2 Relationeledatabases(MySQL)
SELECTHAVINGLIKE
DeSELECTHAVINGLIKE-opdrachtselecteertderijendieeengegevenstringofsubstringbevatten.
Syntaxis
SELECT kolomnaam [, kolomnaam ...]
FROM tabelnaam
HAVING kolomnaan LIKE '%waarde%';
h. Voerdeopdrachtuitomalleklantenteselecterenwaardee-maildewaarde'gmail'heeft.
Hetresultaattoontalleklantenmeteengmail-account.
CONCEPT
TAALREDACTIE)
SELECTBETWEENAND
DeSELECTBETWEEN-opdrachtselecteertrijenwaareenkolomeenwaardebinneneenbepaaldbereikbevat.
Syntaxis
SELECT kolomnaam [, kolomnaam ]
FROM tabelnaam
WHERE kolomnaam
BETWEEN 'lage waarde' AND 'hoge waarde';
(ZONDERBEELD-EN
i. Voerdeopdrachtuitomalleklantenmeteenpostcodetussen1000en5000teselecteren.
68
Hetresultaatziejehieronder.
SELECTLIMIT
DeSELECTLIMITopdrachtgeeftmaximaaleenaantalrijenweer.
Syntaxis
SELECT kolomnaam [, kolomnaam ...]
FROM tabelnaam
LIMIT getal;
j. Voerdeopdrachtuitomklantenteselecteren,hetresultaatmoetmaximaaltweerijenweergeven.
Inhetresultaatziejealleendeeerstetweerijen.
CONCEPT
Opdracht20
SELECTsmartphones
IndezeopdrachtenoefenjeSELECT-opdrachtenvoordesmartphone-tabel.
StartMySQLShell.OpendedatabasesmartshopenvoerdevolgendeSQL-opdrachtenuit.
Geefalsantwoorddecodediejegebruikthebtomdeopdrachtuittevoeren.
SELECTMIN
(ZONDERBEELD-EN TAALREDACTIE)
Dezeopdrachtgeeftalsresultaatdelaagstewaardeindegegevenkolomnaam.
69 Blok2 Relationeledatabases(MySQL)
Syntaxis
SELECT MIN(kolomnaam)
FROM tabelnaam;
a. Selecteerdelaagstetelefoonprijsindetabelsmartphone.Hetresultaatmoet82.00euro'szijn.
SELECTMAX
Dezeopdrachtgeeftalsresultaatdehoogstewaardeindegegevenkolom.
Syntaxis
SELECT MAX(kolomnaam)
FROM tabelnaam;
Dezeopdrachtgeeftalsresultaatdehoogstewaardeindegegevenkolomnaam.
b. Selecteerdehoogstetelefoonprijsindetabelsmartphone.Hetresultaatmoet279.00euro'szijn.
SELECTSUM
CONCEPT
Dezeopdrachtgeeftalsresultaatdesomvanallewaardenindegegevenkolom.
Syntaxis
SELECT SUM(kolomnaam)
FROM tabelnaam;
c. Selecteerdesomvanalleprijzenindetabelsmartphone.Hetresultaatmoet713.99zijn.
SELECTAVG
(ZONDERBEELD-EN TAALREDACTIE)
Dezeopdrachtgeeftalsresultaatdegemiddeldewaardevanallewaardenindegegevenkolomnaam.
70
Syntaxis
SELECT AVG(kolomnaam)
FROM tabelnaam;
d. Selecteerdegemiddeldeprijsvanallesmartphones.Hetresultaatmoet142.798zijn.
e. Selecteerallerijenindetabelsmartphone.
Hetresultaatmoethetvolgendezijn.
f. Geefalletelefoonmerkenafzonderlijkweer,dusgeendubbelemerken.
Hetresultaatmoethetvolgendezijn.
CONCEPT
g. GeefdekolommerkendekolomGBalsgigabytesweer.
Hetresultaatmoethetvolgendezijn.
(ZONDERBEELD-EN TAALREDACTIE)
71 Blok2 Relationeledatabases(MySQL)
h. Selecteeralletelefoonsmetgigabytesgroterdanofgelijkaan64.
Hetresultaatmoethetvolgendezijn.
i. CodeerdeSQL-opdrachtdietelefoonsgroupeertenopteltopgigabytes.
Hetresultaatmoethetvolgendezijn.
CONCEPT
j. Selecteeralletelefoonsgeordendopprijs.
Hetresultaatmoethetvolgendezijn.
(ZONDERBEELD-EN TAALREDACTIE)
72
k. Selecteeralletelefoonsmeteenprijsonderde100euro.
Hetresultaatmoethetvolgendezijn.
2.6 TheorieStructuredQueryLanguage MySQL
SQL staatvoor Structured Query Language.Ditiseenalgemenetaaldiehetmogelijkmaaktgegevensineen databasetezettenofgegevensoptehalen.SQLwordtgebruiktomgegevenstussenapplicatiesenrelationele databaseuittewisselenentebewerken.
MySQL eenopensourceRDBMS(RelationalDatabaseManagementSystem)datdeSQL-standaardimplementeert. MySQLincombinatiemetPHPwordtgebruiktomvolledigeenstabielewebdatabase-applicatiesteontwikkelen.
SQL-opdrachten(queries)
EenSQL-queryiseenverzoekomtoegangtekrijgentotgegevensuiteendatabaseomdezetemanipulerenof optehalen.SQL-querieskunnenverschillendetakenuitvoeren,zoalshetmakenvandatabasesentabelen,het toevoegenvangegevensaantabellenenhetwijzigenvantabellen.
DezeSQL-querieszijnonderverdeeldinvijfcategorieën:
DDL–(DataDefinitionLanguage)
DQL–(DataQueryLanguage)
DML–(DataManipulationLanguage)
DCL–(DataControlLanguage)
TCL-(TransactionControlLanguage)
CONCEPT
DataDefinitionLanguage(DDL)
DataDefinitionLanguage(DDL)iseensetSQL-opdrachtendiewordtgebruiktomdatabasestructurentemaken, tewijzigenenteverwijderen.Hetgaatoverdestructuren,maarnietomdegegevensvandedatabase.
HiervolgendeDDL-commando's:
(ZONDERBEELD-EN TAALREDACTIE)
• CREATE:Dezeopdrachtwordtgebruiktomdedatabaseofdebijbehorendeobjecten(zoalstabel,index, functie,weergaven,opslagprocedureentriggers)temaken.
73 Blok2 Relationeledatabases(MySQL)
Syntaxis
CREATE {DATABASE | TABLE | INDEX | FUNCTION | PROCEDURE | VIEW | TRIGGER}
[IF NOT EXISTS]
databasenaam;
• USE:Openeendatabase.
Syntaxis
USE databasenaam
• DROP:Dezeopdrachtwordtgebruiktomobjectenuitdedatabaseteverwijderen.
Syntaxis
DROP [object_type] [IF EXISTS] object_name;
Bijvoorbeeld:
DROP DATABASE databasenaam;
• ALTER:Ditwordtgebruiktomdestructuurvandedatabasetewijzigen.
ALTER TABLE tabelnaam
[ADD kolomnaam datatype {AFTER|BEFORE}]
CONCEPT
[DROP COLUMN kolomnaam]
[RENAME COLUMN oudekolomnaam TO nieuwekolomnaam]
[ALTER COLUMN kolomnaam datatype];
• CONSTRAINTS:garanderendenauwkeurigheidenvolledigheidvandegegevensdoorvoorwaardenenregels opteleggen,bijvoorbeelddatatypenenforeignkeys.
• TRUNCATE:Ditwordtgebruiktomallerecordsuiteentabelteverwijderen,inclusiefalleruimtesdiezijn toegewezenvoorderecordswordenverwijderd.Syntaxis:
TRUNCATE TABLE tabelnaam
(ZONDERBEELD-EN TAALREDACTIE)
• COMMENT:Ditwordtgebruiktomopmerkingentoetevoegenaanhetgegevenswoordenboek.Syntaxis:
• CREATETABLEklant( IDINTPRIMARYKEY, NaamVARCHAR(100), leeftijdINT,)COMMENT='Klantengegevens';
• RENAME:Ditwordtgebruiktomeenobjectineendatabasetehernoemen.Syntaxis:
74
RENAME {DATABASE | TABLE | COLUMN | INDEX | VIEW}
oudenaam TO nieuwenaam
DataManipulationLanguage(DML)
DataManipulationLanguage(DML)zijncommando'svoordemanipulatievangegevensineendatabase.Ditzijn demeestgebruikteSQL-instructies.HetishetonderdeelvandeSQL-instructiedatdetoegangtotgegevensen dedatabaseregelt.
HiervolgteenlijstmetDML-commando's
• INSERT:Hetwordtgebruiktomgegevensineentabelintevoegen.
Syntaxis
INSERT INTO tabelnaam (kolomnaam1, kolomnaam2, ...)
VALUES (waarde1, waarde2, ...)[,(waarde1, waarde2, ...), ...];
• UPDATE:Hetwordtgebruiktombestaandegegevensineentabelbijtewerken.
Syntaxis
UPDATE tabelnaam
SET kolomnaam1 = waarde2, kolomnaam2 = waarde2, ... WHERE voorwaarde;
• DELETE:Wordtgebruiktomrijenineentabelteverwijderen.
Syntaxis
DELETE FROM tabelnaam WHERE voorwaarde;
• CALL:RoepeenStoredProgrammaaan.
Syntaxis
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
CALL procedurenaam(parameter1[,parameter2, ...]);
75 Blok2 Relationeledatabases(MySQL)
DataQueryLanguage(DQL)
EenDataQueryLanguage ofDQL-instructieiseenonderdeelvandeSQL-instructiewaarmeegegevensuitde databasekunnenwordengehaaldengeordend.HetbevatdeSELECT-instructie.Metdezeopdrachtkunnende gegevensuitdedatabasewordengehaaldomerbewerkingenmeeuittevoeren.WanneereenSELECTwordt afgevuurdopeentabeloftabellen,wordthetresultaatineentijdelijketabelinhetcomputergeheugenopgeslagen. Detabelzelfblijftongewijzigd.
SELECT:Wordtgebruiktomgegevensuitdedatabaseoptehalen.
Syntaxis
SELECT [DISTINCT] {* | kolomnaam [[AS] kolomalias], ...}
FROM tabelnaam [tabelalias], ...
[WHERE expresie1 [vergelijkoperator expresie2]]
[GROUP BY {kolomnaam, ...}]
[HAVING expresie1 [vergelijkoperator expresie2]]
[UNION [ALL] (SELECT ...)]
[ORDER BY {kolomnaam [DESC | ASC]}, ...]
[WITH (UPDLOCK)]
[]betekentdatditgedeelteoptioneelis.
{}betekentdathieruiteenkeuzegemaaktmoetworden.
()betekentdathiereenopnieuweenSELECT-statementingevoegdmagworden.
SELECT*
CONCEPT
DeopdrachtSELECT*wordtgebruiktomallerijenineentabeloptehalen.Bijvoorbeeld:
USE smartshop;
SELECT * FROM klant;
Selecteertallerijenintabelklant.
(ZONDERBEELD-EN TAALREDACTIE)
76
Figuur 2.1
SELECT[DISTINCT]
DeopdrachtSELECTDISTINCTwordtgebruiktomalleenonderscheidende(verschillende)waardenteretourneren. Bijvoorbeeld,devolgendeopdrachtretourneertgeendubbelewaardenvoorwoonplaats.EénkeerAmsterdam inplaatsvantweekeerAmsterdam.
Figuur 2.2
SELECTAS
DeSELECTAS-opdrachtwordtgebruiktomeenalternatievenaam(alias)toetewijzenaaneenkolomoftabel, waardoorhetresultaateenvoudigertebegrijpenoftemanipulerenis.
CONCEPT
Devolgendeopdrachtgeeftdekolomstraatdekolomaliasadres.
Figuur 2.3
SELECTWHERE
(ZONDERBEELD-EN TAALREDACTIE)
DeSELECTWHERE-opdrachtwordtgebruiktomrijenuiteendatabaseteselecterendieaanbepaldevoorwaarde vooldoen.
Devolgendeopdrachtselecteertallerijenintabelklantwaarwoonplaats=Amsterdam.
77 Blok2 Relationeledatabases(MySQL)
Figuur 2.4
VergelijkingeninSQLmaakjemetdevolgendeoperatoren:
Tabel 2.1
Vergelijking operatoren
Beschrijving Operator
Gelijkaan = Nietgelijkaan <>
Groterdan
Kleinerdan
Groterofgelijkaan
Kleinerofgelijkaan
SELECTGROUPBY
DeSELECTGROUPBY-opdrachtgroepeertrijenineenresulterendesetopbasisvandewaardenvaneenofmeer kolommen.
SELECTCOUNT
DeSELECTCOUNT-opdrachttelthetaantalrijeninineentabel.
Devolgendeopdrachtgroupeertenteltdeverschillendewoonplaatsen.
Figuur 2.5
SELECTORDERBY
DeSELECTORDERBY-opdrachtsorteertderesultatenvaneenqueryopbasisvandekolomofkolommendieje opgeeft,inoplopendeofaflopendevolgorde.
Dezeopdrachtselecteertalleklantengeordentinalfabetischevolgorde.
>
<
>=
<=
78
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Figuur 2.6
SELECTHAVINGLIKE
DeSELECTHAVINGLIKE-opdrachtwordtgebruiktbijhetselecterenvanrijenuiteentabeldooreenpatroonin eenkolomtegebruiken,vergelijkbaarmetdeWHERE-clausule.HetverschilisdatWHEREwordtgebruiktvoor hetfilterenvanrijenopbasisvanindividuelerecords,terwijlHAVINGwordtgebruiktvoorhetfilterenvangroepen rijen.
Dezeopdrachtselecteertalleklantenmeteengmail-account.
Figuur 2.7
UPDLOCKvoorgelijktijdigetransacties
JekuntUPDLOCK-hintgebruikenomspecifiekerijentevergrendelendietijdensdetransactiewordengelezen omervoortezorgendatzenietdooranderetransactieskunnenwordengewijzigdtotdatjehuidigetransactieis voltooid.
CONCEPT
SELECT * FROM tabelnaam WITH (UPDLOCK) WHERE voorwaarde;
SELECTUNION
InSQLkunjemetdeoperatorenUNIONenUNIONALLderesultatensetsvantweeofmeerSELECT-instructies combineren.Bijvoorbeeld:
SELECT klantID FROM klant
UNION SELECT klantID FROM weborder ORDER BY klantID;
(ZONDERBEELD-EN TAALREDACTIE)
DataControlLanguage(DCL)
DataControlLanguage (DCL)zijncommando'szoalsGRANTenREVOKEdievoornamelijktemakenhebbenmet derechten,machtigingenenanderebesturingselementenvanhetdatabasesysteem.
GRANT
DeGRANT-opdrachtgeeftgebruikerstoegangsrechtentotdedatabase.
79 Blok2 Relationeledatabases(MySQL)
Syntaxis
GRANT SELECT, UPDATE ON tabelnaam TO usernaam1 [, usernaam2, ...];
REVOKE
MetdeREVOKE-opdrachtwordendetoegangsrechtendiegegevenzijndoordeopdrachtGRANTingetrokken.
Syntaxis
REVOKE SELECT, UPDATE ON tabelnaam FROM usernaam1 [, usernaam2, ...];
TransactionControlLanguage(TCL)
TransactionControlLanguage(TCL)zijncommando'sdiegebruiktwordenomdeuitvoeringvaneentransactie teregelen.Eentransactieheeftslechtstweeresultaten:succesvolofmislukt.
STARTTRANSACTION
JestarteenTRANSACTION(eenaantalSQL-opdrachten)metSTARTTRANSACTION
COMMIT
Alseentransactiesuccesvolis,kunnenwedetransactiecommitterenofvastleggenmetCOMMIT.Het COMMIT-commandoslaatalletransactiesopindedatabasesindshetlaatsteCOMMITofROLLBACKcommando.
Bijvoorbeeld:
CONCEPT
DELETE FROM Student WHERE leeftijd = 20;
COMMIT; ROLLBACK
AlsereenfoutoptreedtmeteenSQL-instructie,moetenallewijzigingenongedaangemaaktworden.Dezeopdracht kanalleendetransactiessindsdelaatsteCOMMITofROLLBACKongedaanmaken.Bijvoorbeeld:
DELETE FROM Student WHERE leeftijd = 20;
(ZONDERBEELD-EN TAALREDACTIE)
ROLLBACK;
NaROLLBACKwordtdeDELETE-opdrachtongedaangemaakt.
80
2.7 Begrippen
2.8 Oefentoets
Opdracht21
WatisSQL?
Eenprogrammeertaalvoorhetmakenvandocumentengeoriënteerdedatabases
Eenalgemenetaaldiehetmogelijkmaaktgegevensineendatabasetezettenenoptehalen.
Eenplatformvoorhetmakenvanwebsites
Opdracht22
Eendatabasebestaatuitminimaaleen... kolom
tabel
attribuut
PrimaryKey
Opdracht23
WatiseenSQL-query?Meerdereantwoordenzijnmogelijk.
Eenverzoekomtoegangtekrijgentotgegevensuiteendatabaseomdezetemanipulerenofoptehalen.
Eenopdrachtomeendatastructuurtemaken
Eenopdrachtomeendatabasetekopiëren
Eenopdrachtomgegevensineendatabasetemanipuleren
Opdracht24
KoppeldeSELECT-opdrachtmetdebeschrijving.
SELECTGROUPBY
SELECTORDERBY
SELECTHAVINGLIKE
SELECTCOUNT
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Opdracht25
DeINSERTINTO-queryhoorttotwelkequery-language?
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
DataQueryLanguage
selecteertrijenuiteentabelopbasisvaneen patroonineenkolomtegebruiken.
Telthetaantalrijenineentabel.
groepeertrijenineenresulterendesetopbasis vandewaardenvaneenofmeerkolommen.
sorteertderesultatenvaneenqueryopbasisvan dekolomofkolommendiejeopgeeft,in oplopendeofaflopendevolgorde.
81 Blok2 Relationeledatabases(MySQL)
Opdracht26
WatdoetdeSELECTDISTINCT-opdracht?
maakteenonderscheidtussentweetabellen
halteenspecifiekwaardeuiteentabelop
haltonderscheidende(verschillende)waardenuiteentabelop
Opdracht27
Totwelkequery-languagebehoortdeSELECT-query?
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
DataQueryLanguage
Opdracht28
Totwelkequery-languagebehoortdeGRANT-query?
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
DataQueryLanguage
Opdracht29
Totwelkequery-languagebehoortdeSELECTUNION-query?
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
DataQueryLanguage
Opdracht30
Totwelkequery-languagebehoortdeCREATEINDEX-query?
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
DataQueryLanguage
2.9 Praktijkopdrachten
Opdracht31 DDL-opdrachten
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
RaadpleegzonodigdetheorieoverDataDefninitionLanguage. MaakdedatabaseschoolomverderteoefenenmetDDL-opdrachten.
CodeerbijelkevraagenvoerdejuisteSQL-codeuit.
a. Maakeendatabasemetdenaamschool.
82
b. Maakeentabelmetdenaamstudentenmeteenkolomvoordenamenvandestudenten.
c. VoegeennieuwekolommetdenaamphoneVARCHAR(10)eraantoe.
d. Voegeennieuwekolommetdenaamemaileraantoe.
e. Wijzigdenaamvankolomemailine-mailVARCHAR(20).
f. VoegeennieuwekolommetdenaamleeftijdINT(2)eraantoe.
g. Maakeennieuwetabelmetdenaamsemesterendekolommen vakkenVARCHAR(20)en cijfersINT(2).
h. VoegdekolomIDINT(2)aandetabelsemestertoe.
i. MaakkolomIDdePRIMARYKEY.
CONCEPT
j. VerwijderdePRIMARYKEYintabelsemester.
k. Verwijdertabelsemester.
Opdracht32 DML-opdrachten
RaadpleegzonodigdetheorieoverDataManipulationLanguage. IndezeopdrachtengebruikjejeschooldatabaseomverderteoefenenmetDML-opdrachten.Opendedatabase schoolenvoerdevolgendeDQL-opdrachtenuit:
(ZONDERBEELD-EN TAALREDACTIE)
a. CodeerdeDNL-opdrachtomdevolgendestudentenaandetabelstudentindedatabaseschooltoetevoegen.
Detabelzieteralsvolgtuit.
83 Blok2 Relationeledatabases(MySQL)
b. CodeerdeDML-opdrachtomdeleeftijdvanstudentAnilin17tewijzigen.
c. CodeerdeDML-opdrachtomdestudentAlexteverwijderen.
Opdracht33 DQL-opdrachten
RaadpleegzonodigdetheorieoverDataQueryLanguage. GebruikvoordezeopdrachtendedatabaseschoolomverderteoefenenmetDQL-opdrachten.
a. CodeerdeDQL-opdrachtomdegemiddeldeleeftijdvanallestudentenweertegeven.Hetresultaatmoet17 zijn.
b. CodeerdeDQL-opdrachtomdehoogsteleeftijdvanallestudentenweertegeven.Hetresultaatmoet18zijn.
c. CodeerdeDQL-opdrachtomdelaagsteleeftijdvanallestudentenweertegeven.Hetresultaatmoet17zijn.
d. CodeerdeDQL-opdrachtomallestudentenmeteengmail-accountweertegeven.
2.10 Terugblik
Opdracht34 Terugblik
Zeteenkruisjeindekolomdievoorjouvantoepassingis.
Beoordelingscriteria
Nee Ja
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
JekuntdatabasestructurenmakenmetdeDataDefinitionLanguage.
JekuntdatabasegegevensmanipulerenmetdeDataManipulationLanguage.
JekuntgegevensuitdedatabasehalenenordenenmetdeDataQueryLanguage.
JekunttransactiescontolerenmetdeTransactionControlLanguage.
JekuntSTOREDPROCEDUREScoderen.
84
Opdracht35 Terugblik
Denknaoverwatjehebtgedaaninditblok.
a. Noemtweedingenwaaroverjetevredenbent.
1.
2.
b. Noemtweedingendiejedevolgendekeeranderswiltdoen.
1.
2.
c. Vraagjedocenten/ofleermeesteromfeedback.
Tops:
Tips:
2.11 Toets
Opdracht36
WatdoetishetROLLBACK-commando?
Eencommanldodattransactiesongedaanmaakt.
EenPROCEDURE
Eenopgeslagenquery
Opdracht37
WatdoetdeCREATEINDEX-query?
CONCEPT
Identificeerteenuniekerijineentabel
Manipuleerteentabel-structuur
Optimaliseertdeprestatiesvaneendatabase
Manipuleerteenrij-structuur
Opdracht38
WatisMySQL?
Eenframeworkvoorrelationaldatabases
Eenprogrammeertaalvoorhetmakenvandocumentengeoriënteerdedatabases
(ZONDERBEELD-EN TAALREDACTIE)
Eenalgemenetaaldiehetmogelijkmaaktgegevensineendatabasetezettenenoptehalen.
Opdracht39
Eentabelbestaatuitmeerdere...
85 Blok2 Relationeledatabases(MySQL)
kolommen databases
PrimaryKeys
Opdracht40
WatdoetdeSELECT-opdracht?
PrimaryKeyuiteentabelophalen rijenuiteentabelophalen rijenineentabelopslaan.
Opdracht41
DeALTERTABLE-queryhoorttotwelkequery-language?
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
DataQueryLanguage
Opdracht42
WaarvoorgebruikjedeSELECTWHERE-opdracht?
Dezewordtgebruiktomrijenuiteentabelopteslaanopeenspecifiekedatabase.
Dezewordtgebruiktomrijenuiteentabelteselecterendieaaneenbepaaldevoorwaardevoldoen.
Opdracht43
KoppeldeLanguageaandejuistebeschrijving.
DataDefinitionLanguage
DataManipulationLanguage
DataControlLanguage
CONCEPT
TAALREDACTIE)
(ZONDERBEELD-EN
Dezewordtgebruiktomeentabelteselecterendieaaneenbepaldevoorwaardevooldoet.
TransactionControlLanguage
Opdracht44
Totwelkequery-languagebehoortdeCOMMIT-query?
zijncommando'sdiegebruiktwordenomde uitvoeringvaneentransactieteregelen.
zijncommando'sdievoornamelijktemaken hebbenmetderechten,machtigingenvaneen databasesysteem.
zijncommando'svoordemanipulatievan gegevensineendatabase.
iseensetSQL-opdrachtendiewordtgebruiktom databasestructurentemaken,tewijzigenente verwijderen.
86
DataDefinitionLanguage
DataManipulationLanguage
TransactionControlLanguage
DataQueryLanguage
Opdracht45
WatdoetdeSELECTUNION-query?
Hetlooptderijenineentabeldoor.
Hethandeltfoutenofwaarschuwingen
GeefteenresultatensetvantweeofmeerSELECT-instructies.
Opdracht46
Welkezijnvoorbeeldenvaneendatabaseevent?Erzijnmeerdereantwoordengoed.
EenUPDATE
EenDELETE
Eenquery-error
EenINSERT
EenCREATE
87 Blok2 Relationeledatabases(MySQL)
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
88
Blok3
CONCEPT
Sub-queriesenStoredProgramma's
InSQLiseensubquery gedefinieerdalseenquerybinneneenanderequery.EenSTOREDPROCEDUREiseen voorbereidSQL-codefragmentdatjeineendatabasekuntopslaan.Hiermeekunjezeopeenlatertijdstipvanuit deserveraanroepen.Storedprogramma’skunnenPROCEDURES,VIEWSofTRIGGERSzijn.
Leerdoelen
1. JekuntSub-queriescoderen
2. JekuntJOIN-queriescoderen
3. JekuntSTOREDPROCEDUREScoderen
4. JekuntVIEWSenTRIGGERScoderen
(ZONDERBEELD-EN TAALREDACTIE)
Opdracht1 OriëntatieSub-queriesenProcedures
Hoezoujeinformatieuitdrieverschillendetabellenkunnenophalen?
3.1 OpdrachtensetSub-queries
Opdracht2 Sub-queries
RaadpleegzonodigdetheorieoverSub-queries.
a. Selecteerdenamenvanalleklantendieeenorderhebbengeplaatstop2024-01-01.
GebruikhiervoordeWHERE-clausuleinjesub-query.Hetresultaatziejehieronder.
b. Selecteermerk,modelenprijsvoorallesmartphonesmeteenprijsbovendegemiddeldeprijsvanalle smartphones.
GebruikhiervoordeAVG-clausuleinjesub-query.
Hetresultaatmoeteruitzienalshetvolgende.
CONCEPT
c. Selecteerhettotaalaantalbesteldeitemsperorder.Hetresultaatmoetalsvolgtuitzien.
(ZONDERBEELD-EN TAALREDACTIE)
90
d. SelecteerhettotaalaantalbesteldephonesmetID=1perorder.
GebruikhiervoordeGROUPBYHAVING-clausuleinjesub-query.
Hetresultaatmoetalsvolgtuitzien.
e. Codeerdequeryensub-querydiedevolgendevraagbeantwoordt:watzijndenamenendeemailsvande klantendiesmartphoneshebbenbesteld?
Hetresultaatmoeteralsvolgtuitzien.
3.2 OpdrachtensetJOIN-queries
Opdracht3 JOIN-queries
CONCEPT
RaadpleegzonodigdetheorieoverJoin-queries.
a. MaakeenSELECTJOIN-clausuletussendetabellenklantenweborderaandiedevolgendevraagbeantwoordt: Wieheeftwelkeordersgeplaatst?
(ZONDERBEELD-EN TAALREDACTIE)
91 Blok3 Sub-queriesenStoredProgramma's
b. MaakeenSELECTJOIN-clausuletussendetabellensmartphoneenitemdiedevolgendevraagbeantwoordt: HoeveelsmartphonesMotoroplamodelMotoE13zijnbesteld?
Deresultaatverzamelingmoeterzouitzien:
c. MaakeenSELECTJOIN-clausuletussendetabelsmartphoneentabelitemdiedevolgendevraagbeantwoordt: HoeveelMotoroplamodelMotoE13zijnerperorderbesteld?
d. GeefdeverkoopcijfersvanmerkMotorolamodelE13perorder.
Hetresultaatziejehieronder.
CONCEPT
3.3 OpdrachtensetSTOREDPROCEDURES
Opdracht4 DeBoekhandeldatabase
(ZONDERBEELD-EN TAALREDACTIE)
RaadpleegzonodigdetheoriebijStoredProgramma's.
MaakdeBoekhandeldatabase
Voerdevolgendestappenuit:
Maakeerstdedatabaseboekhandelvoordevolgendeopgaven. • 1.
92
CREATE DATABASE boekhandel; USE boekhandel;
• 2.
Maakeerstdeoefentabelboek.
CREATE TABLE boek ( id INT(3) NOT NULL AUTO_INCREMENT, isbn VARCHAR(17), titel VARCHAR(22), auteur VARCHAR(15), prijs DECIMAL(5,2) DEFAULT NULL, voorraad INT(3) DEFAULT NULL, PRIMARY KEY (id) );
• 3.
Vuldetabelboekin.
INSERT INTO boek (isbn, titel, auteur, prijs, voorraad)
VALUES
CONCEPT
("978 90 395 2781 3", "Basis JavaScript", "R.W. Castaneda", 44.00, 50),
("978 90 395 2781 4", "Basis PHP", "B. Desmet", 53.00, 78),
("978 90 395 2781 5", "Basis MySQL", "Q.Q. Marquez", 26.00, 200);
Hetresultaatvan SELECT * FROM boek moetdevolgendetabelzijn:
(ZONDERBEELD-EN TAALREDACTIE)
93 Blok3 Sub-queriesenStoredProgramma's
Opdracht5 StoredPROCEDURE
MaakeenPROCEDUREomdeboekenvoorraadtecontroleren
• 1.
CodeerdePROCEDUREproc_boekvoorraadalsvolgt:
USE boekhandel; delimiter //
CREATE PROCEDURE proc_boekvoorraad(INOUT totaal FLOAT)
BEGIN
SELECT SUM(voorraad) INTO totaal FROM boek;
END; //
• 2.
VoerdestoredPROCEDUREalsvolgtuit:
USE boekhandel;
SET @totaalVoorraad = 0;
CALL proc_boekvoorraad(@totaalVoorraad);
SELECT @totaalVoorraad;
JezietaandelinkerkantindeRoutines-mapdestoredPROCEDUREproc_boekvoorraadstaan.Aanderechterkant ziejehetresultaatvandeSELECT@totaalVoorraadopdrachtnahetuitvoerenvandeCALLproc_boekvoorraad.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
JekunteenstoredPROCEDUREverwijderenmetdeDROPPROCEDUREopdracht.
Opdracht6 Voorraadvaneenboektitel
MaakeennieuwePROCEDUREproc_get_voorraadtitelzodathetdevoorraadvaneengegevenboektitelwordt weergegeven.Hetmoetdandevolgendevraagkunnenbeantwoorden.
94
WatisdevoorraadvoorboektitelBasisMySQL?
Voerdeproc_get_voorraadtitel-PROCEDUREalsvolgtuit.
USE boekhandel;
SET @boekvoorraad = 0;
SET @boektitel = 'Basis MySQL';
CALL proc_get_voorraadtitel(@boektitel, @boekvoorraad);
SELECT @boektitel, @boekvoorraad;
Hetresultaatzieteralsvolgtuit.
Opdracht7 Hoogsteboekprijs
MaakeennieuwePROCEDUREproc_maxprijs.DezePROCEDUREbeantwoordtdevolgendevraag:
Welkboekheeftdehoogsteprijs?
CONCEPT
Opdracht8 PROCEDUREmetCASE
IndevolgendePROCEDUREwordtdevoorraadgeüpdatetgebaseerdopeeninput-variabele.
CREATE PROCEDURE proc_setvoorraad(IN code INT)
BEGIN
CASE code
WHEN 0 THEN UPDATE boek SET voorraad = 0;
WHEN 1 THEN UPDATE boek SET voorraad = 100;
WHEN 2 THEN UPDATE boek SET voorraad = 200;
ELSE UPDATE boek SET voorraad = 300;
(ZONDERBEELD-EN TAALREDACTIE)
END CASE;
END;
95 Blok3 Sub-queriesenStoredProgramma's
Voerproc_setvoorraaduitomallevoorradenin300tewijzigen.
Inhetresultaatziejedatallevoorraaden300zijn.
3.4 OpdrachtensetCursorsenHandlers
Opdracht9 CursorsenHandlers
RaadpleegzonodigdetheorieoverCursorsenHandlers.
DevolgendePROCEDUREmaaktgebruikvaneenCURSORomderijenineentabeldoortelopenomdeprijsvan eengegevenauteurmet10%teverlagen.
USE boekhandel; delimiter //
CREATE PROCEDURE proc_promo(promoAuteur VARCHAR(20))
BEGIN
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
DECLARE auteurInDeRij VARCHAR(20);
DECLARE finish INT DEFAULT 0;
DECLARE cursor1 CURSOR FOR SELECT auteur FROM boekhandel.boek;
DECLARE continue HANDLER FOR NOT FOUND SET finish = 1;
OPEN cursor1;
WHILE NOT finish DO
FETCH cursor1 INTO auteurInDeRij; IF auteurInDeRij = promoAuteur THEN
UPDATE boekhandel.boek
SET boekhandel.boek.prijs = boekhandel.boek.prijs - boekhandel.boek.prijs * 0.1;
END IF;
END WHILE;
CLOSE cursor1;
96
VoerdezePROCEDUREuitalsvolgt:
USE boekhandel;
SET @promoAuteur = 'B. Desmet';
CALL proc_promo(@promoAuteur);
SELECT * FROM boek;
InhetresultaatziejedatdeprijsvanBasisPHPismet10%verlaagd.
Opdracht10 CursorsenHandlers(vervolg)
CodeereenPROCEDURE proc_set_boektitel_voorraad metgebruikvaneenCURSORomdevoorraadvan eengegeventiteltewijzigen.DaarnavoerjedePROCEDUREuit.
CodeerdePROCEDUREproc_set_boektitel_voorraad.
CONCEPT
Hetresultaatmoethetvolgendezijn:
3.5 OpdrachtensetViewsenTriggers
Opdracht11 Views
RaadpleegzonodigdetheorieoverCursorsVIEWS.
Eenviewiseensoortvirtueletabel,wanteenviewisgebaseerdopqueriesoptabellen.
END; //
97 Blok3 Sub-queriesenStoredProgramma's
(ZONDERBEELD-EN TAALREDACTIE)
a. CodeerdeVIEW boekView omalleboektitelstetoonen
b. Voerde boekView uit.
Opdracht12 Views(vervolg)
a. CodeerdeVIEW voordeelView vooralleboekenwaarvoordeprijsonderde30.00euroligt
b. Voerde voordeelView uit.
Opdracht13 Triggers
EenSQL-triggeriseenblokprocedurelecodedatwordtuitgevoerdwanneereenspecifiekegebeurtenisplaatsvindt indedatabase.
Maakdevolgendeboeklogtabelomwijzigingenindetabelboekbijtehouden. create table boeklog(titel varchar(30),isbn VARCHAR(17), actie VARCHAR(30),oudeprijs DECIMAL(4,2), nieuweprijs DECIMAL(4,2),datum DATETIME)
TAALREDACTIE)
delimiter //
CREATE TRIGGER prijsTrigger
AFTER UPDATE ON boek
FOR EACH ROW
BEGIN
CONCEPT
Codeerde prijsTrigger dieeenlog-tabel boeklog bijhoudtwanneerdeprijsvaneenboekwordtgewijzigd. use boekhandel
INSERT INTO boeklog(titel,isbn,actie,oudeprijs,nieuweprijs,datum)
VALUES(NEW.titel,NEW.isbn,'Prijs was gewijzigd',OLD.prijs,NEW.prijs,NOW());
END;//
delimiter ;
Voerdevolgendeopdrachtuitomdeprijsvaneenboektewijzigen.
UPDATE boek set prijs = 40 where titel='Basis JavaScript';
(ZONDERBEELD-EN
98
3.6 TheorieSub-queriesenStoredProgramma's Sub-queries
InSQLiseensubquery gedefinieerdalseenquerybinneneenanderequery.Metanderewoorden,wekunnen zeggendateensubqueryeenqueryisdieisingebedindeWHERE-componentvaneenandereSQL-query.Belangrijke regelsvoorsubqueries:JekuntdesubqueryineenaantalSQL-clausulesplaatsen.Jekuntzeplaatsenineen WHERE-component,HAVE-clausuleeneenFROM-clausule.Subquerieskunnenwordengebruiktmetdeinstructie SELECT,UPDATE,INSERTenDELETE.
DeWHEREIN-component
Stel,wehebbentabel-Aentabel-B,dankunnenwedevolgendesyntaxisgebruiken:
Syntaxis
SELECT *
FROM tabel-A
WHERE kolomnaam IN (SELECT kolomnaam FROM tabel-B);
Primaireenverwijzendesleutels
Subqueriesmakengebruikvanprimairesleutelsenverwijzendesleutels.Aanhetbeginvanblok1vanditboek hebbenwedesmartshop-databasemetprimaireenverwijzendesleutelsgecreëerd.Indevolgendefiguurzien wedatklantIDindetabelweborderiseenverwijzendesleutelnaarklantIDindetabelklant:
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
99 Blok3 Sub-queriesenStoredProgramma's
Figuur 3.1
Sleutelszijndehoeksteenvanrelationeledatabasesenbepalenderelatietussendetabellen.Zokunnenwe bijvoorbeelddevolgendequeryensubqueryuitvoeren:
USE webshop;
SELECT naam
FROM klant
CONCEPT
WHERE klantID IN (SELECT klantID FROM weborder);
Desubquerymoettussenhaakjesgecodeerdworden.Dezequeryselecteertallenamenindetabelklantwaar hunklantID(primairesleutel)ooktevindenisindetabelweborderalsklantID(verwijzendesleutel).Hetwerkt alsvolgt:desubquerywordtalseerstuitgevoerdengeeftalsresultaateengegevensverzamelingdiealsinput wordtgebruiktvoordeeerstequery.Hetresultaatzieteralsvolgtuit:
(ZONDERBEELD-EN TAALREDACTIE)
Figuur 3.2
100
Hierselecterenwedevoornamenvanklantendieeenweborderhebbengeplaatst.
WegebruikendeWHEREIN-componentineensubqueryomdequeryteverfijnen.Zokunnenwedeprimaireen deverwijzendesleutelskoppelen.
JOIN-queries
EenJOIN-query wordtgebruiktomrijenuittweeofmeertabellentecombineren,opbasisvaneengerelateerde kolomertussen.WekijkennaardevolgendeJOINS:
CONCEPT
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
(ZONDERBEELD-EN TAALREDACTIE)
Figuur 3.3
101 Blok3 Sub-queriesenStoredProgramma's
Figuur 3.4
CONCEPT
TAALREDACTIE)
IndevolgendeSQL-sytaxisziejeeenINNERJOIN,waarmeerecordswordengeselecteerdmetovereenkomende waardeninbeidetabellen.IndepraktijkwordtmeestalJOINgebruiktinplaatsvanINNERJOIN.
Syntaxis
SELECT tabel-A.kolomnaam [, tabel-B.kolomnaam]
FROM tabel-A
INNER JOIN tabel-B
ON tabel-A.primaire_sleutel = tabel-B.verwijzende_sleutel;
(ZONDERBEELD-EN
DeopdrachtINNERJOINgeefteenresultaatverzamelingvandegemeenschappelijkerijeninbeidetabellen.De ON-clausuleverbindtdeverwijzendesleutelmetdeprimairesleutel.
INNERJOIN
102
Figuur 3.5
DeLEFTOUTERJOIN-clausulegeeftallerijenintabel-Aplusallegemeenschappelijkerijenintabel-Aentabel-B.
CONCEPT
IndepraktijkwordtmeestalLEFTJOINgebruiktinplaatsvanLEFTOUTERJOIN.
Syntaxis
SELECT tabel-A.kolomnaam [, tabel-B.kolomnaam]
FROM tabel-A
LEFT OUTER JOIN tabel-B
ON tabel-A.primaire_sleutel = tabel-B.verwijzende_sleutel;
(ZONDERBEELD-EN TAALREDACTIE)
LEFTOUTERJOIN
103 Blok3 Sub-queriesenStoredProgramma's
RIGHTOUTERJOIN
Figuur 3.6
CONCEPT
DeRIGHTOUTERJOIN-clausulegeeftallerijenintabel-Bplusallegemeenschappelijkerijenintabel-Aentabel-B.
IndepraktijkwordtmeestalRIGHTJOINgebruiktinplaatsvanRIGHTOUTERJOIN.
Syntaxis
SELECT tabel-A.kolomnaam [, tabel-B.kolomnaam]
FROM tabel-A
RIGHT OUTER JOIN tabel-B
ON tabel-A.primaire_sleutel = tabel-B.verwijzende_sleutel;
(ZONDERBEELD-EN TAALREDACTIE)
104
Figuur 3.7
CONCEPT
DeFULLOUTERJOIN-clausulegeeftallerijenintabel-Aplusallerijenintabel-B.Maaralseenrijintabel-Ageen matchheeftintabel-Bdanverschijntindekolomintabel-BeenNULL,enandersom.
Syntaxis
SELECT tabel-A.kolomnaam [, tabel-B.kolomnaam]
FROM tabel-A
LEFT OUTER JOIN tabel-B
ON tabel-A.primaire_sleutel = tabel-B.verwijzende_sleutel
UNION
SELECT tabel-A.kolomnaam [, tabel-B.kolomnaam]
FROM tabel-A
(ZONDERBEELD-EN TAALREDACTIE)
RIGHT OUTER JOIN tabel-B
ON tabel-A.primaire_sleutel = tabel-B.verwijzende_sleutel;
FULLOUTERJOINmetUNION
105 Blok3 Sub-queriesenStoredProgramma's
GenesteINNERJOIN's
Stel,jewiltviertabelleninjedatabaseraadplegenmetdevolgendevraag:
WelkeklantenhebbeneenNokiabesteld?
Danmoetjedetabellenklant,weborder,itemensmartphoneraadplegenmetdrieINNERJOIN'sZievolgende figuur:
Figuur 3.8
BijelkeINNERJOINhoorteenONvoorwaarde.MeervoudigeINNERJOINScoderenwebinnenhaakjeszoals hierbovenschematischisweergegeven.MeestalzijnJOIN-queriesefficiënterdansubqueries,afhankelijkvande complexiteitvandequeries.HetismogelijkomsubqueriestegebruikenbinnenINNERJOINS.
Storedprogramma's
Storedprogramma’s
Storedprogramma’szijndatabase-objecten.DezeobjectencoderenweindeSQL-querytaal.Dezeprogramma’s kunnenweopdedatabaseserveropslaanenwekunnenzeopeenlatertijdstipvanuitdeserveraanroepen.Stored programma’skunnenPROCEDURES,FUNCTIONS,VIEWSofTRIGGERSzijn.
Wegebruikenstoredprogramma’svoorverschillendedoeleinden.Storedprogramma’szijnnuttigvoor multiplatform-applicaties,voordelenzijn:
• Hetverminderenvannetwerkverkeer
• Hetbeveiligingvandata.
• Gecentraliseerdebedrijfslogica.
Eennadeelisdatdeserveroverbelastkanraken.Ditkaneenprobleemzijnalsopeengegevenmomentveel webserversqueriessturennaaréénenkeledataserver.Ditprobleemwordtmeestalopgelostdoormeerdataservers inteschakelen.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
Indevolgendeparagrafenmaakjekennismethetvolgende:
• SQL-variabelen
• CREATEPROCEDURE
• DROPPROCEDURE
106
• SHOW
• IF
• WHILE
SQL-variabelen
SQL-variabelengebruikenweomwaardentijdelijktebewaren.
Syntaxis
SET @variabele = waarde;
Inhetvolgendevoorbeeldmakenwedetweevariabelen@meldingen@erroralsvolgt:
SET @melding = "Fout opgetreden";
SET @error = "Print-error";
MetdeSELECT-opdrachtkunnenwedewaardenvanvariabelenzien.Bijvoorbeeld:
SELECT @error
CREATEPROCEDURE
DeCREATEPROCEDURE-opdrachtmaakteennieuweprocedureofnieuwsubprogrammaaan.
Syntaxis
CREATE PROCEDURE proc_naam()
BEGIN ......
END; //
CONCEPT
Hetlaatsteteken(//)ishet'delimiter'-teken,datheteindeaangeeftvandequery-opdracht.Jemagdittekenzelf bepalen.
Procedure-parameters
Alsjeparametersineenproceduregebruikt,moetjeaangevenofhetIN-,OUT-ofINOUT-parameterszijn.
(ZONDERBEELD-EN TAALREDACTIE)
• IN-parametersverwerkjebinnendeprocedure,deoorspronkelijkewaardewordtnietgewijzigd.
• INOUT-parametersverwerkjebinnendeprocedure,deoorspronkelijkewaardewordtwelgewijzigd.
• OUT-parameterscreëerjebinnendeprocedureomdewaardeteretourneren.
Jemoetookaangevenwelkdatatypedeparametershebben.
107 Blok3 Sub-queriesenStoredProgramma's
Syntaxis
CREATE PROCEDURE proc_naam(IN param1 INT, OUT param2 VARCHAR(5))
DROPPROCEDURE
DeDROPPROCEDURE-opdrachtverwijderteenbestaandeprocedure.
Syntaxis
DROP PROCEDURE IF EXISTS proc_naam;
SHOW
DeSHOW-opdrachtgeeftdedefinitievaneenbestaandeprocedureweer.
Syntaxis
SHOW CREATE PROCEDURE proc_naam;
ALTERPROCEDURE
CONCEPT
MetdeALTERPROCEDURE-instructieinSQLkunjeeenbestaandeopgeslagenprocedurewijzigenzonderdeze tehoevenverwijderenenopnieuwtemaken.MetALTERkunjealleende"kenmerken"vandeprocedurewijzigen.
Jekuntdeparametersofdehoofdtekstvaneenopgeslagenprocedureechternietwijzigenmetbehulpvandeze instructie;omdergelijkewijzigingenaantebrengen,gebruikjeDROPjedeprocedureenopnieuwmaaktmet behulpvandeDROP-PROCEDUREendeCREATE-PROCEDURE.
Syntaxis
ALTER PROCEDURE proc_naam [kernmerken ...]
(ZONDERBEELD-EN TAALREDACTIE)
kenmerken: COMMENT'string'|LANGUAGESQL|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA} |SQLSECURITY{DEFINER|INVOKER}
IF
MetdeIF-opdrachtkunnenwebeslissingsstructurenbinneneenprocedurecoderen.
108
Syntaxis
IF voorwaarde THEN acties uit te voeren;
END IF;
CASE
Eencasestructuuriseensoortselectiecontrolemechanismedatwordtgebruiktbijhetprogrammeren.Hiermee kandebesturingsstroomvaneenprogrammawordengewijzigdopbasisvandewaardevaneenvariabeleof expressie.
DeCASE-beslissingsstructuurcodeerjealsvolgt:
Syntaxis
CASE variabele WHEN waarde1 THEN acties uit te voeren ...; WHEN waarde2 THEN acties uit te voeren ...;
ELSE acties uit te voeren ...;
END CASE;
CONCEPT
WHILE
Eenwhile-lusiseenfundamentelecontrolestroomstructuurbijhetprogrammeren.Hiermeekaneencodeblok herhaaldelijkwordenuitgevoerdzolangaaneeneenbepaaldevoorwaardewordtvoldaan.
syntaxis
WHILE voorwaarde DO
Acties uit te voeren;
END WHILE;
(ZONDERBEELD-EN TAALREDACTIE)
CursorsenHandlers
Eencursoriseenaanwijzernaareenspecifiekerijinhetresultaatvaneenquery.Hiermeekunjeéénvooréén doorderijennavigeren.
109 Blok3 Sub-queriesenStoredProgramma's
SQL-cursorskunjevergelijkenmetdeFOREACH-lusinandereprogrammeertalen.HetmaaktSQL-codemakkelijker telezenenbegrijpen.Maarzeverbruikenveelcomputervermogen.Zedeclarereneensetgegevensmetpointers naarrijenindeset.ZokunnenwemetbehulpvandeWHILE-lusallerijenuiteentabeldoorlopen.Cursorsmoet jeeerstdeclarerenmetDECLARECURSOR,danopenenendanpaslezenmetdeFETCH-opdracht.Aanheteinde moetjecursorssluiten.
IndezeparagraafmaakjekennismetdevolgendeSQL-opdrachten:
• DECLARECURSOR
• DECLAREHANDLER
DECLARECURSOR
Syntaxis
DECLARE cursor_naam
CURSOR FOR selectopdracht;
OPEN cursor_naam;
FETCH cursor_naam
INTO variabele [, variabele];
CLOSE cursor_naam;
DECLAREHANDLER
Nahetdoorlopenvanallerijenuiteentabelbenjeaanheteindevandetabel.Dezeconditiemoetbehandeld wordendoor‘handlers’.Eenhandlerzegtwatgedaanmoetwordenineenbepaaldesituatie.
Syntaxis
DECLARE handler_naam
CONCEPT
HANDLER FOR conditie [,conditie]
commando's;
Handler_acties:
CONTINUE
EXIT
UNDO
Condities:
SQLWARNING
NOT FOUND
(ZONDERBEELD-EN TAALREDACTIE)
SQLEXCEPTION
ViewsenTriggers
IndezeparagraafmakenwekennismetdevolgendeSQL-opdrachten:
• CREATEVIEW
110
• CREATETRIGGER
• TRIGGERENABLE/DISABLE
CREATEVIEW
EenVIEWiseenopgeslagenSQL-query,wanneerjeeenVIEWgebruikt,wordtdeopgeslagenqueryuitgevoerden wordteenresultatensetgegenereerddiebestaatuitrijenenkolommen.
Eenviewiseensoortvirtueletabel,wanteenviewisgebaseerdopqueriesoptabellen.Eenviewiseen‘dynamische opname’vaneenofmeertabellen.Wanneerdegegevensindetabelwordengewijzigd,veranderenookde gegevensindeview.ViewszijngeentabellenmaardefinitiesvantabellenofandereVIEWS.
Syntaxis
CREATE VIEW view_naam (kolomnaam[, kolom_naam])
AS SELECT-opdracht;
MetCREATEofREPLACEmaakjeeennieuweviewofvervangjeeenoudeviewalsdiealbestaat.Metde SELECT-opdrachtkunjeeenselectiemakenuittabellenofviews.
CREATETRIGGER
Eentriggeriseendatabase-objectdatgeassocieerdismeteentabel.Triggerswordengeactiveerddoorevents. Eeneventiseengeprogrammeerdegebeurtenisinjetabel.VoorbeeldenhiervanzijnUPDATES,DELETESen INSERTS.
Syntaxis
CREATE TRIGGER trigger_naam
BEFORE [AFTER] event
ON table_naam
FOR EACH ROW
BEGIN commando's ...
END;
CONCEPT
TRIGGERENABLE/DISABLE
Somswiljetriggersuitzettenomtesteninjedatabaseuittevoeren.Hieronderziejeeenpaarvoorbeelden:
(ZONDERBEELD-EN TAALREDACTIE)
ALTER TRIGGER trigger_naam ENABLE;
ALTER TRIGGER trigger_naam DISABLE;
ALTER TABLE tabel_naam ENABLE ALL TRIGGERS;
ALTER TABLE tabel_naam DISABLE ALL TRIGGERS;
111 Blok3 Sub-queriesenStoredProgramma's
3.7 Begrippen
3.8 Oefentoets
Opdracht14
WatiseenCURSOR?
Eensetgegevensmetpointersnaarrijenindeset.
Eenaanwijzer
Eenquery
Opdracht15
WatdoeteenHANDLERineenPROCEDURE?
Hetlooptderijenineentabeldoor.
Hethandeltfoutenofwaarschuwingen
HethandeltdeCURSOR
Opdracht16
Welkevandevolgendeiseenstoredprogramma?
Sub-query View
Constraint HAVING
Opdracht17
TAALREDACTIE)
Waarnaastkunjeeensub-queryplaatsen?Erzijnmeerdereantwoordengoed.
UNION HAVING WHERE FROM
Opdracht18
Watzijnsleutels?Erzijnmeerdereantwoordengoed.
Sleutelszijndehoeksteenvanrelationeledatabases
Sleutelsbepalenderelatietussendetabellen
Sleutelszijnprimaireofsecondaire
SleutelsIdentificereneenofmeerrijenineentabel
Opdracht19
CONCEPT (ZONDERBEELD-EN
WatdoeteenINNERJOIN-query?
Selecteertrijenmetovereenkomendewaardeninbeidetabellen
Selecteertallerijenintabel-Aplusallegemeenschappelijkerijenintabel-Aentabel-B
Selecteertallerijenintabel-Bplusallegemeenschappelijkerijenintabel-Aentabel-B
Selecteertallerijenintabel-Aplusallerijenintabel-B
112
Opdracht20
WatdoeteenRIGHTJOIN-query?
Selecteertrijenmetovereenkomendewaardeninbeidetabellen
Selecteertallerijenintabel-Aplusallegemeenschappelijkerijenintabel-Aentabel-B
Selecteertallerijenintabel-Bplusallegemeenschappelijkerijenintabel-Aentabel-B
Selecteertallerijenintabel-Aplusallerijenintabel-B
Opdracht21
Watiseennadeelvanstoredprogramma’s?
Storedprogramma’swordenvollediguitgevoerdopdedataserver
Bankengebruikenstoredprogramma’svoordataverkeeroperaties
Dataserverskunnenoverbelastraken
Opdracht22
Welkevandevolgendedeclareerteensetgegevensmetpointersnaarrijenindeset.
HANDLERS
CURSORS
PROCEDURES
VIEWS
TRIGGERS
Opdracht23
Bijwelkeparametersineenprocedurekandeoorspronkelijkewaardegewijzigdworden?
INOUT-parameters
OUT-parameters
IN-parameters
CONCEPT
3.9 Praktijkopdrachten
Opdracht24 Triggers
RaadpleegzonodigdetheorieoverTriggers.
a. Codeerde voorraadTrigger diedelog-tabel boeklog bijhoudtwanneerdevoorraadvaneenboekwordt gewijzigd.
b. VoereenvoorraadUPDATEopdrachtomdevoorraadTriggerteactiveren.
(ZONDERBEELD-EN TAALREDACTIE)
Controleerofdeboeklog-tabelwasbijgehouden.
c. Codeerde insertTrigger diedelog-tabel boeklog bijhoudtwanneereenboekwordttoegevoegd.
113 Blok3 Sub-queriesenStoredProgramma's
d. VoereenvoorraadINSERTopdrachtomdeinsertTriggerteactiveren.
Controleerofdeboeklog-tabelwasbijgehouden.
Opdracht25 Procedure
RaadpleegzonodigdetheorieoverStoredprogramma's.
Codeerdevolgendeprocedureomeenboekenvoorraadcheckuittevoeren.
USE boekhandel
delimiter //
CREATE PROCEDURE proc_voorraadCheck()
BEGIN
SELECT titel,auteur,prijs, (CASE
WHEN voorraad < 250 THEN 'herbestellen' ELSE 'invoorraad'
END)as Status
FROM boek;
END//
Voerdeproceddureuit.Hetresultaatmoethetvolgendezijn:
CONCEPT
Codeerdeproc_trendingzodatalsdetitelvaneenboek'MySQL'bevatdangeefje'Trending'alsMarketing.
Hetresultaatmoetalsvolgtzijn:
(ZONDERBEELD-EN TAALREDACTIE)
114
3.10 Terugblik
Opdracht26 Terugblik
Zeteenkruisjeindekolomdievoorjouvantoepassingis.
Beoordelingscriteria
JekuntSub-queriescoderen
JekuntJOIN-queriescoderen
JekuntSTOREDPROCEDUREScoderen
JekuntVIEWSenTRIGGERScoderen
Opdracht27 Terugblik
Denknaoverwatjehebtgedaaninditblok.
a. Noemtweedingenwaaroverjetevredenbent.
1.
2.
b. Noemtweedingendiejedevolgendekeeranderswiltdoen.
1. 2.
c. Vraagjedocenten/ofleermeesteromfeedback.
Tops:
Tips:
3.11 Toets
Opdracht28
WatiseenVIEW?
EenFUNCTION
EenPROCEDURE
Eenopgeslagenquery
Opdracht29
Watzijnvoorbeeldenvaneendatabaseevent?Erzijnmeerdereantwoordengoed.
Nee Ja
115 Blok3 Sub-queriesenStoredProgramma's
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
EenUPDATE
EenDELETE
Eenquery-error
EenINSERT
EenCREATE
Opdracht30
SelecteerdesoortenJOIN-queries.Erzijnmeerdereantwoordengoed.
INNERJOIN
LEFTJOIN
RIGHTJOIN
OUTERFULLJOIN
Opdracht31
WatdoeteenFULLJOIN-query?
Selecteertrijenmetovereenkomendewaardeninbeidetabellen
Selecteertallerijenintabel-Aplusallegemeenschappelijkerijenintabel-Aentabel-B
Selecteertallerijenintabel-Bplusallegemeenschappelijkerijenintabel-Aentabel-B
Selecteertallerijenintabel-Aplusallerijenintabel-B.
Opdracht32
Bijwelkeparametersineenprocedurewordtdeoorspronkelijkewaardenietgewijzigd?
IN-parameters
OUT-parameters
INOUT-parameters
Opdracht33
Watgebruikjeomtezeggenwatgedaanmoetwordeninbepaldesituaties?
HANDLERS
CURSORS
PROCEDURES
VIEWS
Opdracht34
Watgebruikjeomprogramma'steactiverendoordatabase-events?
HANDLERS
CURSORS
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
PROCEDURES
VIEWS
TRIGGERS
Opdracht35
Hetismogelijkomsub-queriestegebruikenbinnenINNERJOINS.
116
Waar
Nietwaar
Opdracht36
inwelketaalkunjestoredprogramma’scoderen?
JavaScript PHP
SQL
JAVA
Opdracht37
KoppeldeSQL-opdrachtmetdebeschrijving.
CREATEPROCEDURE
SHOWPROCEDURE
DROPPROCEDURE
ALTERPROCEDURE
(ZONDERBEELD-EN TAALREDACTIE)
EennieuwePROCEDUREcreëren
Procedureweergeven
Procedureverwijderen
CONCEPT
"kenmerken"vandeprocedurewijzigen
117 Blok3 Sub-queriesenStoredProgramma's
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
118
Blok4
CONCEPT
Niet-relationeledatabases
Debelangrijkstekenmerkenvanniet-relationeledatabaseszijn:
• Zekunnengestructureerde,semi-gestructureerdeenongestructureerdegegevensverwerken.
• Zezijnschaalbaarenresponsief.
• Enormegegevensopslagschaaltgoedmeton-demandserversenbiedtsnelleantwoordenopvragen.
• Jekuntgebruikmakenvanmeerderedatastructuren.Erzijnverschillendesoorteninformatiebeschikbaar metmeerderemodellen
Leerdoelen
1. JekuntDocumentgeoriënteerddatabasesmaken.
2. JekuntDocumentCollectionsmakenmetNoSQL.
(ZONDERBEELD-EN TAALREDACTIE)
3. JekuntgegevensuiteenCollectionhalenmetNoSQL.
4. JekuntgegevensuiteenCollectionverwerkenmetNoSQL.
Opdracht1
OriëntatieopdrachtDocumentgeoriënteerdDatabases
Alsjeaanrelationeledatabasesdenkt,dandenkjeovertabellenenrelatiestussendetabellen.
ZoekeendefinitievanDocumentgeoriënteerdDatabasesopinternet.Uitwatvoordocumentenzoueen
DocumentgeoriënteerdDatabasebestaanvolgensjedefinitie?
4.1 OpdrachtensetNoSQL
Opdracht2
Documentgeorënteerdedatabases
Indevolgendeopdrachtengajeeendocumentgeoriënteerdedatabasemakenenvervolgensbewerkenmet NoSQLquery-opdrachten.OmdittedoenhebjedeMySQLShellendeMySQLShellConsolenodig.
RaadpleegzonodigdetheoriebijNoSQLDatabases
StartMySQLShell
CONCEPT
KlikophetMySQLShellicoon. • 1.
KlikopDatabaseConnections. • 2.
KlikopNewConnection. • 3.
Configureereennieuweverbinding
DeDatabaseConnectionConfigurationpaginaverschijnt.
(ZONDERBEELD-EN TAALREDACTIE)
120
• 1.
• 2.
TyprootvoorUserName.
KlikopOK.
Maakdesmartstoredatabase
DeNewConnectionverschijntaandelinkerkant.
• 1.
• 2.
• 3.
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
KlikophetpijltjeomeenNewConnectiontemaken.
InjeDBNotebookmaakdedatabasesmartstoremet CREATE DATABSE smartstore
Openjedatabasesmartstoremet USE smartstore.
Openeennieuweconsole
VoorhetmakenvaneendocumentgeoriënteerdedatabasehebjeJavaScriptendeMySQLShellConsolenodig.
121 Blok4 Niet-relationeledatabases
• 1.
• 2.
KlikopDatabaseConnectionOverview.
Klikophetconsole-icoonomeennieuweconsoleteopenen.
Maakeensessionmetdesmartstoredatabase
DeMySQLShellConsoleverschijnt.MaakeennieuwesessionmeteenverbindingtussendeConsoleende smartstoredatabase.TyphetvolgendeJavaScriptcommando:
c root@localhost/smartstore
CONCEPT
MaakeennieuweDocumentenCollection
(ZONDERBEELD-EN TAALREDACTIE)
TyphetvolgendeJavaScriptcommandoomdecollectionsmartphonestemaken.
smartphones = db.createCollection('smartphones')
JezietaandelinkerkantonderTablesdenieuwecollectionsmartphones.Indezecollectiongajeeenaantal documentenvoorsmartphonestoevoegen.
122
Collectionverwijderen
Maakeencollectionmetdenaamtestalsvolgt:
test=db.createCollection('test')
Eencollectionkuntjealsvolgtverwijderen:
db.dropCollection('test')
Werkenmetbestandecollections
BinneneensessionkunjewerkenmetanderebestaandecollectionsmetgebruikvandegetCollection()-methode.
Bijvoorbeeld:
smartphones = db.getCollection('smartphones')
Opdracht3 Documentendatabaseverwerken
CONCEPT
Indevolgendeopdrachtengajeoefenenmethetverwerkenvanjesmartstoredocumentendatabase.
Deadd()-query
AlledocumentenineencollectionscrijvenweinJavaScriptObjectNotation(JSON).Omeennieuwedocument toetevoegenaanjecollectoionsmartphonesvoerjehetvolgendequeryinjeconsoleuit.
smartphones.add({"merk": "Nokia", "model":"CO2", "GB": 32, "prijs": 82.00})
Defind()-query
Omalledocumenteninjecollectionweertegevenvoerdevolgendequeryinjeconsoleuit:
(ZONDERBEELD-EN TAALREDACTIE)
smartphones.find()
123 Blok4 Niet-relationeledatabases
Inhetresultaatziejeheteerstedocumentvaneensmartphoneinjesmartphonescollection.
Meerderedocumententoevoegen
JekuntineencommandomeerderedocumententoevoegendoorallenieuwedocumentenineenJavaScript-array[ ]tecoderen.
smartphones.add([
{"merk" : "Motorola" , "model" : "Moto E13" , "GB" : 64, "prijs" : 99.00},
{"merk" : "Samsung" , "model" : "Galaxy A23" , "GB" : 128 , "prijs" : 279.00} , {"merk" : "Motorola" , "model" : "Moto E20" , "GB" : 32, "prijs" : 99.00}
])
Voerhetfind()-query
Omhetresultaatvandevorigeopdrachttecontrolerenvoerjedefind()-queryweeruit.
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
124
Defind(where)-query
Omdevraag:welketelefoonshebbeneenprijshogerdan90euro?tebeantwoorden,voerjedevolgendequery uit.
smartphones.find("prijs > 90.00")
CONCEPT
fields(["merk","model","prijs"]).execute()
(ZONDERBEELD-EN TAALREDACTIE)
125 Blok4 Niet-relationeledatabases
a. CodeereenqueryomalletelefoonsvandemerkMotorolatevinden.Hetresultaatmoethetvolgendezijn:
CONCEPT
b. Codeerdequeryomalletelefoonsmetmeerdan60gigabytesteselecteren.Hetresultaatmoethetvolgende zijn:
(ZONDERBEELD-EN TAALREDACTIE)
c. Codeerdequeryomalletelefoonsmetmeerdan60gigabytesvanhetmerkMotorolateselecteren.Het resultaatmoethetvolgendezijn:
126
d. Codeerdequeryomalletelefoonsmetmeerdan60gigabytesendeprijsonder100euroteselecteren.Het resultaatmoethetvolgendezijn:
e. Voegjefavorietesmartphoneaandecollectionsmartphonestoe.
CONCEPT
CodeerdevolgendequeryomhetmodelMotoE20uitdecollectionteverwijderen.
smartphones.remove('model like :model') bind('model','Moto E20').execute()
f. Codeerdevolgendequeryomjefavorietesmartphoneuitdecollectionteverwijderen.
CodeerdevolgendequeryomdeprijsvandeNokiamodelCO2naareenprijsvan100euroteupdaten.
smartphones.modify("merk = 'Nokia'").patch({prijs:100})
g. CodeereenqueryomdeSamsungGalaxyA23naar64gigabytesteupdaten.
(ZONDERBEELD-EN TAALREDACTIE)
Opdracht4 Maakeennieuwecollection
a. Openeenconsoleenstarteensessionvoorjesmartstoredatabase.
127 Blok4 Niet-relationeledatabases
b. Maakeennieuwecollectionmetdenaamusers.
c. Voegdeklantgegevensvandevolgendetabeltoeaanjeusers-collection. Maakeennieuwecollectionmetdenaam
d. Voerdequeryuitomalledocumentenindecollectionusersweertegeven.
e. Voerdequeryuitomjeeigengegevensaandecollectionuserstoetevoegen.
f. VoerdequeryuitomdewoonplaatsvanuserTamarainHarlemtewijzigen.Daarnageefjealleusersweer.
g. Voerdequeryuitomalleusersmeteenleeftijdonderde20weertegeven.
CONCEPT
h. Voerdequeryuitomalleusersmeteenleeftijdonderde20diewoneninUtrechtweertegeven.
4.2 TheorieNiet-relationeledatabases
Niet-relationeledatabases
Niet-relationeledatabaseszijngebaseerdopdocumentstructurenenzijnbetergeschiktvoorgrotehoeveelheden data.Debelangrijkstekenmerkenvanniet-relationeledatabaseszijn:
• Zekunnengrotehoeveelhedengegevensverwerken
• Zezijnschaalbaarenresponsief
• Zehebbeneenenormegegevensopslag
• Zekunnengebruikmakenvanmeerderedatastructuren
NoSQL(NotOnlySQL)
(ZONDERBEELD-EN TAALREDACTIE)
NoSQLiseentypeDatabaseManagementSystem(DBMS)datisontworpenomgrotehoeveelheden ongestructureerdeensemi-gestructureerdegegevensteverwerkenenopteslaan.
DemeesterelationeledatabasesgebruikenSQLalsdestandaardquerytaal.Niet-relationeledatabasesgebruiken meestalanderedatabasemodellenzoalsNoSQL (hoewelsommigezijngebouwdomSQLteondersteunen).Veel niet-relationeledatabaseskunnenwordendoorzochtmetbehulpvantalenzoalsXQuery,XSLT,SPARQL,Java, JavaScript,Python,enz.
leeftijd woonplaats phone e-mail naam 18 Amsterdam 0624354657 dylan@kpn.nl Dylan 22 Utrecht 0658472615 tamara@gmail.com Tamara 16 Utrecht 0623905624 nitin@hotmail.com Nitin
128
Erzijnviersoortenniet-relationeledatabases
• Key-Value
• Wide-Column
• Graph
• Document
InditblokkijkenwenaarDocumentofStoreDatabases.
Documentgeoriënteerdedatabases
CONCEPT
Eendocumentgeoriënteerdedatabase,ofDocumentStoreiseendatabasedieeendocumentgeoriënteerdmodel gebruiktomgegevensopteslaan.DocumentStoresslaanelkdocumentendebijbehorendegegevensopinéén DocumentCollectioninplaatsvanverschillendetabellen.Elkdocumentbevatgegevensdiekunnenworden opgevraagdmetbehulpvanverschillendequery-enanalysetoolsvanhetDatabaseManagementSystem.
(ZONDERBEELD-EN TAALREDACTIE)
VoorbeeldvaneenDocumentStore
DocumentgeoriënteerdedatabaseszijngeschreveninhetJSON-formaat.Hieriseenvoorbeeldvaneendocument inJSON-formaatdatkanopgeslagenwordenineenDocumentStore.
Figuur 4.1
129 Blok4 Niet-relationeledatabases
'_id': 1, 'merk': 'Motorola', 'modellen': [
'model': 'Moto E13',
'GB': 64, 'prijs': 99.00
'model': 'Moto E20',
'GB': 32, 'prijs': 99.00
Schemas
CONCEPT
Bijrelationeledatabaseshebbenweschema’s(structuur,datatypesensleutels)gemaaktvoordeverschillende tabellenvoordedatabase.Danpashebbenwedegegevensingevoerd.MetDocumentStores(endemeeste andereNoSQL-databases)isdatniethetgeval.Jekuntgegevensinhetdocumentinvoerenzondereenvooraf gedefinieerdschema.
Schemalozedocumenten
Schemalozedocumentenzijnongestructureerdeensemi-gestructureerdedocumenten.Zokunnentweewillekeurige documenteneenanderestructuureneenandergegevenstypebevatten.Bijvoorbeeldalseengebruikerervoor kiestomzijnemailnietoptegeven,zoudatnieteenseenveldinhetdocumentzijn.Alseenanderegebruiker haaremailopgeeft,isdateenveldenkelindatspecifiekdocument.Inonsschemavoordeklanteninonze relationeledatabaseinhetvorigeblokMySQLhebbenalleklanteneenkolomvooremailgekregen-indatgeval zouhetalleengeenwaardebevattenbijsommigeklantenenbijsomigewel.
Relaties
DocumentStoreshebbengeenrefererendesleutels,zoalsrelationeledatabasesdatwelhebben.Zoalswegezien hebbengebruikenrelationeledatabases refererendesleutelsomrelatiestussentabellenaftedwingen.Alser eenrelatiemoetwordengelegdmeteendocumentendatabase,moetditophetdocumentmodelniveaugebeuren metgebruikvanenbeddeddocumenten.
(ZONDERBEELD-EN TAALREDACTIE)
Hetheleideeachterhetdocumentmodelisechterdatallegegevensdieaaneendocumentzijngekoppeld,in hetzelfdedocumentwordenopgeslagen.Denoodzaakomeenrelatietotstandtebrengenbijhetgebruikvan hetdocumentmodelzoudusnietzoregelmatigmoetenzijnalsineenrelationeledatabase.
{
{
}, {
} ] }
130
Documentgeoriënteerdedatabaseszijnzeergeschiktvooreenbreedscalaaangebruiksscenario's.Hierzijnenkele voorbeeldenvanwaareendocumentendatabasenuttigkanzijn.
• ContentmanagementsystemenCMS
• Bloggen,platformen
• eCommerce-toepassingen
• Analysevanhetweb
• Gegevensovergebruikersvoorkeuren
DeMySQL-serveralseenDocumentStore
DeXPlugininMySQLsteltjeMySQLServerinstaatomtecommunicerenmetclientsmetbehulpvandeXProtocol, zokunjeMySQLgebruikenalseendocumentopslag.DeXPluginisstandaardingeschakeldinMySQLServervanaf MySQL8.0.InhetvorigeblokhebjeMySQL8.0gedownloadengeïnstalleerd.DeXPluginisalgeïnstalleerdinje MySQL-server.
XProtocolondersteuntzowelCRUD-alsSQL-bewerkingen,authenticatieviaSASL,maaktstreaming(pipelining) vancommando'smogelijkenisuitbreidbaarophetprotocolendeberichtenlaag.Clientsdiecompatibelzijnmet
XProtocolzijnondermeerMySQLShellenMySQL8.0Connectors.
XDevAPI.
ClientsdiecommunicerenmeteenMySQLServerviaXProtocolkunnenXDevAPIgebruikenomapplicatieste ontwikkelen.XDevAPIbiedteenmoderneprogrammeerinterfacemeteeneenvoudigmaarkrachtigontwerp.In ditblokoefenjehoejeaandeslagkuntgaanmetdeJavaScript-implementatievanXDevAPIindeMySQLShell alsclient.
4.3 Begrippen
4.4 Oefentoets
Opdracht5
CONCEPT
Watisdequerytaalvandocumentgeoriënteerdedatabases?
SQL
NoSQL
DDL
DML
Opdracht6
Welkevandevolgendedatabasebeheersystemenisontworpenomgrotehoeveelhedenongestructureerdeen semi-gestructureerdegegevensteverwerken?
Relationele
Niet-relationele
Objectgeoriënteerd
(ZONDERBEELD-EN TAALREDACTIE)
Opdracht7
Welkevandevolgendedatabasebeheersystemengebruikthetdocumentgeoriënteerdmodel?
Relationele
Niet-relationele
Objectgeoriënteerd
131 Blok4 Niet-relationeledatabases
Opdracht8
WatzijndetakenvaneenDBMS?Erzijnmeerdereantwoordengoed. gegevensineendatabaseverwerken gegevensineendatabasecontroleren gegevensineendatabasemailen gegevensineendatabaseopslaan
Opdracht9
EendocumentcollectioninNoSQLiseenverzamelingvandocumenten.
Waar
Nietwaar
4.5 Praktijkopdrachten
Opdracht10 MaakeennieuweDocumentDatabase
a. Maakeennieuwedatabasemetdenaamhuisartsenpraktijk.
b. Starteennieuwesessionmetdedatabasehuisartsenpraktijk.
c. Maakdecollectionpatienteninjehuisartsenpraktijkdatabase.
d. Voegdepatientenuitdevolgendetabelaanjecollectiontoe.
Schemaloosdocumentem
Omdatcollectionsgeenschemahebben,kunnenweverschillendedocumententoevoegen.Bijvoorbeeld,alseen patientnoggeencolesteroltestheeftgedaan,kunjedatnietaandechecklijsttoevoegen.
Voegdevolgendepatientaanjepatientencollectiontoe.
patienten.add([
{
"naam":"Marco","e-mail":"marco@kpn.nl","phone":"0677663435", "checklijst":{
CONCEPT (ZONDERBEELD-EN TAALREDACTIE)
"hogebloedruk":false,"diabetes":true}
}
])
132
Voerdevolgendequeryuitomtezienwelkepatientennegatiefgetestzijnopcholesterol.Jezietdathetniet bekendisofMarconegatiefofpositiefisgetestopcholesterol.
patienten.find("checklijst.cholesterol = false")
CONCEPT
e. Codeereenqueryomtezienwelkepatientenpositiefgetestzijnopcholesterol.
f. Codeereenqueryomtezienwelkepatientenpositiefgetestzijnopdiabetes.
4.6 Terugblik
Opdracht11 Terugblik
Zeteenkruisjeindekolomdievoorjouvantoepassingis.
Beoordelingscriteria
(ZONDERBEELD-EN TAALREDACTIE)
Nee Ja
JekuntDocumentgeoriënteerddatabasesmaken.
JekuntDocumentCollectionsmakenmetNoSQL
JekuntgegevensuiteenCollectionhalenmetNoSQL
JekuntgegevensuiteenCollectionverwerkenmetNoSQL
133 Blok4 Niet-relationeledatabases
Opdracht12 Terugblik
Denknaoverwatjehebtgedaaninditblok.
a. Noemtweedingenwaaroverjetevredenbent.
1.
2.
b. Noemtweedingendiejedevolgendekeeranderswiltdoen.
1.
2.
c. Vraagjedocenten/ofleermeesteromfeedback.
Tops:
Tips:
4.7 Toets
Opdracht13
Watiseenquery?
Eendatabasemodel
Eenverzoekomtoegangtekrijgentotgegevensuiteendatabase
Eenrelatietussentweedocumenten
Opdracht14
WelkezijneigenschapenvanNiet-relationeledatabases?Erzijnmeerdereantwoordengoed. gestructureerde,semi-gestructureerdeenongestructureerdegegevens schaalbaar
enormegegevensopslag
eendatastructuur
Opdracht15
Welkezijndeviersoortenniet-relationeledatabases?
Key-Value
Wide-Column
(ZONDERBEELD-EN TAALREDACTIE)
Table
Graph Document
Opdracht16
Hebbendocumentgeoriënteerddatabasesrefererendesleutels?
134
CONCEPT
Opdracht17
Inwelkeformaatschrijfjedocumentgeoriënteerdedatabases?
Word-formaat
JSON-formaat
Excel-formaat
(ZONDERBEELD-EN TAALREDACTIE)
CONCEPT
Ja Nee
135 Blok4 Niet-relationeledatabases
A attributen18,20 C Constantegegevens25 D DataControlLanguage79 DataDefinitionLanguage73 DataManipulationLanguage75 DataQueryLanguage76 DatabaseManagementSystem128 Derdenormaalvorm29 E één-op-één-relatie22 eén-op-veelrelatie22 Eerstenormaalvorm27 EntiteitRelatieDiagram21 entiteiten18 entiteittypen18 G Gegevensanalyse18 I INNERJOIN102 J JOIN-query101 K koppelendeentiteit21 M MySQL73 N niet-relationeledatabases128 Normalisatie25 Normalisatieprocessen26 NoSQL128 nul-optionaliteit23 nuldenormaalvorm26 P primairesleutel21 Procesgegevens25 R RDBMS73 S sleutels18 soortengegevens25 SQL73 Storedprogramma’s106 subquery89,99 T top-down-methode19 TransactionControlLanguage80 Tweedenormaalvorm28 V veel-op-veelrelatie23 verwijzendesleutel21 136
INDEX CONCEPT (ZONDERBEELD-EN TAALREDACTIE)