You are on page 1of 24

2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.

com
1

Database Normalization

PHP Quebec 2005

Mike Hillyer – MySQL AB


2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
2

About Me
Mike Hillyer, BSc
• Member of the MySQL AB documentation team
• MySQL Core and Pro Certified
• Top MySQL expert at www.experts-exchange.com
• Resident MySQL expert at SearchDatabase.com
• http://www.openwin.org/mike/aboutme.php
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
3

About You
How many of you…

• Currently use MySQL?


• Another RDBMS?
• Are responsible for database design?
• Will be in the future?
• Know about database normalization?
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
4

About This Session


• http://www.openwin.org/mike/presentations/
• http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

• Introduction
• What Is Database Normalization?
• What are the Benefits of Database Normalization?
• What are the Normal Forms?
• First Normal Form
• Second Normal Form
• Forming Relationships
• Third Normal Form
• Joining Tables
• De-Normalization
• Conclusion
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
5

What Is Database Normalization?

• Cures the ‘SpreadSheet Syndrome’


• Store only the minimal amount of information.
• Remove redundancies.
• Restructure data.
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
6

What are the Benefits


of Database Normalization?
• Decreased storage requirements!
1 VARCHAR(20)
converted to 1 TINYINT UNSIGNED
in a table of 1 million rows
is a savings of ~20 MB
• Faster search performance!
– Smaller file for table scans.
– More directed searching.
• Improved data integrity!
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
7

What are the Normal Forms?

• First Normal Form (1NF)


• Second Normal Form (2NF)
• Third Normal Form (3NF)
• Boyce-Codd Normal Form (BCNF)
• Fourth Normal Form (4NF)
• Fifth Normal Form (5NF)
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
8

Our Table

user

name name phone1 phone2 email1 email2


nickname
phone1 Mike Hillyer 403-555-1717 403-555-1919 mike@hoppen.com mhillyer@mysite.com
phone2
phone3
cell
pager Tom Jensen 403-555-1919 403-555-1313 tom@openwin.org tom@supersite.org
address
city
province
postal_code
country Ray Smith 403-555-1919 403-555-1111 ray@cpma.com
email1
email2
web_url
company
department
picture
notes
email_format
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
9

First Normal Form

• Remove horizontal redundancies


– No two columns hold the same information
– No single column holds more than a single item
• Each row must be unique
– Use a primary key
• Benefits
– Easier to query/sort the data
– More scalable
– Each row can be identified for updating
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
10

One Solution
user

first_name last_name phone email


first_name Mike Hillyer 403-555-1717 mike@hoppen.com
last_name
nickname Mike Hillyer 403-555-1919 mhillyer@mysite.com
phone
cell Tom Jensen 403-555-1919 tom@openwin.org
pager
address Tom Jensen 403-555-1313 tom@supersite.org
city
province Ray Smith 403-555-1919 ray@cpma.com
postal_code
country
Ray Smith 403-555-1111
web_url
department
picture
notes

• Multiple rows per user


• Emails are associated with only one other phone
• Hard to Search
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
11

Satisfying 1NF

user
PK user_id

first_name
last_name
phone
nickname email
address PK phone_id
city PK email_id
province country_code
postal_code address number
country extension
web_url
company
department
picture
notes
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
12

Forming Relationships

• Three Forms
– One to (zero or) One
– One to (zero or) Many
– Many to Many
• One to One
– Same Table?
• One to Many
– Place PK of the One in the Many
• Many to Many
– Create a joining table
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
13

Joining Tables

user phone
user_phone
PK user_id PK phone_id
PK,FK1 phone_id
PK user_id
first_name country_code
last_name number
type
nickname extension
address
city
province
postal_code
country email
web_url
PK address
picture
notes
FK1 user_id
email_format
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
14

Our User Table


first_name last_name company department
Mike Hillyer MySQL Documentation

Tom Jensen CPNS Finance


Ray Smith CPNS Documentation

user phone
user_phone
PK user_id PK phone_id
PK,FK1 phone_id
PK user_id
first_name country_code
last_name number
type
nickname extension
address
city
province
postal_code
country email
web_url
PK address
picture
notes
FK1 user_id
email_format
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
15

Second Normal Form

• Table must be in First Normal Form


• Remove vertical redundancy
– The same value should not repeat across rows
• Composite keys
– All columns in a row must refer to BOTH parts of the key
• Benefits
– Increased storage efficiency
– Less data repetition
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
16

Satisfying 2NF

user user_phone phone


user
PK user_id PK,FK1 user_id PK phone_id
PK user_id PK,FK2 phone_id
first_name country_code
last_name
first_name number
nickname
last_name extension
address
nickname type
city
address
province
city
email postal_code
province user_company
email country
postal_code company
PK address web_url
country PK,FK1 user_id
PK address PK company_id
picture
web_url PK,FK2 company_id
type notes
picture
FK1 user_id name
FK1 user_id email_format
notes department
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
17

Third Normal Form

• Table must be in Second Normal Form


– If your table is 2NF, there is a good chance it is 3NF
• All columns must relate directly to the primary key
• Benefits
– No extraneous data
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
18

Satisfying 3NF

user_phone
phone
user
PK,FK1 user_id
PK phone_id
PK user_id PK,FK2 phone_id
country_code
first_name extension
number
last_name
type
nickname
address
city
email province
postal_code user_company
PK address country company
PK,FK1 user_id
web_url
PK,FK2 company_id PK company_id
FK1 user_id picture
format notes
department name
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
19

Finding Balance
user user_phone phone type country
PK user_id PK,FK1 user_id PK phone_id PK type_id PK country_id
PK,FK2 phone_id
first_name
FK1 type_id type Name
last_name extension area_code phone_code
nickname
NXX
unit
NCX
street_number
email FK2 country_id
street_name
street_type PK address
quadrant
user_department department
web_url FK1 user_id
picture format PK,FK1 user_id PK department_id
notes PK,FK2 department_id
FK1 postal_code
name
FK1 company_id

postal_code city province company


PK postal_code PK city_id PK province_id PK company_id
FK1 city_id name Name name
FK1 province_id Abbreviation
FK1 country_id
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
20

Joining Tables

• Two Basic Joins


– Equi-Join
– Outer Join (LEFT JOIN)
• Equi-Join
– SELECT user.first_name, user.last_name, email.address
FROM user, email
WHERE user.user_id = email.user_id
• LEFT JOIN
– SELECT user.first_name, user.last_name, email.address
FROM user LEFT JOIN email
ON user.user_id = email.user_id
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
21

De-Normalizing Tables

• Use with caution


• Normalize first, then de-normalize
• Use only when you cannot optimize
• Try temp tables, UNIONs, VIEWs, subselects first
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
22

Conclusion

• http://dev.mysql.com/tech-resources/articles/intro-to-
normalization.html
• MySQL Database Design and Optimization
– Jon Stephens & Chad Russell
– Chapter 3
– ISBN 1-59059-332-4
– http://www.openwin.org/mike/books
• http://www.openwin.org/mike/presentations
2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
23

QUESTIONS?

Feel free to ask now or find me after this session!


2005­02-02 | Database Normalization | © MySQL AB 2005 | www.mysql.com
24

Book Draw!

Stick around and win a book!

You might also like