DATABASE DESIGN I IST 210: Organization of Data IST210 1

Preview:

Citation preview

IST210 1

DATABASE DESIGN IIST 210: Organization of Data

IST210 2

I want a database to maintain departments in my company. Store information about my employees, their projects and assignments. I

want ….

$$$

User requirement

A database

YOUR JOB!

Data Modeling (Ch.4)

Database Design (Ch.5)

IST210 3

Two-Step Approach: Step 1

• Input: User requirement; Output: E-R Diagram• Use Entity-Relationship Diagram (E-R Diagram) to

capture all user requirements

Data Modeling (Ch.4)

Database Design (Ch.5)

IST210 4

Two-Step Approach: Step 2

Data Modeling (Ch.4)

Database Design (Ch.5)

• Input: E-R diagram; Output: A database• Transferring a data model to a relational database

• Entities Relations• Relationships Foreign keys and extra

IST210 5

Chapter Key Objective

Data Model (E-R Diagram) Relational Model (Tables)

1. Entity Table• Entity name Table name• Identifier Primary key• Attributes Attributes

2. Relationship Foreign key or a new table• Determined by the maximal cardinality

3. Specify the attribute properties• Data type• Key• Required

• Determined by the minimal cardinality• Remarks

IST210 6

E-R Diagram Tables

1. Entity Table• Entity name Table name• Identifier Primary key• Attributes Attributes

2. Relationship Foreign key or a new table3. Specify the attribute properties

IST210 7

Example

LockerID

LockerRoomLockerSize

EmployeeID

NameOfficeNumberOfficePhone

LOCKEREMPLOYEE1) Entity name Table name2) Identifier Primary key3) Attributes Attributes

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize)

*primary key: use underline

IST210 8

E-R Diagram Tables

1. Entity Table• Entity name Table name• Identifier Primary key• Attributes Attributes

2. Relationship Foreign key or a new table• Determined by the maximal cardinality

3. Specify the attribute properties

IST210 9

Maximal Cardinality

• 1:1 (one-to-one) Relationship

• 1:N (one-to-many) Relationship

• N:M (many-to-many) RelationshipEntity A Entity B

Entity A Entity B

Entity A Entity B

IST210 10

1:1 Relationship

LockerID

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

Relationship is not captured yet!

Add foreign key ?

Employee ID

Name OfficeNumber

OfficePhone

4 Tom 281 9182

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize)

IST210 11

Employee ID

Name OfficeNumber

OfficePhone

LockerID

4 Tom 281 9182 1

LockerID

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

Employee 4 owns locker 1; locker 1 belongs to employee 4.

Employee ID

Name OfficeNumber

OfficePhone

4 Tom 281 9182

LockerID

LockerRoom

LockerSize

EmployeeID

1 #2 10 4

5 #2 5

EMPLOYEE LOCKER

LockerID

LockerRoom

LockerSize

EmployeeID

1 #2 10 4

5 #2 5

EMPLOYEE LOCKER

Employee ID

Name OfficeNumber

OfficePhone

LockerID

4 Tom 281 9182 1

Option A

Option B

Option C

IST210 12

1:1 Relationship

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize, EmployeeID)

Option A

Option B

Both options are correct. Option A is preferred.• If choosing Option A, since every employee has one locker, LockerID must

have a value in EMPLOYEE table.• If choosing Option B, since some lockers does not belong to anyone,

EmployeeID will be NULL value for some lockers and it takes extra space. (See the previous slide, Option B needs one more cell.)

*foreign key: italic

IST210 13

1:1 Relationship• The maximum cardinality determines how a relationship is

represented• 1:1 relationship

• The key from one relation is placed in the other as a foreign key• It does not matter which table receives the foreign key• We prefer the option taking less space

IST210 14

1:N Relationship

Employee ID

LastName

FirstName

OfficeNumber

OfficePhone

4 Green Tom 281 9182

LockerID

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

Relationship is not captured yet! Add foreign key ?

LockerID

LockerRoomLockerSize

EmployeeID

NameOfficeNumberOfficePhone

LOCKEREMPLOYEE

Assume one-to-many relationship

IST210 15

Employee ID

Name OfficeNumber

OfficePhone

LockerID

4 Tom 281 9182 1, 5

LockerID

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

Employee 4 owns locker 1 and 5.

Employee ID

Name OfficeNumber

OfficePhone

4 Tom 281 9182

LockerID

LockerRoom

LockerSize

EmployeeID

1 #2 10 4

5 #2 5 4

EMPLOYEE LOCKER

EMPLOYEE LOCKER

EmployeeID

Name OfficeNumber

OfficePhone

LockerID

4 Tom 281 9182 1, 5

Option A

Option B

Option C

LockerID

LockerRoom

LockerSize

EmployeeID

1 #2 10 4

5 #2 5 4

IST210 16

1:N Relationship

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize, EmployeeID)

IST210 17

1:N Relationship• Like a 1:1 relationship, a 1:N relationship is saved by

placing the key from one table into another as a foreign key

• However, in a 1:N the foreign key always goes into the many-side of the relationship• The 1 side is called the parent• The N side is called the child

IST210 18

N:M Relationship

Employee ID

Name OfficeNumber

OfficePhone

4 Tom 281 9182

10 John 777 1829

LockerID

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

Relationship is not captured yet! Add foreign key ?

LockerID

LockerRoomLockerSize

EmployeeID

NameOfficeNumberOfficePhone

LOCKEREMPLOYEE

Assume many-to-many relationship

IST210 19

Employee ID

Name OfficeNumber

OfficePhone

LockerID

4 Tom 281 9182 1, 5

10 John 777 1829 1

LockerNumber

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

Employee 4 owns locker 1 and 5. Employee 10 owns locker 1.

Employee ID

Name OfficeNumber

OfficePhone

4 Tom 281 9182

10 John 777 1829

LockerID

LockerRoom

LockerSize

EmployeeID

1 #2 10 4, 10

5 #2 5 4

EMPLOYEE LOCKER

Option A

Option B

IST210 20

Employee ID

Name OfficeNumber

OfficePhone

4 Tom 281 9182

10 John 777 1829

LockerID

LockerRoom

LockerSize

1 #2 10

5 #2 5

EMPLOYEE LOCKER

EmployeeID

LockerID

4 1

4 5

10 1

ASSIGNMENT

NOT SIMPLY ADDING FOREIGN KEYS! CREATE ANOTHER TABLE!

Employee 4 owns locker 1 and 5. Employee 10 owns locker 1.

IST210 21

N:M Relationship

EMPLOYEE(EmployeeID, LastName, FirstName, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize)ASSIGNMENT(EmployeeID, LockerID)

Note: EmployeeID and LockerID are both primary keys and foreign keys in ASSIGNMENT table

IST210 22

N:M Relationship• To represent a N:M relationship in relational design, a new

table must be created. • This table is called an intersection table

• An intersection table has a composite key consisting of the keys from each of the tables that it connects

IST210 23

Relationship Summary

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize, EmployeeID)

N:M add an intersection table

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize)ASSIGNMENT(EmployeeID, LockerID)

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone)LOCKER(LockerID, LockerRoom, LockerSize, EmployeeID)

1:N add a foreign key to the many-side table

1:1 add a foreign key to either table

or

IST210 24

In-class Exercise 1Transform this diagram into tables

UserID

NameEmail

SpotID

LocationMonthlyCost

USERPARKING

IST210 25

In-class Exercise 1Transform this diagram into tables

UserID

NameEmail

SpotID

LocationMonthlyCost

USERPARKING

PARKING(SpotID, Location, MonthlyCost)USER(UserID, Name, Email, SpotID)

IST210 26

In-class Exercise 1: Notes

PARKING(SpotID, Location, MonthlyCost)USER(UserID, Name, Email, SpotID)

PARKING(SpotID, Location, MonthlyCost, UserID)USER(UserID, Name, Email)

Note: both options are correct, but the first one is preferred because of the minimal cardinality of SpotID is mandatory.

IST210 27

In-class Exercise 2

BuildingNameApartmentID

NumberOfBedNumberOfBathRent

BuildingName

Address

APARTMENTBUILDING

Transform this diagram into tables

IST210 28

In-class Exercise 2Transform this diagram into tables

BUILDING(BuildingName, Address)APARTMENT(BuildingName, ApartmentID, NumberOfBedrooms, NumberofBaths, Rent)

IST210 29

In-class Exercise 2: Notes

BUILDING(BuildingName, Address)APARTMENT(BuildingName, ApartmentID, NumberOfBedrooms, NumberofBaths, Rent)

Notes:* A common mistake is making ApartmentID as the only primary key. (BuildingName, ApartmentID) should a composite key for APARTMENT * Another common mistake is to create a duplicate attribute BuildingName in APARTMENT. Or forget to make BuildingName as the foreign key

IST210 30

In-class Exercise 3

CourseID

CourseNameInstructor

StudentID

StudentNameEmail

COURSESTUDENT

Transform this diagram into tables

IST210 31

In-class Exercise 3

CourseID

CourseNameInstructor

StudentID

StudentNameEmail

COURSESTUDENT

Transform this diagram into tables

STUDENT(StudentID, StudentName, Email)COURSE(CourseID, CourseName, Instructor)REGISTRATION(StudentID, CourseID)

IST210 32

In-class Exercise 3: Notes

STUDENT(StudentID, StudentName, Email)COURSE(CourseID, CourseName, Instructor)REGISTRATION(StudentID, CourseID)

Notes:* In REGISTRATION table, StudetID and CourseID are both primary key and foreign key. So you should give both underline and italic (wave underline in hand-written format) to them.

IST210 33

E-R Diagram Tables

1. Entity Table• Entity name Table name• Identifier Primary key• Attributes Attributes

2. Relationship Foreign key or a new table• Determined by the maximal cardinality• 1:1 add a foreign key to either table• 1:N add a foreign key to the many-side table• N:M add an intersection table

3. Specify the attribute properties

IST210 34

E-R Diagram Tables

1. Entity Table• Entity name Table name• Identifier Primary key• Attributes Attributes

2. Relationship Foreign key or a new table• Determined by the maximal cardinality

3. Specify the attribute properties• Data type• Key• Required

• Determined by the minimal cardinality• Remarks

IST210 35

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE table

Column Name Data Type Key Required Remarks

LockerID

LockerRoom

LockerSize

LOCKER table

Column Name Data Type Key Required Remarks

EmployeeID

Name

OfficeNumber

OfficePhone

LockerID

IST210 36

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE table

Column Name Data Type

LockerID int

LockerRoom char(10)

LockerSize float

LOCKER table

Column Name Data Type

EmployeeID int

Name char(50)

OfficeNumber char(20)

OfficePhone char(12)

LockerID int

Data Type• Determine the data types based on the type

of these attributes• Data types must be the types defined in

SQL• http://technet.microsoft.com/en-us/library/

ms187752.aspx

• Data type of a foreign key must be the same type as its referred primary key

• LockerID in EMPLOYEE table must have the same data type as LockerID in LOCKER because LockerID is a foreign key in EMPLOYEE

IST210 37

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE table

Column Name Data Type

LockerID Primary key

LockerRoom

LockerSize

LOCKER table

Column Name Key

EmployeeID Primary key

Name

OfficeNumber

OfficePhone

LockerID Foreign key

Key• Specify primary key and foreign key(s) in the

table

IST210 38

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE table

Column Name Required

LockerID Yes

LockerRoom Yes

LockerSize Yes

LOCKER table

Column Name Required

EmployeeID Yes

Name Yes

OfficeNumber No

OfficePhone No

LockerID Yes

Required• Whether an attribute is required or not

determines whether we allow NULL value for this attribute

• Primary key must be required• Normal attributes are determined based on

requirements or common sense• “not required” is preferred

• Foreign key is determined by minimum cardinality

• An employee must have at least one locker. So LockerID is required in EMPLOYEE

IST210 39

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE table

Column Name

Remarks

LockerID Surrogate key: initial value = 1 Increment = 1

LockerRoom

LockerSize Default value: 10

LOCKER table

Column Name

Remarks

EmployeeID Surrogate key: initial value = 1 Increment = 1

Name

OfficeNumber

OfficePhone Format: ###-###-####

LockerID Reference: LOCKER

Remarks• If a primary key is a surrogate key,

specify the initial value and increment

• If an attribute is a foreign key, specify which table it refers to

• If an attribute has a required format, specify the format

• If an attribute has a default value, specify the value

IST210 40

EMPLOYEE(EmployeeID, Name, OfficeNumber, OfficePhone, LockerID)LOCKER(LockerID, LockerRoom, LockerSize)

EMPLOYEE table

Column Name

Data Type

Key Required

Remarks

LockerID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

LockerRoom char(10) Yes

LockerSize float Yes Default value: 10

LOCKER table

Column Name

Data Type

Key Required Remarks

EmployeeID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

Name char(50) Yes

OfficeNumber char(20) No

OfficePhone char(12) No Format: ###-###-####

LockerID int Foreign key

Yes Reference: LOCKER

Now we complete converting an E-R diagram to tablesNext, we can use SQL to create a real database

IST210 41

In-class Exercise 1

PARKING(SpotID, Location, MonthlyCost)USER(UserID, Name, Email, SpotID)

IST210 42

PARKING(SpotID, Location, MonthlyCost)USER(UserID, Name, Email, SpotID)PARKING table

Column Name

Data Type

Key Required Remarks

UserID

Name

Email

SpotID

USER table

Column Name

Data Type

Key Required Remarks

SpotID

Location

MonthlyCost

In-class Exercise 1

IST210 43

PARKING table

Column Name

Data Type

Key Required Remarks

UserID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

Name char(100) Yes

Email char(50) No

SpotID int Foreign key

Yes Reference: PARKING

USER table

Column Name

Data Type

Key Required Remarks

SpotID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

Location char(50) Yes

MonthlyCost int Yes Default: 50

PARKING(SpotID, Location, MonthlyCost)USER(UserID, Name, Email, SpotID)

IST210 44

PARKING table

Column Name

Data Type

Key Required

Remarks

UserID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

Name char(100) Yes

Email char(50) No

SpotID int Foreign key

Yes Reference: PARKING

USER table

Column Name

Data Type

Key Required

Remarks

SpotID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

Location char(50) Yes

MonthlyCost int Yes Default: 50

Notes: • See the red parts• Char is not a data type, char(50) is a data type. If you use char, you need

to specify the max length• When you can use other data types, do not use char. For example, it is

better to use int for MonthlyCost instead of using char

PARKING(SpotID, Location, MonthlyCost)USER(UserID, Name, Email, SpotID)

IST210 45

In-class Exercise 2Transform this diagram into tables

BUILDING(BuildingName, Address)APARTMENT(BuildingName, ApartmentID, NumberOfBedrooms, NumberofBaths, Rent)

IST210 46

BUILDING table

Column Name

Data Type

Key Required Remarks

BuildingName

ApartmentID

NumberOfBed

NumberOfBath

Rent

APARTMENT table

Column Name

Data Type

Key Required Remarks

BuildingName

Address

BUILDING(BuildingName, Address)APARTMENT(BuildingName, ApartmentID, NumberOfBedrooms, NumberofBaths, Rent)

In-class Exercise 2

IST210 47

BUILDING table

Column Name

Data Type

Key Required Remarks

BuildingName Char(20) Primary key, foreign key

Yes Reference: BUILDING

ApartmentID int Primary key Yes

NumberOfBed float Yes

NumberOfBath float Yes

Rent float Yes

APARTMENT table

Column Name

Data Type

Key Required Remarks

BuildingName

Char(20) Primary key

Yes

Address Char(100) Yes Format: street, city, state, zip code

BUILDING(BuildingName, Address)APARTMENT(BuildingName, ApartmentID, NumberOfBedrooms, NumberofBaths, Rent)

IST210 48

BUILDING table

Column Name

Data Type

Key Required Remarks

BuildingName Char(20) Primary key, foreign key

Yes Reference: BUILDING

ApartmentID int Primary key Yes

NumberOfBed float Yes

NumberOfBath

float Yes

Rent float Yes

APARTMENT table

Column Name

Data Type

Key Required Remarks

BuildingName

Char(20) Primary key

Yes

Address Char(100) Yes Format: street, city, state, zip code

Notes: • ApartmentID should NOT be a surrogate key. In real scenarios, we are using

some meaningful ApartmentIDs, such as 100 or 201 instead of a meaningless system-generated id.

• Use float for #ofBed, #ofBath, and Rent. Because #ofBath could be 1.5 and rent could be $890.50, which are not integers.

IST210 49

In-class Exercise 3Transform this diagram into tables

STUDENT(StudentID, StudentName, Email)COURSE(CourseID, CourseName, Instructor)REGISTRATION(StudentID, CourseID)

IST210 50

STUDENT(StudentID, StudentName, Email)COURSE(CourseID, CourseName, Instructor)REGISTRATION(StudentID, CourseID)

STUDENT table

Column Name

Data Type Key Required Remarks

CourseID

CourseName

Instructor

COURSE table

Column Name

Data Type

Key Required Remarks

StudentID

StudentName

Email

Column Name

Data Type

Key Required Remarks

StudentID

CourseID

REGISTRATION table

In-class Exercise 3

IST210 51

STUDENT(StudentID, StudentName, Email)COURSE(CourseID, CourseName, Instructor)REGISTRATION(StudentID, CourseID)

STUDENT table

Column Name

Data Type Key Required Remarks

CourseID Char(20) Primary key

Yes Format: DepartmentName + CourseNumber

CourseName Char(50) Yes

Instructor Char(100) No

COURSE table

Column Name

Data Type Key Required Remarks

StudentID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

StudentName Char(100) Yes

Email Char(50) No

Column Name

Data Type

Key Required Remarks

StudentID int Primary key, foreign key Yes Reference: STUDENT

CourseID Char(20) Primary key, foreign key Yes Reference: COURSE

REGISTRATION table

IST210 52

STUDENT table

Column Name

Data Type Key Required Remarks

CourseID Char(20) Primary key

Yes Format: DepartmentName + CourseNumber

CourseName Char(50) Yes

Instructor Char(100) No

COURSE table

Column Name

Data Type

Key Required Remarks

StudentID int Primary key

Yes Surrogate key: initial value = 1 Increment = 1

StudentName Char(100) Yes

Email Char(50) No

Column Name

Data Type

Key Required Remarks

StudentID int Primary key, foreign key

Yes Reference: STUDENT

CourseID Char(20) Primary key, foreign key

Yes Reference: COURSE

REGISTRATION table

Notes:• A CourseID should not be integer, for example, “IST210” is a courseID.

CourseName for IST210 is “Organization of the data”.

IST210 53

E-R Diagram Tables

1. Entity Table• Entity name Table name• Identifier Primary key• Attributes Attributes

2. Relationship Foreign key or a new table3. Specify the attribute properties

IST210 54

Attendance check?

Recommended