Data lagring 2. iteration (implement backend)
Emner Grundlæggende database begreber. Data definitionskommandoer ER-diagrammer og cardinalitet/relationer mellem tabeller Redundant data og Normalisering Alternative Datalagringsmetoder
Database En database består af én eller flere tabeller Her er databasen wordpress valgt. Der er 10 tabeller
Diagrammet viser databasen bag blogging systemet wordpress
Tabel id title url En tabel svarer til en samling objekter af samme type. En tabel kaldes også en relation.
Række id title url En række svarer til ét objekt.
Kolonne id title url En kolonne svarer til en attribut for alle objekterne i en tabel.
SQL kommandoer: Data definition Manual til definition statements: http://dev.mysql.com/doc/refman/5.5/en/sql-syntax-data-definition.html
Starte MySQL fra kommandoprompt/terminal MAC: /Applications/MAMP/Library/bin/mysql -u root -p Windows: \Program Files\EasyPHP 3.0\mysql\bin\mysql -u root
start Eksisterer databasen? ja SHOW databases; USE myproject; Har databasen tabeller? nej nej CREATE database myproject; USE myproject; se næste slide CREATE TABLE users [...] ja SHOW tables; indsæt data
CREATE TABLE kommandoen CREATE TABLE testusers ( id INT AUTO_INCREMENT, firstname VARCHAR(40), lastname VARCHAR(40), PRIMARY KEY(id) );
Oversigt over almindelige kommandoer
Ændre database design ALTER TABLE - Rename Ændre tabellens navn: ALTER TABLE classics RENAME newname; ALTER TABLE - CHANGE Ændre navnet på en kolonne: ALTER TABLE classics CHANGE type category VARCHAR(16); ALTER TABLE - MODIFY Ændre datatypen på en kolonne: ALTER TABLE classics MODIFY year SMALLINT; ALTER TABLE - ADD Tilføje kolonne: ALTER TABLE classics ADD isbn CHAR(13); ALTER TABLE - DROP Slette kolonne: ALTER TABLE classics DROP id;
Indsætte og ændre data INSERT INTO - Indsætte data: INSERT INTO users(id, firstname) VALUES ( 1, Pete ); Flere rækker: INSERT INTO users(id, firstname) VALUES( 1, Pete ),( 2, Chris ),( 3, Martin ); UPDATE SET WHERE - ændre data: UPDATE users SET firstname='peter' WHERE id='1';
Data udtræk SELECT * FROM users; SELECT firstname FROM users; SELECT firstname FROM users WHERE id= 1 ;
ER diagrammer Entity Relationship
forfatter dataenheden (entity) har relation fornavn attribut id primær nøgle
forbindelse mellem en enhed og en relation forbindelse mellem en enhed og en attribut
kilde: http://commons.wikimedia.org/wiki/file:er_diagram_mmorpg.png
Tabel layout 1
Tabel layout 2 Kilde: http://www.orafaq.com/wiki/image:er_diagram.jpg
Tabel layout 3
Notation: Cardinalitet én-til-én 1 1 én-til-mange 1 m mange-til-mange m m
Redundans Den samme data flere steder i databasen. Problem: Performance og maintainability - samme opdatering mange steder. - dataudtræk langsomme.
Author 1 Author 2 Title ISBN Price US Cust.name Cust.address Purch.date
Normalisering At dele data ud i flere tabeller og binde dem sammen med primærnøgler, for at undgå redundant data Kriterier for Første Normalform: 1. Ingen kolonner må gentage en anden kolonnes datatype 2. Alle kolonner skal max. indeholde én værdi 3. Alle tabeller skal have en primærnøgle til unik identification af en række
Ingen primær nøgle to kolonner til samme datatype Author 1 Author 2 Title ISBN Price US Cust.name Cust.address Purch.date Mere end én værdi i en kolonne pr. række
Normalisering af tabellen Authors kolonner transformeres til en selvstændig tabel Primær nøglen bruges som foreign key i authors tabellen Title ISBN Price Cust.name Cust.address Purch.date ISBN Author
én-til-mange id firstname 1 H.C. Andersen 2 Karen Blixen 3 Martin A. Nexø table: author n id title authorid 1 Mit Afrika 2 2 Den grimme ælling 1 3 Fyrtøjet 1 table: books
stadig redundans... Title ISBN Price Cust.name Cust.address Purch.date En kunde køber mange bøger En bog købes af mange kunder
mange-til-mange kunde m m titler
Anden Normal form En tabel skabes ud af de to tabellers primærnøgler
CustNo Name Address City state zip CustNo ISBN Date ISBN Title Price
CREATE TABLE customers( CustNo varchar(50) PRIMARY KEY, Name varchar(50) NOT NULL ) REFERENCES bruges til at binde nøgler sammen på tværs af tabeller og dermed sikre konsistent data CREATE TABLE titles( ISBN varchar(50) PRIMARY KEY, Title varchar(100) NOT NULL ) CREATE TABLE purchases( CustNo varchar(50) REFERENCES customers (CustNo), ISBN varchar(50) REFERENCES titles (ISBN), PRIMARY KEY (CustNo, ISBN) )
Eksempel på en database i 3. Normalform
http://codex.wordpress.org/images/8/83/wp_27_dbserd.png
Mange-til-Mange m n
2. normalform: wp_term_relationships
Forskellige datalagringsmetoder CMS: definere sitestruktur med kategorier og underkategorier/ sider og undersider. XML: mark-up tekst editering, eller generere via formular interface (schema) Tekstfil: teksteditering med simpel syntax, opfinde og overholde konventioner Database: skrive SQL kommandoer eller bruge phpmyadmin interface
title1= title2= title3= url1= url2= url3= Tekst fil
Tekst fil title1= title2= title3= url1= url2= url3= Relationer mellem data elementer er implicit (nummereringskonvention)
XML fil <articles> <title url= > </title> <title url= > </title> <title url= > </title> </articles>
XML fil <articles> <article url= > </article> <article url= > </article> <article url= > </article> </articles> Relationer mellem data elementer er eksplicit - udtrykkes gennem strukturens hierarkiske orden
...eller <articles> <article> <title> </title> <url> </url> </article> <article> </articles>
Redundans i tekst fil title1= Den grimme ælling title2= Fyrtøjet title3= Mit Africa url1= url2= url3= author1= H.C. Andersen author2= H.C. Andersen author3= Karen Blixen Redundans!
Redundans i XML fil <articles> <article> <title>den grimme ælling</title> <author>h.c Andersen</author> </article> <article> <title>fyrtøjet</title> <author>h.c Andersen</author> </article> </articles>
Redundans fix <articles> <article> <title>den grimme ælling</title> <authorid>1</author> </article> <article> <title>fyrtøjet</title> <authorid>1</author> </article> </articles>
Redundans fix (fortsat) <articles> <article> <title>den grimme ælling</title> <authorid>1</author> </article> <article> <title>fyrtøjet</title> <authorid>1</author> </article> </articles> <authors> <author> <name id= 1 >H.C. Andersen</name> </author> <author> <name id= 2 >Karen Blixen</name> </author> </authors>
tekst vs. XML vs. Database Lagringstype Fordele Ulemper Flat file enkelt og intuitivt utilstrækkeligt ved større kompleksitet, sandsynlighed for fejl XML relativ enkelthed, genkendelighed, selvdokumenterende, læsbart, stringent syntax og parsing. mange ord, redundant, fylder meget, bruger meget båndbredde, svært at parse ujævne strukturer. MySql hurtigt at loade, skal ikke parses, reducerer redundans, konsistent, sikkerhed. svært at læse og editere
Hvilken metode man skal bruge afhænger af... projektets størrelse (tid og omfang) det relative behov for scalérbarhed. datasættets kompleksitet programmeringsressourcer
Næste gang: Udtræk og Load af data Database: udtræk med SQL XML: loade og parse Tekst: loade
Øvelser Øvelser er delt op i to: I bør prioritere begge lige højt. Bliv endelig ikke hængende i database design øvelsen. Tag hurtigst muligt fat på at implementere mindst én af tabellerne i det design i har fået lavet. 1. Tegn et ER diagram - dette fungerer også som planlægning af hvad i skal implementere i øvelse 2. 2. Implementer databasen. Her er det nok hvis I får implementeret en enkelt tabel, så I får afprøvet nogle af datadefinitionskommandoerne og bliver familiære med terminal/kommando promp eller phpmysql.
Øvelse 1: Tegn et ER diagram Bestem hvilke tabeller der skal bruges i Jeres produkt, hvilke kolonner (attributter) de hver især skal indeholde, og hvilke datatyper der skal anvendes for hver enkelt attribut. (se ) Angiv hvilke attributter der skal defineres som primærnøgler. Tegn relationer mellem tabellerne for at vise deres cardinalitet. (1-1, 1- mange, mange-mange). Hvis I har en mange-mange relation mellem to tabeller, så lav en join - tabel der viser denne relation. (som slide 33).
Øvelse 2: Implementer databasen Start Terminal(Mac) eller kommandoprompt (PC) og kør mysql herfra. Alternativt kan I også udføre det hele fra phpmyadmin. Opret en database for projektet Opret mindst én tabel. Normalisér. Dvs sørg for at tabellen lever op til kriterierne for 1. normalform (slide 26). Hvis det er relevant for jeres database, sørg da også for at databasen er i 2. normalform.
Bonus Øvelse: XML og statisk data Denne øvelse er til dem der er nået langt med wireframe og som er hurtigt færdige med database øvelserne. Hvis I er nået så langt med jeres wireframe at I har defineret den statiske og globale tekst på for siden. Dvs den tekst der ikke konstant vil blive opdateret - så som interface labels, tagline, intro tekst, menupunkter så skab et XML dokument som indeholder denne tekst.
Ressourcer Manual til definition statements: http://dev.mysql.com/doc/refman/5.5/en/sql-syntax-data-definition.html Manual til datatyper: http://dev.mysql.com/doc/refman/5.0/en/data-type-overview.html (slide 52-54 indeholder datatypeoversigter fra kap. 8 i Learning PHP, MySQL & JavaScript.) SQL tutorial: http://www.w3schools.com/sql/
Karakter Datatyper
Tekst Datatyper
Numeriske Datatyper