View
227
Download
3
Category
Preview:
Citation preview
Mark Dixon 1
05 – JSP Databases: Multiple Tables
Mark Dixon 2
Admin: Test• Mock test – next week (Thu 6th Nov) 09:00-11:00• Test – week after (Thu 13th Nov) 09:00-11:00• Individual• 40% of module mark• Open book:
Web-site: mdixon.soc.plymouth.ac.uk Printed slides Robbins J (2006) HTML & XHTML Pocket Reference (3rd
edition). O'Reilly. ISBN: 978-0-596-52727-3 Bergsten H (2001) JavaServer Pages Pocket Reference.
O'Reilly. ISBN: 978-0-596-00231-2 Gennick J (2006) SQL Pocket Guide (2nd edition). O'Reilly. ISBN:
978-0-596-52688-7 Google
Mark Dixon 3
Questions: Databases• How many records are in the following table?• How many fields does the following table have?
64
CountryName Population Land Mass Continent
UK 60776238 241590 EuropeSpain 40448191 499542 EuropeGermany 82400996 349223 EuropeEgypt 80335036 995450 AfricaKenya 36913721 569250 AfricaChina 1321851888 9326410 Asia
Mark Dixon 4
Questions: SQL• Write an SQL statement to display the name and
land mass of all countries in Africa.
SELECT Name, Land MassFROM Country WHERE Continent = 'Africa';
CountryName Population Land Mass Continent
UK 60776238 241590 EuropeSpain 40448191 499542 EuropeGermany 82400996 349223 EuropeEgypt 80335036 995450 AfricaKenya 36913721 569250 AfricaChina 1321851888 9326410 Asia
Mark Dixon 5
Questions: HTML in Java• Are these correct (assume variables and
fields exist)?
f = f + r.getString("Description");
h = h + r.getString("<br />Name");
a = "<p>" + a "</p>";
html = html + <img src=face.gif />;
h = "<table>" + h + "</table>";
Mark Dixon 6
Session Aims & Objectives• Aims
– To add dealing with multiple tables to your understanding of databases
• Objectives,by end of this week’s sessions, you should be able to:
– identify a suitable primary key for a table– identify duplicated data in a single table– split that table to reduce data redundancy,
using a suitable foreign key– generate SQL statements to (temporarily)
join tables, and use these in your code– create a web page that allows the user to write
(store) data in database
Mark Dixon 7
Data Duplication• Look for repeating data:
Track Title Artist Name Country
Paranoid Black Sabbath UK
Falling in Love Aerosmith US
Pink Aerosmith US
Love in an Elevator Aerosmith US
Smooth Criminal Alien Ant Farm US
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Mark Dixon 8
Problem: Data Duplication• takes up lots of space
• can become inconsistent (misspellings)
• difficult to change (need to change each instance)
• difficult to search (misspellings)
Mark Dixon 9
Solution: Normalisation• Part of database design
• Process of breaking data down (splitting)
• Codd– 7 stages of normalisation
• Mathematical• Difficult to apply stages• Most professionals do it instinctively
Mark Dixon 10
Relations (tables)
Track Title
Paranoid
Falling in Love Aerosmith US
Pink Aerosmith US
Love in an Elevator Aerosmith US
Smooth Criminal Alien Ant Farm US
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist Name Country
Black Sabbath UK
Mark Dixon 11
Relations (tables)
Track Title
Paranoid
Falling in Love Aerosmith US
Pink Aerosmith US
Love in an Elevator Aerosmith US
Smooth Criminal Alien Ant Farm US
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
Artist
Artist Name Country
Black Sabbath UK
ID Artist Name Country
1 Black Sabbath UK
Mark Dixon 12
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink Aerosmith US
Love in an Elevator Aerosmith US
Smooth Criminal Alien Ant Farm US
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
Artist
ID Artist Name Country
1 Black Sabbath UKAerosmith US
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US2
Mark Dixon 13
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink
Love in an Elevator Aerosmith US
Smooth Criminal Alien Ant Farm US
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
2
2
Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
Mark Dixon 14
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink
Love in an Elevator
Smooth Criminal Alien Ant Farm US
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
2
2
2
Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
Mark Dixon 15
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink
Love in an Elevator
Smooth Criminal
Meaning of Life Disturbed US
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
2
2
2
3
Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
3 Alien Ant Farm US
Mark Dixon 16
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink
Love in an Elevator
Smooth Criminal
Meaning of Life
The Game Disturbed US
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
2
2
2
3
4
Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
3 Alien Ant Farm US
4 Disturbed US
Mark Dixon 17
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink
Love in an Elevator
Smooth Criminal
Meaning of Life
The Game
Voices Disturbed US
Down with the Sickness Disturbed US
Track
Artist ID
1
2
2
2
3
4
4
Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
3 Alien Ant Farm US
4 Disturbed US
Mark Dixon 18
Relations (tables)
Track Title
Paranoid
Falling in Love
Pink
Love in an Elevator
Smooth Criminal
Meaning of Life
The Game
Voices
Down with the Sickness Disturbed US
Track
Artist ID
1
2
2
2
3
4
4
4
Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
3 Alien Ant Farm US
4 Disturbed US
Mark Dixon 19
Relations (tables)
Track Title Artist ID
Paranoid 1
Falling in Love 2
Pink 2
Love in an Elevator 2
Smooth Criminal 3
Meaning of Life 4
The Game 4
Voices 4
Down with the Sickness 4
Track Artist
ID Artist Name Country
1 Black Sabbath UK
2 Aerosmith US
3 Alien Ant Farm US
4 Disturbed US
PrimaryKey
ForeignKey
Mark Dixon 20
Question: Prescriptions• Identify duplication and separate:
Date Surname Forenames Drug Name
6 Jan 04 Jones Alison Co-codamol
11 Jan 04 Smith Bob Tegretol
18 Jan 04 Hope John Co-codamol
5 Feb 04 Johnson Sally Co-codamol
8 Feb 04 Smith Bob Tegretol
10 Feb 04 Smith Bob Sorbitol
Prescription
Mark Dixon 21
Question: Solution
Date PatientID DrugID
6 Jan 04 1 1
11 Jan 04 2 2
18 Jan 04 3 1
5 Feb 04 4 1
8 Feb 04 2 2
10 Feb 04 2 3
Prescription
PatientID Surname Forenames
1 Jones Alison
2 Smith Bob
3 Hope John
4 Johnson Sally
Patient
DrugID Drug Name
1 Co-codamol
2 Tegretol
3 Sorbitol
Drug
Mark Dixon 22
People Database (with Hobbies)ID Surname Forenames Phone email
1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk
2 Smith John 01752 111111 john.smith@john.smith.ac.uk
3 Jones Sally 01752 888888 sally.jones@sally.jones.com
4 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com
5 Anderson Genny 01752 987987 genny@bbbb.cccc.com
HobbyID Description PersonID
1 Archery 1
2 Herpetology 1
3 Music 1
4 Football 2
5 Rugby 2
6 Hitting people with swords 1
Hobby
Person
Mark Dixon 23
Entity-relationship diagrams• Each table in db
– stores details of entity• shown as rectangular box
•Relationships between tables
–represent relationships between entities
•shown as line between entities (boxes)
Person Hobby
Mark Dixon 24
Relationship Types• One-to-one
• One-to-many
• Many-to-one
• Many-to-many– (can't be implemented in relational database)
A B
A B
A B
A B
Mark Dixon 25
Question: Which relationship type?
ID Surname Forenames Phone email
1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk
2 Smith John 01752 111111 john.smith@john.smith.ac.uk
3 Jones Sally 01752 888888 sally.jones@sally.jones.com
4 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com
5 Anderson Genny 01752 987987 genny@bbbb.cccc.com
HobbyID Description PersonID
1 Archery 1
2 Herpetology 1
3 Music 1
4 Football 2
5 Rugby 2
6 Hitting people with swords 1
Hobby
Person
Person
Hobby
Mark Dixon 26
SQL: Joining tables
SELECT * FROM Person, Hobby;
Two tables
Cartesian set(all recordcombinations):
ID Surname Forenames Phone email HobbyID Description PersonID1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 7 Archery 12 Smith John 01752 111111 john.smith@john.smith.ac.uk 7 Archery 13 Jones Sally 01752 888888 sally.jones@sally.jones.com 7 Archery 14 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 7 Archery 15 Anderson Genny 01752 987987 genny@bbbb.cccc.com 7 Archery 11 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 8 Herpetology 12 Smith John 01752 111111 john.smith@john.smith.ac.uk 8 Herpetology 13 Jones Sally 01752 888888 sally.jones@sally.jones.com 8 Herpetology 14 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 8 Herpetology 15 Anderson Genny 01752 987987 genny@bbbb.cccc.com 8 Herpetology 11 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 9 Music 12 Smith John 01752 111111 john.smith@john.smith.ac.uk 9 Music 13 Jones Sally 01752 888888 sally.jones@sally.jones.com 9 Music 14 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 9 Music 15 Anderson Genny 01752 987987 genny@bbbb.cccc.com 9 Music 11 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 10 Football 22 Smith John 01752 111111 john.smith@john.smith.ac.uk 10 Football 23 Jones Sally 01752 888888 sally.jones@sally.jones.com 10 Football 24 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 10 Football 25 Anderson Genny 01752 987987 genny@bbbb.cccc.com 10 Football 21 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 11 Rugby 22 Smith John 01752 111111 john.smith@john.smith.ac.uk 11 Rugby 23 Jones Sally 01752 888888 sally.jones@sally.jones.com 11 Rugby 24 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 11 Rugby 25 Anderson Genny 01752 987987 genny@bbbb.cccc.com 11 Rugby 21 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 12 Hitting people with swords 12 Smith John 01752 111111 john.smith@john.smith.ac.uk 12 Hitting people with swords 13 Jones Sally 01752 888888 sally.jones@sally.jones.com 12 Hitting people with swords 14 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 12 Hitting people with swords 15 Anderson Genny 01752 987987 genny@bbbb.cccc.com 12 Hitting people with swords 1
Mark Dixon 27
SQL: Joining tables
SELECT *FROM Person, HobbyWHERE Person.ID = Hobby.PersonID;
Two tables
Matching recordsID Surname Forenames Phone email HobbyID Description PersonID
1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 1 Archery 1
1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 2 Herpetology 1
1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 3 Music 1
1 Dixon Mark 01752 232556 mark.dixon@plymouth.ac.uk 6 Hitting people with swords 1
2 Smith John 01752 111111 john.smith@john.smith.ac.uk 4 Football 2
2 Smith John 01752 111111 john.smith@john.smith.ac.uk 5 Rugby 2
Mark Dixon 28
SQL: Joining tables
ID Surname
1 Dixon
1 Dixon
1 Dixon
1 Dixon
2 Smith
2 Smith
SELECT ID, SurnameFROM Person, HobbyWHERE Person.ID = Hobby.PersonID;
Mark Dixon 29
SQL: More• Loads more:
– group by– aggregate functions: average, count– inner joins– outer joins (left and right)
• Have a look at:– http://www.w3schools.com/sql/sql_join.asp
Mark Dixon 30
Questions: Databases• How many primary keys?• How many foreign keys?
32
PlantPlantID EnglishName ScientificName Price Toxic FileName
1 Foxglove Digitalis purpurea 2.5 TRUE Foxglove.jpg2 Daisy Bellis perennis 0.45 FALSE Daisy.jpg3 Hemlock Conium maculatum 8.79 TRUE Hemlock.jpg4 Marsh Mallow Althaea officinalis 3.25 FALSE MarshMallow.jpg5 Lords-and-Ladies Arum maculatum 2.25 TRUE Lords.jpg6 Wild Carrot Daucus carota 1.25 FALSE WildCarrot.jpg7 Bluebell Hyacinthoides non-scripta 1.8 FALSE Bluebell.jpg8 Common Poppy Papaver rhoeas 1.28 FALSE Poppy.jpg
OrderOrderID CustID PlantID Quantity Date Current
1 1 7 10 14-Mar-06 TRUE2 2 5 2 14-Mar-06 TRUE3 1 3 1 14-Mar-06 FALSE5 2 4 4 14-Mar-06 FALSE
46 1 2 9 09-Jun-06 FALSE
CustomerCustID Surname Forenames email Password
1 Dixon Mark mark.dixon@plymouth.ac.uk a2 Jones Sally s.jones@s.jones.co.uk sally
Mark Dixon 31
Example: Person v1 (Specification)
• User requirement:– Display people's details from database online– need 2 pages:
smithjonesdixon
list of people
jones
person's details
Mark Dixon 32
Example: PeopleList.jsp v1<%@page import="java.sql.*"%><%@page contentType="text/html"%><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM [Person];");String html = "";
while(r.next()){
html += r.getString("Surname") + "<br />"; } cn.close();%><!DOCTYPE html><html> <head><title></title></head> <body> <%=html%> </body></html>
Mark Dixon 33
Example: PeopleList.jsp v2<%@page import="java.sql.*"%><%@page contentType="text/html"%><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM [Person];");String html = "";String id; while(r.next()){ id = Integer.toString(r.getInt("PersonID")); html += "<a href='Person.jsp?id=" + id + "'>"; html += r.getString("Surname") + "</a><br />"; } cn.close();%><!DOCTYPE html><html> <head><title></title></head> <body> <%=html%> </body></html>
now links
Mark Dixon 34
Example: Person.jsp v2<%@page import="java.sql.*"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%String id = request.getParameter("id");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM [Person] WHERE PersonID = " + id + ";");String surname = ""; if(r.next()){ surname = r.getString("Surname"); } cn.close();%><!DOCTYPE html><html> <head><title>Person</title></head> <body> Surname: <input name="txtSurname" type="text" value="<%=surname%>" /> </body></html>
reads querystring(from previous page)
displays data forselected record only
Mark Dixon 35
Tutorial Exercise: Person• Task 1: Get the Person (v1) example from
the lecture working.
• Task 2: Modify your code, so that forename is displayed as well as surname (use a table).
• Task 3: Get the Person (v2) example from the lecture working.
Recommended