CONCEPT_BBO_DATABASES

Page 1

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)

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.