Van een ER-diagram naar een database specificatie in SQL



Vergelijkbare documenten
Het omzetten van een ER-diagram naar SQL

6. Het maken van een database

Informatica toets vwo 6 Databases

Toets informatica V5 module VIII hfst 1, 2 en 3 februari 2011

SQL datadefinitietaal

hoofdstuk 9 referentiële integriteit waarborgen overige constraints 9.1 Referentiële integriteit relationele databases 9.1

Structured Query Language (SQL)

Opleiding SQL / Systeemanalyse IBK ERD. Hogeschool Rotterdam

Hoofdstuk: 1 Principes van databases

Entity-Relationship Diagram (ERD) Modelleren

Data Definition Language

Les S-01: De basisbeginselen van SQL

Databases - Inleiding

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

Les 2 Eenvoudige queries

Uitwerking toets modelleren voor vwo 6

Databases en SQL Foundation (DBSQLF.NL)

DATAMODEL SQL. Middelbare School. Versie 1.0 Datum 30 oktober 2010 Auteur Mark Nuyens, studentnummer: Groep TDI 1

Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010

Databanken - les 2.

Na bestudering van dit hoofdstuk, moet je tot het volgende in staat zijn:

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

Databanken - les 2.

Miniles gegevensbanken bevragen met SQL

Koppeling met een database

EXIN Databases en SQL Foundation

Sparse columns in SQL server 2008

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober A. Snippe ICT Lyceum 1

En hoe gaan ze dit allemaal terugvinden?

SQL STATEMENTS. Deze kolom kan grote stukken tekst aan en is bedoeld om tekst erin de plaatsen. Geheel getal, bijvoorbeeld 8, 63, 835 NUMERIC

Van CaseTalk naar een database in SQLite studio

Informatie & Databases

12. Meer dan één tabel gebruiken en sub-queries

Les 10 : Aanmaken van een database (deel2).

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

Variabelen en statements in ActionScript

Cursus Analyse voor Web Applicaties 1. Webdesign / Web Programmeren Analyse voor web applicaties SDM methode + Basis UML

het bank voorbeeld ISO Datamodelleren modelleren met het E-R R model een database ontwerpen verzamelingen van relaties (verbanden)

8. De invoer van gegevens

Les S-01: De basisbeginselen van SQL

SQL: query taal met. woorden. ISO SQL: Structured Query Language. de SQL basis query structuur. voorbeeld: doel: intuitieve query taal

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64

ISO SQL: Structured Query Language

Ontwerp. <naam applicatie>

EXIN Databases en SQL Foundation

Opleiding Technische Informatica Ontwerp Gericht Onderwijs 1.1 (2IO50) Technische documentatie

1 Download de database 'bieren.mdb' en bewaar het bestand in c:\werkmap van je computer.

7. Het selecteren van gegevens

[TOETS SQL INLEIDING]

DBMS SQL. Relationele databases. Sleutels. DataBase Management System. Inleiding relationele databases. bestaan uit tabellen.

Databases SQL - meerdere tabellen

Gebruiksvriendelijkheid: Gebruiksaanwijzing:

Inleiding Databases en Data Base Management Systems Tabellen Wat is SQL?... 5

INFORMATIEANALYSE VOLGENS HET ER-MODEL

Tentamen Informatica 6, 2IJ60,

Uitleg conversie bestand

Waarom Access. In de onderstaande afbeelding ziet u een begin van de lijst met cliëntgegevens van de diëtiste.

voorbeeldexamen I-Tracks Databases and SQL Foundation Voorbeeldexamen DBSQLF Uitgave juni 2006

9 Werken met meer tabellen (zie ook query s)

Introductie (relationele) databases

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

NHibernate als ORM oplossing

4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen.

Normaliseren voor Dummies

Projecten Applicatie Ontwikkeling

Relationele Databases 2002/2003

Tentamen Databases. 18 december :00-12:00, Educatorium Gamma

Entiteit Zaken en gebeurtenissen waarvan gegevens moeten worden vastgelegd worden een entiteit genoemd: b.v. mens, voorstelling, auto.

Relationele Databases 2002/2003

Relationele Databases 2002/2003

Een introductie tot gegevensbanken

Het toepassen van een gelaagde architectuur

Vakgroep CW KAHO Sint-Lieven

= > >= < <= BETWEEN IS NULL IS NOT NULL

HBO5 Informatica Netwerkbeheer (90 studiepunten)

Gekoppelde tabellen: de JOIN

Eindtoets. Opgaven. 1 Gegeven is het domeinmodel van figuur 1. Domeinmodel voor betalingen. Eindtoets I N T R O D U C T I E.

Leerjaar 1/2 ICT-Academie. Niveau 4. Applicatie ontwikkeling

Leermateriaal Netwerk Open Hogeschool Informatica. Annoteren. Auteur: Cees van Diest. Datum: 26 maart Versie: 1.0.

SQL & Datamodelleren

SQL / Systeemanalyse

PROGRAMMA Vak: Informatica..

opstarthandleiding mysqlworkbench November 2012 Fons van Kesteren HVA- CMD- V1 Datamodelleren

Handleiding configuratie en gebruik tekenmodule

TECHNISCHE UNIVERSITEIT DELFT Sectie Database Systemen Zuidplantsoen BZ DELFT. Oefening Inleiding Database Systemen. Opgave: Prakticumbeheer

DATAMODELLERING ER DIAGRAM

Handleiding ChainWise Data import Module

Documentatie DHD thesauri Bijlage 1 : Uitleverformaat 2.2 Diagnosethesaurus

Relationele database. Het relationele model

SQL.

Integriteitsbewaking bij een relationele database

gravita PSUR-C conversie en import van relaties in PSU Relatiebeheer Algemeen

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

Database Structuur via menus

Nummer: 011 ( ) The Courseware Company

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.

databases & SQL - antwoorden

In deze appendix wordt bekeken wat er moet gebeuren voordat

Module 1 Programmeren

Transcriptie:

Van een ER-diagram naar een database specificatie in SQL Huub de Beer Eindhoven, 4 juni 2011 Inhoudsopgave 1 Inleiding 1 2 Van een ER-diagram naar het relationele model 1 3 Van relationeel model naar SQL 5 3.1 Typen............................... 7 3.2 Optionaliteit en de NULL waarde................. 8 4 Opgaven 8 1 Inleiding Het omzetten van een ER-diagram naar een database specificatie in SQL verloopt in twee stappen. Allereerst zet je het ER-diagram om naar een database specificatie in het relationele model (zie paragraaf 2). Vervolgens zet je die specificatie in het relationele model om naar een database specificatie in SQL (zie paragraaf 3). Tot slot worden er een aantal opgaven gegeven waarmee je deze tweeledige omzetting kunt oefenen. 2 Van een ER-diagram naar het relationele model In hoofdstuk 3 van Module VIII heb je geleerd hoe je een ER-diagram omzet naar een database specificatie in het relationele model. Dit proces wordt hier 1

ll_nr foto vakcode geboorte_datum Leerling volgt Vak klas punt URL bestaat uit maakt inleverdatum inlevertijd 1,1 deadline Opdracht titel opdrachtcode opdrachttekst Figuur 1: Een ER diagram voor een eenvoudige ELO nog eens kort herhaald. In figuur 1 zie je een eenvoudig ER-diagram voor een educatieve applicatie. Een vak bestaat uit een aantal opdrachten; leerlingen volgen een vak en maken opdrachten. Je vertaalt entiteittypen en attribuuttypen in het ER-diagram direct naar, respectievelijk, relaties en attributen in het relationele model. Ook de identiteit van een entiteittype heeft een vergelijkbare tegenhanger in het relationele model: de primaire sleutel van een relatie. Het entiteittype leerling vertalen we dus als volgt naar de relatie leerling: leerling (ll_nr,, geboorte_datum, foto, klas). De primaire sleutel van een relatie onderstreep je; elke relatie heeft een primaire sleutel. Het vertalen van relatietypen uit het ER-diagram is iets lastiger. Een relatietype tussen twee (of meer) entiteittypen geven we in het relationele model aan door de primaire sleutel van een relatie op te nemen in een andere 2

relatie als een vreemde sleutel. Zo n vreemde sleutel verwijst dus naar een primaire sleutel in een andere relatie en daarmee zijn de twee relaties met elkaar verbonden. Een vreemde sleutel plaats je tussen < en >. Er zijn drie verschillende soorten relatietypen: één-op-één, één-op-veel en veel-op-veel. Deze soorten relatietypen vertaal je als volgt naar het relationele model: 1. Bij een één-op-veel relatietype komt de primaire sleutel van het entiteittype met cardinaliteit N als een vreemde sleutel bij het entiteittype met cardinaliteit 1. We annoteren dit in het ER-diagram met een pijl van de N-kant naar de 1-kant. (Zoals het relatietype bestaat_uit in Figuur 2) 2. Bij een veel-op-veel relatietype vertaal je het relatietype uit het ERdiagram naar een nieuwe extra relatie in het relationele model. Van beide entiteittypen die door het relatietype verbonden worden, komt de primaire sleutel als een vreemde sleutel in de nieuwe relatie. We annoteren dit in het ER-diagram door het relatietype als een rechthoek te tekenen en pijlen te zetten van beide entiteittypen naar deze rechthoek in het midden. (Zoals de relatietypen volgt en maakt in Figuur 2) 3. Bij een één-op-één relatietype maak je zelf de keuze of de primaire sleutel van het ene entiteittype een vreemde sleutel wordt bij het andere, of andersom. Ook hier geef je dat aan met een pijl. (Niet in het voorbeeld.) 3

ll_nr foto vakcode geboorte_datum Leerling volgt Vak klas punt URL bestaat uit maakt inleverdatum inlevertijd 1,1 Opdracht deadline titel opdrachttekst Figuur 2: Het ER-diagram geannoteerd met de pijlen voor de vreemde sleutels en relatietypen die tabellen worden als rechthoeken. opdrachtcode De volledig geannoteerde versie van het ER-diagram van de educatieve applicatie vind je in Figuur 2. Zo n geannoteerd ER-diagram vertaal je eenvoudig naar een database specificatie in het relationele model. Alle rechthoeken worden een relatie, alle ovalen worden attributen, alle onderstreepte ovalen primaire sleutels en de pijlen geven aan welke primaire sleutels waar een vreemde sleutel worden. In Figuur 3 zie je het relationele model van het voorbeeld. 4

leerling (ll_nr,, geboorte_datum, foto, klas) volgt (<ll_nr>, <vakcode>) vak (vakcode, ) opdracht (opdrachtcode, titel, opdrachttekst, deadline, <vakcode>) maakt (<opdrachtcode>, <ll_nr>, URL, inleverdatum, inlevertijd, punt) Figuur 3: De database gespecificeerd in het relationele model. Merk op dat de relatie maakt een primaire sleutel heeft die bestaat uit twee vreemde sleutels. Als in het voorbeeld een leerling een opdracht vaker in zou kunnen leveren, dan zou ook de inleverdatum en inlevertijd onderdeel van de primaire sleutel uit moeten maken omdat de combinatie van het leerlingnummer en de opdrachtcode dan niet meer uniek hoeft te zijn. Let op dat bij relatietypen die omgezet worden naar een relatie er geen identiteit is aangegeven. Aan jou de taak om de primaire sleutel te definiëren. Over het algemeen bestaat de primaire sleutel van zo n verbindingsrelatie uit de vreemde sleutels, maar soms komen daar nog enkele andere attributen bij. Samenvattend: eerst annoteer je het ER-diagram en vervolgens stel je het relationele model van dat geannoteerde ER-diagram op. 3 Van relationeel model naar SQL Een database specificatie in het relationele model kun je eenvoudig omzetten naar een specificatie in SQL. SQL, voluit Structured Query Language, is een standaard taal om met databases te communiceren. Bijna elke database en elk database management systeem (RDMS) spreekt een variant van SQL. Meestal implementeert zo n databasesysteem niet alles van SQL of wordt er iets extra s aan toegevoegd, maar de basis is toch SQL. Daarom is het belangrijk dat je SQL kent: je kunt dan snel in voldoende mate met bijna elk databasesysteem overweg. SQL bestaat uit twee delen: SQL-DDL en SQL-DML. SQL - Data- Manipulation Language (SQL-DML) gebruiken we om informatie in de database op te vragen, te veranderen, te verwijderen of in te voeren. SQL-DML is het onderwerp van hoofdstuk 4 van Module VIII. SQL - Data-Definition Language (SQL-DDL) gebruiken we om nieuwe (onderdelen van) databases te specificeren. Je zet een specificatie in het relationele model om in een specificatie in SQL met behulp van SQL-DDL. 5

Alhoewel SQL-DDL vrij uitgebreid is, hoeven jullie maar een klein deel te kennen: jullie moeten in staat zijn om met SQL-DDL een eenvoudige tabel aan te maken. De relatie leerling (ll_nr,, geboorte_datum, foto, klas) specificeren we met behulp van SQL-DDL als volgt: CREATE TABLE leerling ( ll_nr CHAR(6) NOT NULL, VARCHAR(20) NOT NULL, geboorte_datum DATE NOT NULL, foto BLOB, klas VARCHAR(5) NOT NULL, PRIMARY KEY (ll_nr) ); Zo vertel je de database letterlijk om een tabel aan te maken met de leerling die bestaat uit de velden ll_nr,, geboorte_datum, foto en klas. Het veld ll_nr is bovendien de primaire sleutel. Elk veld geef je ook een passend type, maar daarover later meer. Met NOT NULL geef je aan dat een veld altijd ingevuld moet worden en de speciale waarde NULL dus niet is toegestaan. In dit voorbeeld hoeft blijkbaar niet elke leerling een foto te hebben. (Zonder expliciete vermelding van NULL of NOT NULL geef je aan dat de NULL-waarde is toegestaan.) Een relatie met een vreemde sleutel, zoals maakt (<opdrachtcode>, <ll_nr>, URL, inleverdatum, inlevertijd, punt) vertaal je op vergelijkbare wijze, er komen enkel twee vreemde sleutel specificaties bij: CREATE TABLE maakt ( opdrachtcode INTEGER NOT NULL, ll_nr CHAR(6) NOT NULL, url VARCHAR(50), inleverdatum DATE, inlevertijd TIME, punt NUMERIC(3,1), PRIMARY KEY (opdrachtcode, ll_nr), FOREIGN KEY (opdrachtcode) REFERENCES opdracht, FOREIGN KEY (ll_nr) REFERENCES leerling ); Net zoals je aangeeft welke velden de primaire sleutel vormen, zo geef je aan welke velden een vreemde sleutel vormen; je geeft ook aan naar welke tabel deze vreemde sleutel verwijst. Je geeft voor elke tabel waarnaar een vreemde sleutel verwijst een aparte vreemde sleutel specificatie. 6

Let op dat de vreemde sleutels precies hetzelfde type hebben als de primaire sleutel waarnaar ze verwijzen. Indien een vreemde sleutel dezelfde heeft als een al bestaand veld in de relatie, hernoem dan de vreemde sleutel. Een kan in een relatie maar één keer gebruikt worden. De rest van het voorbeeld vertaal je in de opgaven naar SQL-DDL. Tot slot: elk SQL-query dien je met een punt-komma af te sluiten. Dat geldt ook voor queries in SQL-DDL... 3.1 Typen Bij het vertalen van een relatie naar SQL is het jouw taak om de meest geschikte typen voor de attributen te kiezen. SQL kent veel verschillende typen en de meeste databasesystemen hebben nog veel meer typen. Jullie hoeven alleen maar de volgende typen te kennen: SQL CHAR(n) VARCHAR(n) TEXT INTEGER FLOAT NUMERIC(a,k) BOOLEAN DATE TIME BLOB betekenis Een stukje tekst van precies n tekens. Bruikbaar voor codes van vaste lengte Een stukje tekst van maximaal n tekens. Bruikbaar voor kleine stukjes tekst waar van tevoren de lengte niet bekend is, maar in elk geval kleiner of gelijk aan n tekens. Voorbeelden:, adres, woonplaats,... Een willekeurig lange tekst. Ongeschikt voor korte stukjes tekst zoals namen, titels, codes enzovoorts. Uitermate geschikt voor tekstbestanden, beschrijvingen, samenvattingen, enzovoorts Een geheel getal. Ook geschikt voor codes Een reëel getal Een kommagetal van maximaal a cijfers, waarvan k cijfers achter de komma. Bijvoorbeeld bruikbaar in financiële toepassingen of voor punten in educatieve toepassingen De waarde TRUE of FALSE Een datum Een tijd Binary Large OBject: bedoeld voor binaire bestanden zoals foto s, programmabestanden, films, enzovoorts Ongeschikte typen worden fout gerekend. Kies dus geen TEXT voor een 7

, of VARCHAR voor een datum. Bij CHAR en VARCHAR geef je ook altijd aan uit hoeveel tekens (maximaal) een waarde in een veld mag hebben. Vergelijkbaar geef je ook bij NUMERIC aan uit hoeveel cijfers een getal maximaal bestaat en hoeveel cijfers daarvan achter de komma staan. 3.2 Optionaliteit en de NULL waarde De cardinaliteit van een relatietype in het ER-diagram vertaal je naar het relationele model en SQL met vreemde sleutels en soms door middel van een extra relatie. Over optionaliteit hebben we tot nu toe nog niet gesproken. Als de optionaliteit van een één-op-één of een één-op-veel relatietype 0 is, dan hoeft de vreemde sleutel geen waarde te hebben. Met andere woorden, het veld met de vreemde sleutel kan dan een NULL waarde bevatten. Zorg dat de SQL specificatie van de relatie dat ook toelaat! Bij een optionaliteit 1 moet een entiteit altijd met een relatie meedoen. Dat houdt in dat een vreemde sleutel nooit de NULL waarde mag aannemen. Daarnaast moet de referentiële integriteit gewaarborgd blijven. Wat gebeurt er als je een rij verwijdert, moeten dan alle andere rijen die naar deze rij verwijzen ook verwijderd worden? En bij het invoeren van een rij moet de rij waarnaar verwezen wordt al bestaan? In SQL-DDL kun je verschillende van dergelijke problemen oplossen, maar dat doen we in deze cursus niet. Wij gaan er van uit dat de programmeur/- databasegebruiker zelf de referentiële integriteit in de gaten houdt. 4 Opgaven opgave 1 Zet het relationeel model van het voorbeeld (Figuur 3, pagina 5) om naar een database specificatie in SQL. De relaties leerling en maakt zijn al vertaald. Met andere woorden, geef de CREATE TABLE definities voor de relaties volgt, vak en opdracht. 8

opgave 2 Casus fietsenhandel prijs nieuw registratienummer staat Exemplaar 1,1 is een producent onderdeelnummer aantal prijs type Fiets behoort tot Onderdeel merk omschrijving groothandel Enkele opmerkingen: Type, merk, en producent zijn korte stukjes tekst als gazelle, city explorer, kids ride, enzovoorts. De staat is: goed, redelijk of slecht. De prijs heeft twee cijfers achter de komma. Het veld nieuw geeft aan of een fiets nieuw is of tweedehands. Opdracht a. Zet het ER-diagram om naar het relationele model. b. Zet het relationele model om naar een database specificatie in SQL. 9

opgave 3 Casus bibliotheek publicatie_jaar kaft exemplaarnummer status aanschafdatum auteur Boek 1,N is_een 1,1 Exemplaar titel ISBN samenvatting uitleendatum inleverdatum geleend door retourdatum lidnummer Lid Enkele opmerkingen: geboorte_datum adres De kaft is een foto van de voorkant van een boek. Het ISBN is een 10-cijferig nummer. De status van een exemplaar is: slecht, redelijk of goed. Het exemplaarnummer is een uniek geheel getal. Een lid kan meerdere exemplaren lenen; een exemplaar kan meerdere keren geleend worden, zelfs door hetzelfde lid. 10

Opdracht a. Zet het ER-diagram om naar het relationele model. b. Zet het relationele model om naar een database specificatie in SQL. opgave 4 Casus basisschool docentcode adres Leraar datum_indiensttreding salaris geboorte_datum opmerking_nr datum 1,N schooljaar Opmerking inhoud klas zit in klas bij 1,1 prioriteit groep 1,N ll_nr gaat over contactgegevens Leerling adres 0,1 geboorte_datum is van beschikbaarheid Hulpouder telefoonnummer Enkele opmerkingen: De docentcode, het leerlingnummer en het opmerkingnummer zijn gehele getallen. Het salaris is een 6-cijferig getal met twee cijfers achter de komma. 11

De prioriteit is: geen, laag, matig, hoog, noodgeval. De beschikbaarheid bestaat uit een aantal opmerkingen over wanneer en hoe de hulpouder beschikbaar is. De contactgegevens bestaan uit alle gegevens over de leerling waarmee contact gemaakt kan worden zoals telefoonnummers, wie de leerling verzorgt, waar de verzorgers overdag bereikbaar zijn, enzovoorts. De groep is 1, 2, 3, 4, 5, 6, 7 of 8. De klas bestaat uit een cijfer en een letter. Het schooljaar bestaat uit twee opeenvolgende jaartallen gescheiden door een slash, bijvoorbeeld 2009/2010. Leerlingen zitten in hun schoolcarrière in meerdere klassen en krijgen dus les van verschillende docenten. Idem dito geven docenten aan meerdere leerlingen les per leerjaar en dat voor verschillende leerjaren. Opdracht a. Zet het ER-diagram om naar het relationele model. b. Zet het relationele model om naar een database specificatie in SQL. 12

opgave 5 Casus softwarebedrijf cursus_beschikbaar notities Technologie hangt af van beheerst is nodig voor salaris start_datum 1,N adres startdatum 1,N omschrijving project_code sofinummer Medewerker werkt aan 1,N Project titel geboorte_datum prioriteit einddatum einddatum 1,1 werk als consult bij salaris startdatum 1,N is van kvk_nr Klant adres contactpersoon Enkele opmerkingen: Het sofinummer is een 9-cijferige code. Cursus_beschikbaar heeft de waarde TRUE of FALSE. Het kvk-nummer is een 12-cijferige code. De prioriteit is: geen, laag, normaal of hoog. De project_code is een geheel getal. 13

Opdracht a. Zet het ER-diagram om naar het relationele model. b. Zet het relationele model om naar een database specificatie in SQL. 14