Title: ontwerp een datamodel Criteria voor een goed model Ontwerppatronen
1ontwerp een datamodelCriteria voor een goed
modelOntwerppatronen
2SQL deel 2 datamodel ontwerp
- Datamodel
- Criteria
- Proces
3Modulariteit
4Op te leveren in week 9 één document met daarin
- Domein afbakening
- Entiteiten Relatie Diagram
- Tabel Definities
- Eventueel voorbeeld Data
- Views / Voorbeeld Queries ( reparatie
onvoldoende toets ) - Werk in groepjes van 3 onder leiding van één
expert. - De expert gaat voor een G als alle groepsleden
een goed model opleveren. - De anderen gaan voor een V als eigen model goed
wordt opgeleverd.
5Criteria
- Vaardigheden SQL, genormaliseerd ERD
- Jargon, terminologie, vaktermen
- Bronnen en gereedschappen
- Overdraagbaar, begrijpelijk documentatie
- Zinvolle, relevante toepassing
- Samenwerking, advies vragen en geven
- Interesse en ontwikkeling
6voorwaarden
- Op tijd inleveren
- Week 9
- Correct nederlands
- Weinig taalfouten
- Gestructureerd document
- Titel, inhoudsopgave, paginanummers, etc.
- Compleet
- Met bijlagen of links naar broncode
- Voorzien van metadata
- Naam, nummer, klas, datum, vak, beoordelaar
- Reflectie
- Beschrijf waarom jij vind dat je aan de criteria
voldoet.
7Ontwerpmethode
- Afbakening van het domein
- Beschrijven van de relevante informatie
- Beschrijven van gebruiksmogelijkheden (use cases)
- Formaliseren van entiteiten en relaties (ERD)
- Benoemen van entiteiten, attributen en relaties
- Entity relation diagram
- Functionele toetsing
- Datatypen en ------------------------------------
-----------------------beperkingen - Optimaliseren van het model
- Waarborgen integriteit ( stored procedures,
triggers, etc) - Optimaliseren perfomance ( indexen e.a.
maatregelen )
8Plan van aanpak
- Wk 6 afbakening van het domein
- Huiswerk versie 1 van het datamodel
- Wk 7 criteria voor goed datamodel
- Huiswerk versie 2 van het datamodel
- Wk 8 roostervrij Huiswerk afronding van het
datamodel - Wk 9 oplevering presentatie en documentatie
datamodel - Wk 10 feedback feedback per team
-
9Afbakening
- Welke informatie zal de database bevatten?
- Tot op welke details?
- entiteiten en/of functionaliteiten ?
- Welke entiteiten behoren tot het domein? En
welke niet? - Welke functies zal de database moeten kunnen
vervullen? Wat moet een gebruiker kunnen doen? (
use case diagram ) - Schrijf het resultaat op je blog !
10Sterke en zwakke entiteiten
- Niet alle entiteiten zijn even belangrijk in het
datamodel. - Sterke entiteiten
- 2 to 5 kern-entiteiten
- Worden in ieder geval in het model opgenomen, ook
als andere entiteiten er niet zouden zijn. - Raken de essentie van je concept
- Zwakke entiteiten
- Beschrijven veelal relaties tussen sterke
entiteiten - Zijn afhankelijk van sterke entiteiten.
- Opzoeklijstjes
11Opdracht
- Identificeer de belangrijkste sterke entiteiten
- Identificeer relaties tussen deze entiteiten
- Maak een eerste conceptueel datamodel
- NB
- - Beperk je tot 2 tot 5 entiteiten
12Opdracht.
- Maak een eerste versie van een ERD voor jouw
collectie database, waarbij de nadruk ligt op - Zijn alle belangrijkste entiteiten gevonden
- Zijn de attributen in kaart gebracht
- Zijn de relaties in kaart gebracht
- Vergelijk met je use case. Is het datamodel een
basis voor alle gebruiksmogelijkheden?
13Criteria voor een goed datamodel
14Stap 2 datamodel ( ERD )
- Criteria voor een goed model
- Naamgevingsconventies
- 3de normaalvorm
- Voor teggies
- Integriteit waarborgen. Middels triggers, stored
procedures, e.d. - Optimalisatie.Indexeren, views
15Naamgeving (algemeen)
- Geen spaties ( eventueel underscore _ )
- Geen gekke karakters
- Geen afkortingen
- Niet beginnen met een cijfer
- Consistent gebruik hoofdletters
- De naam beschrijft het element precies,
- Laat niets te raden over.
- Liever een lange naam, dan een onduidelijke naam
16Tabelnaam enkelvoud
- Tabel naam
- Naam van de entiteit op één rij
- Enkelvoud
- forum
- berichtID
- auteur
- tekst
- datum
- bericht
- ID
- auteur
- tekst
- datum
- berichten
- berichtID
- auteur
- tekst
- datum
17Naamgeving attribuut/kolom
- De scope van betekenis is de entiteit( de sql
code wordt dan leesbaar ) - bij FKs de naam van de relatie als prefix.
(vaak is dat ook de naam van de tabel waarnaar
wordt verwezen)
- bericht
- berichtID
- berichtauteur
- berichtTekst
- datum
- bericht
- ID
- auteurID
- tekst
- datum
18Opdracht datamodel versie 1
- Controleer je datamodel op bovengenoemde
naamgevingsconventies.
19Stap 2 datamodel ( ERD )
- Criteria voor een goed model
- Naamgevingsconventies
- 3de normaalvorm
- Voor teggies
- Integriteit waarborgen. Middels triggers, stored
procedures, e.d. - Optimalisatie.Indexeren, views
203de normaalvorm
213de normaalvorm
- Regel 1 eenvoud
- Als je ingewikkelde als-dit,dan-dat
constructies of procedures nodig hebt om de
betekenis van je elementen uit te leggen zit je
fout. - Regel 2 vermijdt redundantie
- Data mag maar één keer voorkomen, zodat het
praktisch ommogelijk is dat de database
inconsistente informatie bevat (waarborgt de
integriteit)
22Data-elementen zijn atomair
- Geen samengestelde waarden in één kolom
- Voorachternaam, straatnummerplaats
- Geen herhalende waarden in één tabelcel
- Komma gescheiden lijst productnummers(gebruik
een aparte tabel) - Laat de betekenis niet afhangen van andere
elementen - Bij studenten is contact een emailadres en bij
docenten is contact een telefoonnummer.
23Data element zijn atomair
- Fout
- Naam Fons van Kesteren
- Goed
- Voornaam Fons
- Achternaam Kesteren
- Tussenvoegsel van
- NB dit hangt wel een beetje af van hoe je deze
dataelement wilt gaan gebruiken. Als je denkt
dat je voor en achternaam nooit hoeft te
onderscheiden, dan hoef je ook geen aparte
kolommen te maken.
24Vermijdt redundantie ( 1 )
- Iedere rij in een tabel bevat attributen van één
entiteit en niets dan attributen van die ene
entiteit. - Iedere rij heeft een unieke sleutel ( of
gecombineerde sleutel )
- voetballer
- ID
- naam
- club
- trainer
- voetballer
- ID
- naam
- clubID
25Hoe ver moet je gaan?
- voetballer
- ID
- naamID
- clubID
- adresID
- naam
- ID
- voornaam
- achternaam
- adres
- ID
- straat
- postcode
- plaats
26Hoe ver moet je gaan
- Is_voetballer_bij_club
- persoonID
- clubID
- persoon
- ID
- voornaam
- achternaam
- adresID
- club
- ID
- naam
- trainerID
- adresID
- adres
- ID
- straat
- postcode
- plaats
27Hoe ver moet je gaan
- Is_lid_van_club
- persoonID
- clubID
- rol speler,trainer
- persoon
- ID
- voornaam
- achternaam
- adresID
- adres
- ID
- straat
- postcode
- plaats
28Vermijdt redundantie (2)
- Data-elementen die afgeleid kunnen worden mogen
niet in de tabel voor komen
- product
- ID
- prijs
- btw
- Prijs_inc_btw
29Voorbeelden van misontwerp
- http//www.sum-it.nl/cursus/dbdesign/hollands/inde
x.php3
303de normaalvorm
- Regel 1 eenvoud
- Data-elementen zijn atomair
- Regel 2 vermijdt redundantie
- Per rij, een entiteit (zo niet dan tabel splitsen
) - Geen kolommen die berekend kunnen worden
31opdracht
- Controleer je datamodel op 3de normaalvorm
- Verbeter indien nodig, en maak nieuwe flap
- Vergelijk met je use case. Is het datamodel een
basis voor alle gewenste gebruiksmogelijkheden?
32huiswerk
- Download DBDesigner4 van fabforce.net
- Maak een eerste versie van een ERD voor jouw
collectie database, waarbij de nadruk ligt op - Zijn alle belangrijkste entiteiten gevonden
- Zijn de attributen in kaart gebracht
- Zijn de relaties in kaart gebracht
- Vergelijk met je use case. Is het datamodel een
basis voor alle gebruiksmogelijkheden?
33Werken met DBdesigner
- Relaties leggen
- Gebruik alleen de 1ste ( one-to-many) en de 3de
(many-to-many) relatietype - DBDesigner en mySQL
- Connectie met mySQL
- Database, naam, wachtwoord -gt connect
- Database Synchronization
- Model doorvoeren in mySQL
34DataModellen
35Logische Model vs. Fysiek Model
- Logisch model
- entiteiten, attributen en relaties
- Geen details met betrekking tot database
realisatie - Geef relaties een naam
- Fysiek model
- tabellen, kolommen, PKs/FKs
- Bepaal details database realisatie PKs/FKs ,
datatypen
36many-to-one, many-to-many, one-to-one
- Hoe kunnen we deze verschillende logische
relaties in een fysiek datamodel realiseren? - one-to-one
- one-to-many / many-to-one
- many-to-many
37Belangrijke tip
- Geeft de relatie een naam
- boek is_geschreven_door auteurauteur
is_schrijver_van boek - student is_ingeschreven_bij vakvak
wordt_gevolgd_door student - Bepaal multipiliciteit
- Logische many-to-one, one-to-many Fysiek
FK in many-tabel verwijst naar PK in
one-tabel - Logisch many-to-many Fysiek creeer een
tussentabel
38Many-to-one FK to PK
- voetballer is_lid_van club
- meer voetballers zijn lid van een club
- De Foreign Key verwijst naar de Primary Key
- voetballer
- ID
- naam
- clubID
39Many-to-Many tussentabel
- persoon is_lid_van vereniging
- meer personen zijn lid van meer verenigingen
- Gebruik een tussentabel voor de relatie
- De relatie opvatten als entiteit ( lidmaatschap
)
- ls_lid_van
- persoonID
- verenigingID
- ...
- vereniging
- ID
- Naam
- ...
- ...
40Meer ontwerppatronen
41Opdracht ( vijf minuten )
- Controleer je datamodel op de volgende punten
- Naamgeving
- Is de naamgeving goed? (enkelvoud)
- Normalisatie
- Zijn alle data-elementen atomair?
- Bevat het model redundante data-elementen?
- Relaties
- Is bij iedere relatie de multipliciteit bepaald?
- Is de multipliciteit vertaald naar correcte
relaties? - many-to-one FK in many-tabel naar PK in
one-tabel - Many-to-many tussen tabel ( zwakke entiteit )
- Ontwerppatronen
- Welke ontwerppatronen uit de reader gebruik je.?