LECTURE 5 :
RELATIONAL DATA MODEL AND
STRUCTURED QUERY LANGUAGE (SQL) I
1
Overview
SDLC phases
Planning Analysis Design Implementation Maintenance
Logical Physical Data
Database Database Database and database
database database
fundamentals analysis implementation administration
design design and security
• database • entity- • Relational • SQL • SQL • SQL
environment relationship data model • technical • data security
and (ER) diagram • transforming specifications • database backup
development • enhanced ER ER diagram of the database and recovery
process diagram into relations
• normalization
2
RELATIONAL DATA MODEL
3
Business rule: Each patient has one to many patient history.
Each patient history is belonged to one and only one patient.
ERD: PATIENT
P_ID PATIENT_HISTORY
P_Name PH_ID
(P_Lastname, P_Firstname) has PH_Date
P_DOB PH_Symptom_Description
[P_Age] PH_Diagnosis
P_Remarks PH_Status
4
ERD: PATIENT
P_ID PATIENT_HISTORY
P_Name PH_ID
(P_Lastname, P_Firstname) contains PH_Date
P_DOB PH_Symptom_Desc
[P_Age] PH_Diagnosis
P_Remarks PH_Status
A relational data model
Relational Data Model: PATIENT consists of relations
P_ID
____ P_Lastname P_Firstname P_DOB P_Remarks
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
5
Relational Data Model: PATIENT
P_ID
_____ P_Lastname P_Firstname P_DOB P_Remarks
PATIENT_HISTORY
PH_ID
_______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
----------
Tables in the PATIENT
A two-dimensional table
Relational Database: P_ID P_Lastname P_Firstname P_DOB P_Remarks
____
001 Mark Lui 30-APR-1998 <Null>
Each row is a record 002 Sarah Wong 6-AUG-1988 Allergic to nuts
Each column is an
003 Elsie Lee 24-OCT-1993 Serious asthma attribute
PATIENT_HISTORY
PH_ID
____ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
4011 5-AUG-2020 Sore throat, fever 101F, headache Flu 3d medication 001
4012 7-AUG-2020 Fatigue headache and muscle ache URI 2d medication w/ 002
antibiotics
4013 9-AUG-2020 Fever 102F, serious coughing, nausea Possibly Refer to A&E 002
pneumonia
6
Keys (1) - Primary Key
PATIENT PATIENT_HISTORY
P_ID PH_ID
P_Name PH_Date
(P_Lastname, P_Firstname) PH_Symptom_Desc
P_DOB contains
PH_Diagnosis
[P_Age] PH_Status
P_Remarks
Primary key is an attribute PATIENT
(or combination of attributes) that P_ID P_Lastname P_Firstname P_DOB P_Remarks
____
uniquely identifies every row in a relation
• can be simple or composite
PATIENT
____
P_ID P_Lastname P_Firstname P_DOB P_Remarks
001 Mark Lui 30-APR-1998 <Null>
002 Sarah Wong 6-AUG-1988 Allergic to nuts
003 Elsie Lee 24-OCT-1993 Serious asthma
7
Primary Key in relations
PATIENT PATIENT_HISTORY
P_ID PH_ID
P_Name PH_Date
(P_Lastname, P_Firstname) PH_Symptom_Desc
P_DOB contains PH_Diagnosis
[P_Age] PH_Status
P_Remarks
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
PATIENT_HISTORY
____
PH_ID PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
4011 5-AUG-2020 sore throat, fever 101F, headache Flu 3d medication 001
4012 7-AUG-2020 Fatigue headache and muscle ache URI 2d medication w/ 002
antibiotics
4013 9-AUG-2020 Fever 102F, serious coughing, nausea Possibly Refer to A&E 002
pneumonia
8
Other examples of Primary Key ?
Student Employee
ID ID
HKID
9
Keys (2) - Foreign Key
PATIENT PATIENT_HISTORY
P_ID PH_ID
P_Name PH_Date
(P_Lastname, P_Firstname) PH_Symptom_Desc
P_DOB contains
PH_Diagnosis
[P_Age] PH_Status
P_Remarks
PATIENT
P_ID
____ P_Lastname P_Firstname P_DOB P_Remarks
PATIENT_HISTORY Foreign key is an attribute
PH_ID PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status (or combination of attributes) that
______ P_ID
references the primary key of
same/another relation
• can be simple or composite
10
Foreign Key in relations
PATIENT
____
P_ID P_Lastname P_Firstname P_DOB P_Remarks
001 Mark Lui 30-APR-1998 <Null> ‘P_ID’ is Foreign Key,
002 Sarah Wong 6-AUG-1988 Allergic to nuts matches Primary Key of
‘PATIENT’
003 Elsie Lee 24-OCT-1993 Serious asthma
PATIENT_HISTORY
____
PH_ID PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
4011 5-AUG-2020 sore throat, fever 101F, headache Flu 3d medication 001
4012 7-AUG-2020 Fatigue headache and muscle ache URI 2d medication w/ 002
antibiotics
4013 9-AUG-2020 Fever 102F, serious coughing, nausea Possibly Refer to A&E 002
pneumonia
Which patient was referred to A&E after the diagnosis?
Who is P_ID 002?
11
ERD of the Travel Agency – 3rd Year
STAFF
S_ID
S_Name
DEPARMENT EmploymentDate
D_ID Consists_of Salary
D_Name
Has
Is_entitled_to
BENEFIT FAMILY
B_CODE Is_offered_to Name
B_DESC Birthdate
12
ERD:
Relational Data Model:
DEPARTMENT STAFF
D_ID D_Name S_ID
______ D_Name EmploymentDate Salary D_ID B_CODE
____
BENEFIT FAMILY
B_CODE
_________ B_DESC S_ID
____ Name
____ Birthdate B_CODE
Composite primary key
13
RELATIONAL DATA MODEL:
INTEGRITY CONSTRAINTS
14
Integrity Constraints
• Relations comply with integrity constraints that facilitate maintaining
the accuracy and integrity of data
• Domain Constraint
• Entity Integrity Constraint
• Referential Integrity Constraint
15
1. Domain Constraint
allowable values for an attribute
e.g. data type and size
PATIENT PATIENT_HISTORY
P_ID P_Lastname P_Firstname P_DOB P_Remarks PH_ID PH_Date PH_Symptom_ PH_Diagnosis PH_Status P_ID
Desc
Fields Data type and size Fields Data type and size
P_ID VARCHAR2 (3) PH_ID VARCHAR2(4)
P_Lastname VARCHAR2 (100) PH_Date DATE
P_Firstname VARCHAR2 (100) PH_Symptom_Desc VARCHAR2 (300)
P_DOB DATE PH_Diagnosis VARCHAR2 (300)
P_Remarks VARCHAR2 (1000) PH_Status VARCHAR2 (15)
No need to specify P_ID VARCHAR2 (3)
size for DATE
16
Common Data Types in Oracle
Data Type Description
VARCHAR2 (size) For storing characters. Example: 'HKUST'
Note: Similar to String data type in VBA, Java and Python
NUMBER For storing numerical values, including integers and
(precision, scale) floating-point values.
NUMBER(5,2) for storing the number 123.45
NUMBER(5,0) for storing integers such as 10000
DATE For storing both date and/or time.
Example: '20-SEP-2019'
17
2. Entity Integrity Constraint
Primary key attribute must NOT be null
DEPARTMENT STAFF
D_ID Consists_of S_ID
D_Name S_Name
DEPARTMENT STAFF
D_ID D_Name S_ID
____ S_Name D_ID
Fields Null? / Not Null?
Fields Null? / Not Null?
S_ID Primary Key field – Not Null
D_ID Primary Key field – Not Null
S_Name Not Null
D_Name Not Null
D_ID Foreign Key – Allow null values
18
DEPARTMENT STAFF
D_ID Consists_of S_ID
D_Name S_Name
DEPARTMENT STAFF
D_ID D_Name S_ID
____ S_Name D_ID
____
001 Peter Li <Null>
A Development
002 Mary Chan A
003 Anna Lee A
B Marketing 004 Tom Lee B
005 John Lam B
19
3. Referential Integrity Constraint
Foreign key has two possibilities:
• The foreign key value could be null
• The foreign key value must match a primary key value
DEPARTMENT Consists_of STAFF
D_ID S_ID
D_Name S_Name
DEPARTMENT STAFF
D_ID
____ D_Name S_ID
____ S_Name D_ID
001 Peter Li <Null>
A Development Invalid! E doesn’t
002 Mary Chan A
exist in
003 Anna Lee A
DEPARTMENT!!
B Marketing 004 Tom Lee B
005 John Lam B
006 Chris Wong E 20
3. Referential Integrity Constraint
Foreign key has two possibilities:
• The foreign key value could be null
• The foreign key value must match a primary key value
DEPARTMENT
D_ID
____ D_Name
BENEFIT Referential integrity constraints
B_Code
_________ B_Desc are drawn via arrows from the
foreign keys to the
FAMILY corresponding primary keys.
S_ID
____ Name Birthdate
______ B_Code
STAFF
S_ID
_____ S_Name EmploymentDate Salary B_Code D_ID
21
Sample Data for the Travel Agency in
Oracle database
STAFF
DEPARTMENT BENEFIT
FAMILY
22
INTRODUCTION TO SQL
23
What is Structured Query Language (SQL)?
• The standard language for relational database management systems
(RDBMS)
• Latest revision: SQL:2019
• Core and other parts
• Most RDBMS are at least in partial compliance with
the SQL standard
• Each vendor’s version also includes enhancements features, and
capabilities beyond the core SQL standard
24
Benefits of a Standardized Relational Language
• Application longevity
• a standard language tends to exist for a long time
• Reduced dependence on a single vendor
• can use different vendors for the DBMS
• Cross-system communication
• different DBMSs and programs can communicate and cooperate
• Application portability
• applications can be moved from machine to machine
25
Types of SQL Commands
SQL Types Syntax When do we use these commands?
Physical Database Design
CREATE • Define structure of tables in a database
Data Definition Language
ALTER
(DDL) Maintenance
DROP
• Modify structure of tables after the database is implemented
INSERT
Data Manipulation Language UPDATE Implementation
(DML) DELETE • Access and manipulate the data in the database
SELECT
Physical Database Design
• Control a database, including managing users’ privileges
Data Control Language GRANT
(DCL) REVOKE Maintenance
• Modify the privileges after the database is implemented
26
DATA DEFINITION LANGUAGE (DDL):
CREATE TABLE
27
Create tables in a database
PATIENT
P_ID
____ P_Lastname P_Firstname P_DOB P_Remarks
CREATE TABLE PATIENT
(
P_ID VARCHAR2 (5) NOT NULL,
P_LASTNAME VARCHAR2 (200) NOT NULL,
P_FIRSTNAME VARCHAR2 (200) NOT NULL,
P_DOB DATE NOT NULL,
P_REMARKS VARCHAR2 (2000),
CONSTRAINT PATIENT_PK PRIMARY KEY(P_ID)
);
28
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
CREATE TABLE PATIENT_HISTORY
(PH_ID VARCHAR2(5) NOT NULL,
PH_DATE DATE DEFAULT SYSDATE,
PH_SYMPTOM_DESC VARCHAR2(1000),
PH_DIAGNOSIS VARCHAR2(1000),
PH_STATUS VARCHAR2(16),
P_ID VARCHAR2(5) NOT NULL,
CONSTRAINT PATIENT_HISTORY_PK PRIMARY KEY(PH_ID),
CONSTRAINT PATIENT_HISTORY_FK FOREIGN KEY(P_ID) REFERENCES PATIENT(P_ID),
CONSTRAINT PH_STATUS_CHECK CHECK (PH_STATUS IN (‘2d Medicine’,’3d
Medicine’,‘Refer to AE’,
‘Physio Treatment’,’No action taken’)));
29
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
CREATE TABLE PATIENT_HISTORY
(PH_ID VARCHAR2(5) NOT NULL,
PH_DATE DATE DEFAULT SYSDATE,
PH_SYMPTOM_DESC VARCHAR2(1000),
PH_DIAGNOSIS VARCHAR2(1000),
PH_STATUS VARCHAR2(16),
P_ID VARCHAR2(5) NOT NULL,
CONSTRAINT PATIENT_HISTORY_PK PRIMARY KEY(PH_ID),
CONSTRAINT PATIENT_HISTORY_FK FOREIGN KEY(P_ID) REFERENCES PATIENT(P_ID),
CONSTRAINT PH_STATUS_CHECK CHECK (PH_STATUS IN (‘2d Medicine’,’3d
Medicine’,‘Refer to AE’,
‘Physio Treatment’,’No action taken’)));
30
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
CREATE TABLE PATIENT_HISTORY
(PH_ID VARCHAR2(5) NOT NULL,
PH_DATE DATE DEFAULT SYSDATE,
PH_SYMPTOM_DESC VARCHAR2(1000),
PH_DIAGNOSIS VARCHAR2(1000),
PH_STATUS VARCHAR2(16),
P_ID VARCHAR2(5) NOT NULL,
CONSTRAINT PATIENT_HISTORY_PK PRIMARY KEY(PH_ID),
CONSTRAINT PATIENT_HISTORY_FK FOREIGN KEY(P_ID) REFERENCES PATIENT(P_ID),
CONSTRAINT PH_STATUS_CHECK CHECK (PH_STATUS IN (‘2d Medicine’,’3d
Medicine’,‘Refer to AE’,
‘Physio Treatment’,’No action taken’)));
31
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
CREATE TABLE PATIENT_HISTORY
(PH_ID VARCHAR2(5) NOT NULL,
PH_DATE DATE DEFAULT SYSDATE,
PH_SYMPTOM_DESC VARCHAR2(1000),
PH_DIAGNOSIS VARCHAR2(1000),
PH_STATUS VARCHAR2(16),
P_ID VARCHAR2(5) NOT NULL,
CONSTRAINT PATIENT_HISTORY_PK PRIMARY KEY(PH_ID),
CONSTRAINT PATIENT_HISTORY_FK FOREIGN KEY(P_ID) REFERENCES PATIENT(P_ID),
CONSTRAINT PH_STATUS_CHECK CHECK (PH_STATUS IN (‘2d Medicine’,’3d
Medicine’,‘Refer to AE’,
‘Physio Treatment’,’No action taken’)));
32
Summary: CREATE TABLE command
• Define columns and constraints
• Appropriate datatype (VARCHAR2, NUMBER, DATE)
• Columns that should not accept null values (NOT NULL)
• Columns that are the primary keys (PRIMARY KEY)
• Columns that are the foreign keys (FOREIGN KEY)
• Pair of foreign key and primary key (REFERENCES)
• Columns with default values (DEFAULT)
• Columns with check (CHECK)
33
STAFF
S_ID
______ D_Name EmploymentDate Salary D_ID B_CODE
CREATE TABLE STAFF
(S_ID VARCHAR2(5) NOT NULL,
D_Name VARCHAR2(100) NOT NULL,
EmploymentDate DATE DEFAULT SYSDATE,
Salary NUMBER (8, 2) NOT NULL,
D_ID VARCHAR2 (5) NOT NULL,
No need here
B_CODE VARCHAR2 (5) NOT NULL,
No need here
CONSTRAINT STAFF_PK PRIMARY KEY (S_ID),
CONSTRAINT STAFF_FK1 FOREIGN KEY(D_ID) REFERENCES DEPARTMENT(D_ID),
CONSTRAINT STAFF_FK2 FOREIGN KEY(B_CODE) REFERENCES BENEFIT(B_CODE));
Can you create STAFF, without creating DEPARTMENT and BENEFIT in a database? 34
35
DATA DEFINITION LANGUAGE (DDL):
ALTER TABLE & DROP TABLE
36
Changing Table Definitions
PATIENT
P_ID P_Lastname
____ P_Firstname P_DOB P_Remarks P_
NICKNAME
PATIENT_HISTORY
PH_ID
______ PH_Date PH_Symptom_Desc PH_Diagnosis PH_Status P_ID
• Add ‘P_Nickanme’ column into the PATIENT table
ALTER TABLE PATIENT
ADD P_NICKNAME VARCHAR2 (200);
• Change the data type and size of ‘PH_Daignosis’ column of the PATIENT_HISTORY
table to VARCHAR2 (300)
ALTER TABLE PATIENT_HISTORY
MODIFY PH_DIAGNOSIS VARCHAR2 (300);
37
Changing Table Definitions
PATIENT
P_ID P_Lastname P_Firstname P_DOB P_Remarks P_
____ NICKNAME
PATIENT_HISTORY
PH_ID
____ PH_Date PH_Symptom_Desc PH_Diagnosis
PH_DIAG PH_Status P_ID
• Remove ‘P_Nickname’ column from the PATIENT table
ALTER TABLE PATIENT
DROP COLUMN P_NICKNAME;
• Rename the column ‘PH_Diagnosis’ of PATIENT_HISTORY as ‘PH_Diag’
ALTER TABLE PATIENT_HISTORY
RENAME COLUMN PH_DIAGNOSIS TO PH_DIAG;
38
Removing Tables from a database
• Remove tables from a database
DROP TABLE PATIENT;
DROP TABLE PATIENT_HISTORY;
39