Thinking of development Databases Arjan Scherpenisse HKU / Miraclethings
Thinking of Development, semester II — 2012/2013
Agenda voor vandaag · Opdracht tussenstand · State diagram / Observer pattern · Bret Victor · Databases
Thinking of Development, semester II — 2012/2013
2/42
Opdracht tussenstand · Slides van vorige week: #fail · Let wel: het state diagram wat je beschrijft gaat om de state van de software van het project! · State diagram != flowchart
Thinking of Development, semester II — 2012/2013
3/42
State diagram is geen flowchart · In een flowchart beschrijf je de opeenvolging van acties · Eigenlijk pseudocode, maar dan grafisch · Een flowchart beschrijft acties · Je zou kunnen zeggen: Vanuit de gebruiker
Thinking of Development, semester II — 2012/2013
4/42
Dit is een flowchart
Thinking of Development, semester II — 2012/2013
5/42
State diagram != flow diagram · In een statediagram beschrijf je de opeenvolging van states · Een state is passief · Heeft in principe geen begin of eind, het is gaande · Vergelijk: - "Ik ben vrolijk" versus "Ik lach", - "Ik ben aan het vechten" vs. "ik deel een dreun uit" · Een state diagram is vanuit de machine geredeneerd
Thinking of Development, semester II — 2012/2013
6/42
Dit is een state diagram
Thinking of Development, semester II — 2012/2013
7/42
Observer pattern
Zijn daar nog vragen over? :-) Belangrijkste les: Loose coupling is goed Voor de techneuten: youtube heeft veel uitleg
Thinking of Development, semester II — 2012/2013
8/42
Databases
Thinking of Development, semester II — 2012/2013
Wat is een database? “ A database is an organized collection of data for one or more purposes, usually in digital form. ”
source: Wikipedia
Thinking of Development, semester II — 2012/2013
11/42
"Data?" · Meetwaardes · Met de hand ingevoerd · Het telefoonboek · Webshop: Producten · Fotocollecties · Facebook
Thinking of Development, semester II — 2012/2013
12/42
Wat is een database? · Functioneel - Gestructureerde manier van opslag van informatie - Manieren om data erin op te slaan - … en op te vragen ("query'en") · Operationeel - Altijd beschikbaar - Betrouwbaar - Snel - Backup / restore
Thinking of Development, semester II — 2012/2013
14/42
Soorten databases · Relationele databases · Object-databases · Graph databases · Key/value stores · SQL vs. NoSQL databases
Thinking of Development, semester II — 2012/2013
15/42
Relationele databases · Meest gebruikte databasesoort · Grote Namen: Oracle, MS SQL Server, IBM DB/2, ... · Open source: MySQL, sqlite, Postgres... · Werken allemaal met SQL · Tabellen staan centraal · Er liggen relaties tussen tabellen
Thinking of Development, semester II — 2012/2013
16/42
Je games collectie Tabel: game Game
Jaar
Platform
Publisher
GTA: Vice City
2002
Windows
Rockstar
Black & White: Creature isle
2002
Windows
Lion head
Thinking of Development, semester II — 2012/2013
17/42
…en natuurlijk hebben ook databases weer diagrammen
Thinking of Development, semester II — 2012/2013
18/42
Database diagram, versie 1
Een database diagram toont het ontwerp van je database, ook wel het database schema genoemd
Thinking of Development, semester II — 2012/2013
19/42
Intermezzo: Diagram-tools · Dia - gratis, simpel en betrouwbaar. ...wel lelijk · LibreOffice Draw - net ietsje meer features · Mac only: Omnigraffle - very slick · Windows: Microsoft Visio features+++
Thinking of Development, semester II — 2012/2013
20/42
Je games collectie, vervolg… Tabel: game Game
Jaar
Platform
Publisher
GTA: Vice City
2002
Windows
Rockstar
Black & White: Creature isle
2002
Windows
Lion head
Black & White 2
2005
Windows, OSX
Lionhead
Spore
2008
Win, Wii
Maxis
· Data wordt inconsistent ingevoerd... · Wat nu als ik een lijstje wil van alle games die op windows draaien? · Hoe identificeer ik een game?
Thinking of Development, semester II — 2012/2013
21/42
We voegen een primary key toe Tabel: game Id
Game
Jaar
Platform
Publisher
1
GTA: Vice City
2002
Windows
Rockstar
2
Black & White: Creature isle
2002
Windows
Lion head
3
Black & White 2
2005
Windows, OSX
Lionhead
4
Spore
2008
Win, Wii
Maxis
· De key heet in dit geval "id" (van: identifier). Dat is een conventie. · Zo'n identifier noemen we ook de Primary Key van een tabel. · Deze moet altijd uniek zijn voor iedere rij in een tabel.
Thinking of Development, semester II — 2012/2013
22/42
Een tabel voor publisher Tabel: publisher Id
Naam
1
Rockstar
2
Lionhead
3
Maxis
Tabel: game Id
Game
Jaar
Platform
Publisher Id
1
GTA: Vice City
2002
Windows
1
2
Black & White: Creature isle
2002
Windows
2
3
Black & White 2
2005
Windows, OSX
2
4
Spore
2008
Win, Wii
3
Foreign key · We hebben dus nu een verwijzing van de ene tabel naar de andere · Dat heet een "foreign key" · "Verwijzing" == "relatie" - vandaar de naam relationele database
Waarom handig: · Gegevens niet dubbel opslaan · Voorkom typfouten / user input fouten
Thinking of Development, semester II — 2012/2013
24/42
Database schema, versie 2
· Many-to-one: many games have the same (one) publisher
Thinking of Development, semester II — 2012/2013
25/42
Many-to-many We moesten nog wat met onze platforms doen....
Tabel: platform Id
Naam
1
Windows
2
OSX
3
Wii
- Maar.... games kunnen op meerdere platforms zijn uitgebracht - Many games have many platforms Een foreign key (many-to-one) werkt hier dus niet!
Thinking of Development, semester II — 2012/2013
26/42
Database schema, versie 3
Hiervoor maken we een koppeltabel Tabel: game_to_platform Game
Platform
GTA: Vice city
Windows
Black & White: Creature isle
Windows
Black & White 2
Windows
Black & White 2
OSX
Spore
Windows
Spore
Wii
Thinking of Development, semester II — 2012/2013
28/42
.. maar dan met ips ipv namen: Tabel: game_to_platform Game Id
Platform Id
1
1
2
1
3
1
3
2
4
1
4
3
Thinking of Development, semester II — 2012/2013
29/42
Hoe ziet een database eruit?
· Een database heeft eigenlijk geen gezicht. · Het is meestal een programma, een server die op de achtergrond draait
Thinking of Development, semester II — 2012/2013
31/42
Real world
Probeer zelf uit: Demo Mysql interface
Thinking of Development, semester II — 2012/2013
32/42
SQL: Structured Query Language · Structured: Je data is gestructureerd · Query: Je gebruikt het om data op te vragen · Language: Het is echt een taaltje · Opdrachten in SQL noem je: Queries · Alle relationele databases "verstaan" SQL, ze hebben een SQL interface · In praktijk gebruik je SQL nooit direct maar altijd via een andere programmeertaal, bijvoorbeeld PHP.
Thinking of Development, semester II — 2012/2013
34/42
Een directe SQL interface
Thinking of Development, semester II — 2012/2013
35/42
SQL “ Geef me alle games ” SELECT * FROM game
“ Alle games uit 2002 ” SELECT * FROM game WHERE year = 2002
Thinking of Development, semester II — 2012/2013
36/42
Algemene structuur “ SELECTvelden FROMtabelnaam
( WHEREconditie ) ( ORDER BYveld ) ”
Thinking of Development, semester II — 2012/2013
37/42
Nog meer SQL · INSERT INTO ...- voor het toevoegen van data · UPDATE ...- voor het updaten van data · DELETE ...- voor het verwijderen van data · CREATE TABLE xx (...)- aanmaken van een tabel · DROP TABLE xx (...)- verwijderen van een tabel SQL tutorial
Thinking of Development, semester II — 2012/2013
38/42
Normalisatie · Het "opschonen" of opsplitsen van de database zoals we dat net hebben doorlopen heet normalisatie · Afweging tussen data-duplicatie en complexiteit · Je kan het ook overdrijven!!!!
Thinking of Development, semester II — 2012/2013
39/42
Databases samenvatting · Gestructureerde opslag · Denk in losse tabellen (ook wel: entiteiten) · Hierbij gebruik je normalisatie · Verschillende soorten interfaces · SQL is de meest algemene interface
Thinking of Development, semester II — 2012/2013
40/42
Database tips
MySQL - meest gangbare database op het web PHP voorbeeld
SQLite - voor embedded databases in andere programma's Voorbeelden in C#, in Processing
Thinking of Development, semester II — 2012/2013
41/42
That's all, folks!
a.s. dinsdag: deadline opdracht statemachines Volgende college: 14 maart 2013, 15:10
Thinking of Development, semester II — 2012/2013
42/42