Thinking of development Databases Arjan Scherpenisse HKU / Miraclethings
Agenda voor vandaag Opdracht tussenstand State diagram / Observer pattern Bret Victor Databases 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 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 4/42
Dit is een flowchart 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 6/42
Dit is een state diagram 7/42
Observer pattern Zijn daar nog vragen over? :-) Belangrijkste les: Loose coupling is goed Voor de techneuten: youtube heeft veel uitleg 8/42
Databases
Wat is een database? A database is an organized collection of data for one or more purposes, usually in digital form. source: Wikipedia 11/42
"Data?" Meetwaardes Met de hand ingevoerd Het telefoonboek Webshop: Producten Fotocollecties Facebook 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 14/42
Soorten databases Relationele databases Object-databases Graph databases Key/value stores SQL vs. NoSQL databases 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 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 17/42
en natuurlijk hebben ook databases weer diagrammen 18/42
Database diagram, versie 1 Een database diagram toont het ontwerp van je database, ook wel het database schema genoemd 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+++ 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? 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. 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 24/42
Database schema, versie 2 Many-to-one: many games have the same (one) publisher 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! 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 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 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 31/42
Real world Probeer zelf uit: Demo Mysql interface 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. 34/42
Een directe SQL interface 35/42
SQL Geef me alle games SELECT*FROMgame Alle games uit 2002 SELECT*FROM game WHERE year = 2002 36/42
Algemene structuur SELECTvelden FROMtabelnaam ( WHEREconditie ) ( ORDER BYveld ) 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 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!!!! 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 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 41/42
That's all, folks! a.s. dinsdag: deadline opdracht statemachines Volgende college: 14 maart 2013, 15:10 42/42