Elektronisk publicering TNMK30 Förra gången • Serverskript • PHP • Validering av data med serverskript • Säkerhet • HTML - formulär. Idag • Databaser • ER-diagram • Relationsmodellen • SQL • PHP + MySQL • Muddy Cards. Databaser Databaser • Databas - samling med data Databaser • Databas - samling med data Databaser • Databas - samling med data • Databashanterare Databaser • Databas - samling med data • Databashanterare Databaser • Databas - samling med data • Databashanterare • Enkelt Databaser • Databas - samling med data • Databashanterare • Enkelt • Kraftfullt Databaser • Databas - samling med data • Databashanterare • Enkelt • Kraftfullt • Flexibelt Databaser • Databas - samling med data • Databashanterare • Enkelt • Kraftfullt • Flexibelt • Samtidig åtkomst Databaser • Databas - samling med data • Databashanterare • Enkelt • Kraftfullt • Flexibelt • Samtidig åtkomst • Nackdelar? Kan kräva mer resurser. ER-modellering ER-modellering • Entity-Relationship ER-modellering • Entity-Relationship • Konceptuell modell ER-modellering • Entity-Relationship • Konceptuell modell • Överskådligt ER-modellering • Entity-Relationship • Konceptuell modell • Överskådligt • Lätt att kommunicera ER-modellering • Entity-Relationship • Konceptuell modell • Överskådligt • Lätt att kommunicera • För denna kurs ett hjälpmedel - inget som krävs för labb eller projekt. ER-modellering ER-modellering Person ER-modellering Person entitetstyp ER-modellering Person entitetstyp Hus ER-modellering Person entitetstyp Bor i Hus ER-modellering Person entitetstyp Bor i Hus sambandstyp (relationship type) ER-modellering Person entitetstyp N Bor i M Hus sambandstyp (relationship type) ER-modellering kardinalitetsförhållanden Person entitetstyp N Bor i M Hus sambandstyp (relationship type) ER-modellering kardinalitetsförhållanden Person entitetstyp N Bor i M Hus sambandstyp (relationship type) En person kan bo i flera hus och i ett hus kan det bo flera personer. ER-modellering ER-modellering Hus ER-modellering Person Hus ER-modellering N Person Bor i 1 Hus ER-modellering N Person Bor i 1 Hus ER-modellering fullständigt deltagande N Person Bor i 1 Hus ER-modellering fullständigt deltagande N Bor i 1 Person Hus N Äger M ER-modellering fullständigt deltagande N Bor i 1 Person Hus N Äger M Alla personer bor i ett hus. I ett hus kan det bo flera personer. Ett hus kan ha flera ägare. En person kan (del-)äga flera hus. ER-modellering ER-modellering Student ER-modellering liu-id Student ER-modellering liu-id förnamn Student efternamn ER-modellering Attribut liu-id förnamn Student efternamn ER-modellering Attribut liu-id förnamn Student efternamn ER-modellering Attribut liu-id förnamn Nyckel Student efternamn ER-modellering Attribut liu-id förnamn efternamn Nyckel Student En student har ett liu-id, förnamn och efternamn. Liu-id är unikt för varje student. Relationsmodellen Relationsmodellen • Data lagras i relationer (samband) Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner id namn telefonnr 2 Donatello 555-1234 3 Michelangelo 555-9999 5 Rafael 555-1234 1 Leonardo null Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner id namn telefonnr 2 Donatello 555-1234 3 Michelangelo 555-9999 5 Rafael 555-1234 1 Leonardo null Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner id namn telefonnr 2 Donatello 555-1234 3 Michelangelo 555-9999 5 Rafael 555-1234 1 Leonardo null Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner id namn telefonnr 2 Donatello 555-1234 3 Michelangelo 555-9999 5 Rafael 555-1234 1 Leonardo null Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner id namn telefonnr 2 Donatello 555-1234 3 Michelangelo 555-9999 5 Rafael 555-1234 1 Leonardo null Relationsmodellen • Data lagras i relationer (samband) • Samma sak som tabeller med rader och kolumner id namn telefonnr 2 Donatello 555-1234 3 Michelangelo 555-9999 5 Rafael 555-1234 1 Leonardo null null ≠ 0 Från ER-diagram till tabeller Från ER-diagram till tabeller id namn Person telefon Från ER-diagram till tabeller id namn Person Person telefon Från ER-diagram till tabeller id namn telefon Person Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Från ER-diagram till tabeller id namn telefon Person Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Från ER-diagram till tabeller id namn telefon Person Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 id namn Person efternamn Person id namn Person efternamn Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 id namn efternamn Person Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 id namn efternamn Person nummer gata Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Hus id namn Person efternamn nummer gata Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Hus id namn Person gata nummer Storgatan Rydsvägen 2 240 efternamn nummer gata Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Hus id nummer Storgatan Rydsvägen 2 240 efternamn namn Person gata 1 äger nummer gata N Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Hus id nummer ägare Storgatan Rydsvägen 2 240 54 54 efternamn namn Person gata 1 äger nummer gata N Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer Storgatan Rydsvägen 2 240 id namn Hus Person efternamn nummer gata Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer Storgatan Rydsvägen 2 240 id namn Hus Person efternamn N äger nummer gata M Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 6 6 & 54 id namn Hus Person efternamn N äger nummer gata M Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 6 6 & 54 id namn Hus Person id efternamn N äger nummer gata M Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer Storgatan Rydsvägen 2 240 id namn Hus Person id efternamn N äger nummer gata M Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer id Storgatan Rydsvägen 2 240 1 8 id namn Hus Person id efternamn N äger nummer gata M Hus Person Äger id namn telefon person-id hus-id 6 54 Rocksteady Beebop 555-2222 555-2222 6 54 54 8 8 1 gata nummer id Storgatan Rydsvägen 2 240 1 8 id namn Hus Person id efternamn N äger nummer gata M Hus SQL SQL • Structured Query Language SQL • Structured Query Language • Dominerande språket SQL • Structured Query Language • Dominerande språket • Ställer frågor - uppmaningar. Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • SELECT * FROM Person; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • SELECT * FROM Person; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • SELECT * FROM Person; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; SELECT namn FROM Person WHERE id = 6; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; SELECT namn FROM Person WHERE id = 6; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; SELECT namn FROM Person WHERE id = 6; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; SELECT namn FROM Person WHERE id = 6; SELECT namn FROM Person WHERE id = (SELECT ägare FROM Hus WHERE gata = ‘Storgatan’ AND nummer = 2); Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; SELECT namn FROM Person WHERE id = 6; SELECT namn FROM Person WHERE id = (SELECT ägare FROM Hus WHERE gata = ‘Storgatan’ AND nummer = 2); Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 gata nummer ägare Storgatan Rydsvägen 2 240 54 54 Hus • • • • SELECT * FROM Person; SELECT gata FROM Hus WHERE ägare = 54; SELECT namn FROM Person WHERE id = 6; SELECT namn FROM Person WHERE id = (SELECT ägare FROM Hus WHERE gata = ‘Storgatan’ AND nummer = 2); Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 • INSERT INTO Person (id, namn, telefon) VALUES (55, ‘April’, null); Person id namn telefon 6 54 55 Rocksteady Beebop April 555-2222 555-2222 null • INSERT INTO Person (id, namn, telefon) VALUES (55, ‘April’, null); Person id namn telefon 6 54 55 Rocksteady Beebop April 555-2222 555-2222 null • INSERT INTO Person (id, namn, telefon) VALUES (55, ‘April’, null); • DELETE FROM Person WHERE namn = ‘April’; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 • INSERT INTO Person (id, namn, telefon) VALUES (55, ‘April’, null); • DELETE FROM Person WHERE namn = ‘April’; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-2222 • INSERT INTO Person (id, namn, telefon) VALUES (55, ‘April’, null); • DELETE FROM Person WHERE namn = ‘April’; • UPDATE Person SET telefon = 555-4545 WHERE id = 6; Person id namn telefon 6 54 Rocksteady Beebop 555-2222 555-4545 555-2222 • INSERT INTO Person (id, namn, telefon) VALUES (55, ‘April’, null); • DELETE FROM Person WHERE namn = ‘April’; • UPDATE Person SET telefon = 555-4545 WHERE id = 6; Normalisering Normalisering • Hur man undviker dålig design på sin databas Normalisering • Hur man undviker dålig design på sin databas • “en typ av sak per tabell, och en sån sak per rad” Normalisering • Hur man undviker dålig design på sin databas • “en typ av sak per tabell, och en sån sak per rad” • Undvik redundans, att samma sak lagras på flera ställen. MySQL MySQL • “The World’s most popular open source database” MySQL • “The World’s most popular open source database” • Linux, Windows, OS X, HP-UX, AIX, med flera MySQL • “The World’s most popular open source database” • Linux, Windows, OS X, HP-UX, AIX, med flera • PHP, Perl, Python MySQL • “The World’s most popular open source database” • Linux, Windows, OS X, HP-UX, AIX, med flera • PHP, Perl, Python • http://dev.mysql.com PHP + MySQL PHP + MySQL • mysql_connect() - kopplar upp PHP + MySQL • mysql_connect() - kopplar upp • mysql_query() - skickar query PHP + MySQL • mysql_connect() - kopplar upp • mysql_query() - skickar query • mysql_fetch_array(), med flera - hämtar data från svaret på query PHP + MySQL • mysql_connect() - kopplar upp • mysql_query() - skickar query • mysql_fetch_array(), med flera - hämtar data från svaret på query • mysql_num_fields(), mysql_num_rows() PHP + MySQL • mysql_connect() - kopplar upp • mysql_query() - skickar query • mysql_fetch_array(), med flera - hämtar data från svaret på query • mysql_num_fields(), mysql_num_rows() • mysql_close() - kopplar ned PHP + MySQL • mysql_connect() - kopplar upp • mysql_query() - skickar query • mysql_fetch_array(), med flera - hämtar data från svaret på query • mysql_num_fields(), mysql_num_rows() • mysql_close() - kopplar ned • det finns fler - http://php.net Demo Muddycards Muddycards • Minikursutvärdering Muddycards • Minikursutvärdering • Bra saker Muddycards • Minikursutvärdering • Bra saker • Saker som kan förbättras, bör tas bort eller ändras Muddycards • Minikursutvärdering • Bra saker • Saker som kan förbättras, bör tas bort eller ändras • Föreläsningar, labbar, kurswebb, assistenter, instruktioner, schema, upplägg, etc Muddycards • Minikursutvärdering • Bra saker • Saker som kan förbättras, bör tas bort eller ändras • Föreläsningar, labbar, kurswebb, assistenter, instruktioner, schema, upplägg, etc • Fokus på denna kursomgång. Påminnelse: sql-injection Påminnelse: sql-injection Påminnelse: sql-injection Påminnelse: sql-injection Inför laboration 4 • Inför laboration 4 Webbplats med information om film Inför laboration 4 • Webbplats med information om film • Större laboraton om ca 20 h eget arbete Inför laboration 4 • Webbplats med information om film • Större laboraton om ca 20 h eget arbete • Använd det ni lärt er tidigare + MySQL Inför laboration 4 • Webbplats med information om film • Större laboraton om ca 20 h eget arbete • Använd det ni lärt er tidigare + MySQL • Varje grupp bör ha fått mail om MySQL-konto Inför laboration 4 • Webbplats med information om film • Större laboraton om ca 20 h eget arbete • Använd det ni lärt er tidigare + MySQL • Varje grupp bör ha fått mail om MySQL-konto • För högre betyg förbered er gärna för projektet genom att göra mer ambitiösa lösningar för laborationen än vad som krävs för G Inför laboration 4 • Webbplats med information om film • Större laboraton om ca 20 h eget arbete • Använd det ni lärt er tidigare + MySQL • Varje grupp bör ha fått mail om MySQL-konto • För högre betyg förbered er gärna för projektet genom att göra mer ambitiösa lösningar för laborationen än vad som krävs för G • Börja med lab 4 idag. Gör lab 3 senare. Inför laboration 4 • Webbplats med information om film • Större laboraton om ca 20 h eget arbete • Använd det ni lärt er tidigare + MySQL • Varje grupp bör ha fått mail om MySQL-konto • För högre betyg förbered er gärna för projektet genom att göra mer ambitiösa lösningar för laborationen än vad som krävs för G • Börja med lab 4 idag. Gör lab 3 senare. • Idag 6 h med handledare samt två pass till. Inför föreläsningar Inför föreläsningar • Två föreläsningar nästa vecka: Inför föreläsningar • Två föreläsningar nästa vecka: • Usability Inför föreläsningar • Två föreläsningar nästa vecka: • Usability • Bildbehandling Inför föreläsningar • Två föreläsningar nästa vecka: • Usability • Bildbehandling • Gör klart lab 3 Inför föreläsningar • Två föreläsningar nästa vecka: • Usability • Bildbehandling • Gör klart lab 3 • Jobba med lab 4. www-allmänbildning www-allmänbildning • • • • • evhead.com/2005/11/ten-rules-for-web-startups.asp www.alistapart.com/articles/indefenseofeyecandy/ news.stanford.edu/news/2005/june15/jobs-061505.html gettingreal.37signals.com/ch02_Build_Less.php www.youtube.com/watch?v=z9UjeTMb3Yk Tack! Och lycka till!