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!