You are on page 1of 44

Mountain View Community Hospital

Case Study

INFO7275
Advanced Data Management and Database Design
Professor: Dimitrios Fotiadis
Fall 2010

PROJECT TEAM MEMBERS:


SALIM KHAN
TANVI CHITNIS
ABHIJEET KUSHE

Mountain View Community Hospital


Case Study
INDEX
1. Introduction
2. Software used
3. Features Implemented
4. Phase 1: Data Modeling and Business Rules
4.1. ER model
4.2. EER model
4.3. Merged ER and Enhanced ER model
5. Phase 2: Logical Database Design And Relational Model
5.1. Relational Schema
6. Phase 3: Sql Programming
6.1. Create Tables
6.2. Indexes
6.3. SQL Loader
7. Phase 4: Web-Enabled Database Interface
7.1. Overview
7.2. Screenshots
8. Additional PL/SQL

Mountain View Community Hospital


Case Study
1. Introduction
This project aims to implement a database application to support the basic functions of a
hospital.
The Mountain View Community Hospital System can be entered by using a username and
password. It can be accessed by a Patient or an Administrator. The Patient can open a new
account by registering for it. A Patient can login again at any later time and update his profile
if he wishes to.
An Administrator can help a patient by registering for the patient through his own work area.
An Administrator can view all Persons data or choose to view only Patient data. He/she can
delete one or more Person accounts. He/she can search for a Patient by his last name as well.

2. Software Used

Oracle 10g

Spring Source IDE

Microsoft Visio

Mountain View Community Hospital


Case Study
3. Features Implemented

Encode/Decode Functions for Password encryption.

REF Cursor

Procedures

Functions

Packages

Triggers

Sequences

Tablespace

Dynamic SQL (Bind variables)

Decode statements

VARRAY

Merge Statements

SQL Loader

Mountain View Community Hospital


Case Study
4. Phase 1:
Enhanced ER model and Business Rules
4.1. ER model

Mountain View Community Hospital


Case Study
4.1.1.

Business Rules:

Each Care center has one or many employees in it.


Each employee is assigned in one or more Care center
Each Care center has one nurse in charge.
One nurse can be in charge of one or more Care center (Nurse is a employee).
Nurse may or may not record any number of vital records of patient. Each patients vital
record is recorded by exactly one nurse.
Working hours of each employee in a particular care center are recorded.
Physician can refer any number of patients or may not refer any patient. Each patient is
referred by exactly one physician.
Physician can admit any number of patients or may not admit any patient. Each patient is
admitted by exactly one physician.
Physician can order any number of treatments or may not order any treatment for patient.
Patient may or may not have treatments performed by any number of physician. Hospital
records treatment date, time and results.
Physician may or may not diagnose any number of diagnosis conditions for patient. A patient
may or may not be diagnosed. Hospital records date and time of diagnosis.
Diagnosis unit can provide one or more treatment. Each treatment is provided by exactly one
diagnosis unit.
Each facility may or may not have any number of diagnosis unit. Each diagnosis unit belongs
to exactly one facility.
Facility may or may not have any number of Care center. Each care center is belongs to
exactly one facility.
Facility may or may not have any number of physicians. Each physician may or may not
belongs to any number of facilities.
Care center has one or more rooms. Each room may or may not belong to a care center. A
room may or may not have any number of beds. Each bed belongs to exactly one room.
A patient may or may not be assigned a bed. A bed may or may not assigned to a patient.
Patient can consume any number of items or may not consume any item. Each item may or
may not be consumed by any number of patients.
Vendor can supply any number of items or may not supply any item. Each item is supplied
by one or more vendor.
Patient can have any number of charges/bills or may not have any charge/bill. Each
charge/bill belongs to exactly one patient.
Patient charge/bill may or may not have charges for room.
Patient can be charged for any number of treatments or items.

Mountain View Community Hospital


Case Study
4.2. EER Model

Mountain View Community Hospital


Case Study
4.2.1. Nurse-In-Charge Relationship

4.2.2. Business Rules for Volunteer

A Volunteer must have exactly one emergency contact. An emergency contact may be a contact for
more than one Volunteer.
A Volunteer may have one or two references. A Reference can be a reference for more than one
Volunteer.
A Volunteer may or may not have any current or last employer. An employer may have more than
one Volunteer as an employee.
A Volunteer may have previous Volunteer experience at MVCH.
A Volunteer may have previous Volunteer experience (other than MVCH).
A Volunteer may or may not have skills.
A Volunteer may or may not have hobbies.
A Volunteer may or may not have interests.
A Volunteer may or may not speak one or more languages.
A Volunteer may have one or more available timeslots. A timeslot may be chosen by one or more
Volunteers.

Mountain View Community Hospital


Case Study
4.3. Merged ER and EER Model

Mountain View Community Hospital


Case Study
4.3.1. Additional Business Rules

A Person can be an Employee, Physician, Patient or a Volunteer. A Person may belong to zero or
more groups.
A Patient can only be a In Patient or an Out Patient. A Patient may not belong to both groups.
An Out Patient may or may not be scheduled for one or more Visits. A Visit is scheduled for exactly
one Out Patient.
A In Patient is assigned exactly one Bed. A Bed may or may not be assigned to a In Patient.
A Person can be an Employee, Physician, Patient or a Volunteer. A Person may belong to zero or
more groups.
An Employee can be Staff, Nurse or a Technician.
A Nurse can either be RN certified or LPN certified.
A RN certified Nurse may or may not be assigned nurse-in-charge for a Care Center.
Each Care Center has exactly one nurse-in-charge for the day and one nurse-in-charge for night.
A LPN certified nurse works under exactly one RN certified nurse. A RN certified nurse may or may
not lead one or more LPN nurses.
A Technician may have one or more Skills.
A Technician is assigned to exactly one Work Unit. A Work Unit may or may not have one or more
Technicians.
A Staff is assigned to exactly one Work Unit. A Work Unit may or may not have one or more Staff.
A Volunteer is supervised by exactly one Employee or Physician. An Employee may or may not
supervise one or more Volunteers. A Physician may or may not supervise one or more Volunteers.
A Volunteer works for exactly one Work Unit. A Work Unit may or may not have one or more
Volunteers.

Mountain View Community Hospital


Case Study
5. Phase 2:
Logical Database Design And Relational Model
5.1. Relational Schema

Mountain View Community Hospital


Case Study
BED
Bed_Nbr

Room_No

Name

Unit_id

ee
CARE_CENTER
Unit_Id

Name

Person_Id

Location

ROOM
Unit_Id

Name

Room_No

DIAGNOSTIC_UNIT
Unit_Id

DiagnosticUnit_Id

Item_Id

Description

Vendor_ID

Item_Id

ITEM

VENDOR_ITEM

Price

VENDOR
Vendor_Id

CONSUMPTION

Date

Name

Time

MRN

Person_Id

Quantity

Total_Cost

ORDER_ITEM
Order_Id

MRN

Invoice_Id

Item_Id

ORDER
Order_Id
TREATMENT RECORD
MRN

Invoice_ID

Unit_ID

MRN

Invoice_Id

Physician_Id

__
DiagnosticUnit_I
D

Facility_ID

Order_ID

Treatment_
D

Time

Dat
e

Re
su

Mountain View Community Hospital


Case Study
TREATMENT

Treatment_ID

DiagnosticUnit_ID

Facility_ID

Unit_ID

Name

Diagnosis

Diagnosis_Id

Name

Patient_Diagnosis

Physician_ID

MRN

Diagnosis_ID

Date

Time

Description

Weight

Blood Pressure

Person_ID

Vital_Record
Vital_Record_Id

Emp_Id

MRN

Person_Id

Pulse

Patient_Charges
Invoice_Id

Room_no

Person_Id

Unit_Id

Name

Person
Person_Id

Employee

Patient

Physician

FName

Employee_Id

Petient_id

Physician_Id

LName

Address

City

Hire_Date

Petient_ty
pe

Specialty

Pager_Nbr

DEA_Nbr

State

Zip

Phone

Emai
l

Nurse

Mountain View Community Hospital


Case Study
Nurse_Id

Speciality

Volunteer_Id

Skill

Volunteer_Serv
ice

Volunteer_Id

Begin_Date

Volunteer_Refere
nces

Volunteer_Id

FName

Volunteer
siexten

Visit

Visit_Id

In_patient1

Out_patient1

Technician_Skill

person_Id

Nursing_License

Interest

Address

End_Date

LName

Date

admitda
te

Dischar
ge_dat
e

person_Id

skill_Id

Description

City

Unit_Id

Address

Time

Certification

State

Nbr_Hours

Relation

Reason

Bed_Nbr

Phone

Person_Id

Room_Nbr

Nurse_Typ
e
Zip

BirthDate

Mountain View Community Hospital


Case Study
6. Phase 3:
Sql Programming
6.1. Create Tables
DROP TABLE TECHNICIAN
CASCADE CONSTRAINTS ;
DROP TABLE TECHNICIAN_SKILL
CASCADE CONSTRAINTS ;
DROP TABLE TECH_HAS_SKILL
CASCADE CONSTRAINTS ;
DROP TABLE VOLUNTEER
CASCADE CONSTRAINTS ;
DROP TABLE VOLUNTEER_SERVICE
CASCADE CONSTRAINTS ;
DROP TABLE VOLUNTEER_EMPLOYMENT
CASCADE CONSTRAINTS ;
DROP TABLE VOLUNTEER_REFERENCE
CASCADE CONSTRAINTS ;
DROP TABLE STAFF
CASCADE CONSTRAINTS ;
DROP TABLE IN_PATIENT
CASCADE CONSTRAINTS ;
DROP TABLE OUT_PATIENT
CASCADE CONSTRAINTS ;
DROP TABLE PATIENT
CASCADE CONSTRAINTS ;
DROP TABLE PHYSICIAN
CASCADE CONSTRAINTS ;
DROP TABLE NURSE
CASCADE CONSTRAINTS ;
DROP TABLE RN_NURSE
CASCADE CONSTRAINTS ;
DROP TABLE LPN_NURSE
CASCADE CONSTRAINTS ;
DROP TABLE EMPLOYEE
CASCADE CONSTRAINTS ;
DROP TABLE ROOM
CASCADE CONSTRAINTS ;
DROP TABLE BED
CASCADE CONSTRAINTS ;
DROP TABLE FACILITY
CASCADE CONSTRAINTS ;
DROP TABLE CARE_CENTER
CASCADE CONSTRAINTS ;
DROP TABLE WORK_UNIT
CASCADE CONSTRAINTS ;
DROP TABLE PERSON
CASCADE CONSTRAINTS ;
DROP TABLE ADMISSION_RECORDS
CASCADE CONSTRAINTS ;
DROP TABLE PATIENT_EMERG_CONTACT
CASCADE CONSTRAINTS ;
DROP TABLE PATIENT_INS
CASCADE CONSTRAINTS ;
DROP TABLE PATIENT_PRIM_DOCTOR
CASCADE CONSTRAINTS ;
DROP TABLE PAT_INS_SUBSC
CASCADE CONSTRAINTS ;
DROP TABLE CONSUMPTION
CASCADE CONSTRAINTS ;
DROP TABLE PAT_ORDER
CASCADE CONSTRAINTS ;
DROP TABLE ITEM
CASCADE CONSTRAINTS ;
DROP TABLE ORDERED_ITEM
CASCADE CONSTRAINTS ;
DROP TABLE VENDOR
CASCADE CONSTRAINTS ;

Mountain View Community Hospital


Case Study

DROP TABLE VENDOR_ITEM

CASCADE CONSTRAINTS ;

CREATE TABLE PERSON


(
Person_ID
NUMBER
NOT NULL,
Person_First_Name VARCHAR2(50) ,
Person_Last_Name VARCHAR2(50) ,
Person_Gender
VArchar2(7) CHECK (PERSON_GENDER IN('M','F') ),
Person_Country VARCHAR2(20) ,
PERSON_BIRTHDATE VARCHAR2(20) ,
Person_Address VARCHAR2(40) ,
Person_City
VARCHAR2(50) ,
Person_State
VARCHAR2(20) ,
Person_Zip
VARCHAR2(12) ,
Person_Phone
VARCHAR2(50) ,
Person_Email
VARCHAR2(40) ,
Person_Type
VARCHAR2(20) CHECK (Person_Type IN('EM','PA','VO','PH') ),
Person_Username VARCHAR2(20),
Person_Password VARCHAR2(200),
Created_Date
DATE
DEFAULT SYSDATE,
CONSTRAINT PERSON_PK PRIMARY KEY (Person_ID)
)
PARTITION BY RANGE(Created_Date)(
PARTITION P1 VALUES LESS THAN (TO_DATE('31-12-2008','DD-MM-YYYY')),
PARTITION P2 VALUES LESS THAN (TO_DATE('31-12-2009','DD-MM-YYYY')),
PARTITION P3 VALUES LESS THAN (MAXVALUE)
);

CREATE TABLE PHYSICIAN


(
DEA_ID
VARCHAR2(20) NOT NULL ,
Physician_ID
NUMBER
NOT NULL,
Specialty
VARCHAR2(50) ,
Pager_Nbr
VARCHAR2(50) ,
CONSTRAINT PHYSICIAN_PK PRIMARY KEY (Physician_ID),

Mountain View Community Hospital


Case Study

CONSTRAINT PHYSICIAN_FK1 FOREIGN KEY (Physician_ID) REFERENCES


PERSON(Person_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE EMPLOYEE


(
Employee_ID
NUMBER
NOT NULL ,
Date_Hired
DATE
,
Employee_Type
VARCHAR2(50) CHECK (Employee_Type
IN('STAFF','NURSE','TECHNICIAN') ),
CONSTRAINT EMPLOYEE_PK PRIMARY KEY (Employee_ID),
CONSTRAINT EMPLOYEE_FK1 FOREIGN KEY (Employee_ID) REFERENCES
PERSON(Person_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE FACILITY
(
Facility_ID
NUMBER
NOT NULL,
Facility_Name VARCHAR2(50) ,
CONSTRAINT FACILITY_PK PRIMARY KEY (Facility_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE WORK_UNIT
(
Unit_ID
NUMBER
NOT NULL,
Unit_Name VARCHAR2(50),
Facility_ID NUMBER,
Work_Unit_Type VARCHAR(50) CHECK (Work_Unit_Type IN('CC','DU') ),
CONSTRAINT WORK_UNIT_PK PRIMARY KEY (Unit_ID),
CONSTRAINT WORK_UNIT_FK FOREIGN KEY (Facility_ID) REFERENCES
FACILITY(Facility_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE NURSE
(
Nurse_ID
NUMBER
NOT NULL,
Speciality
VARCHAR2(10),
Nursing_License VARCHAR2(10),
Certificate VARCHAR2(25) NOT NULL,

Mountain View Community Hospital


Case Study

Nurse_Type VARCHAR2(10) CHECK (Nurse_Type IN('RN','LPN') ),


CONSTRAINT NURSE_PK PRIMARY KEY (Nurse_ID),
CONSTRAINT NURSE_FK2 FOREIGN KEY (Nurse_ID) REFERENCES
EMPLOYEE(Employee_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE RN_NURSE


(
RN_Nurse_ID
NUMBER
NOT NULL,
CONSTRAINT RN_NURSE_PK PRIMARY KEY (RN_Nurse_ID),
CONSTRAINT RN_NURSE_FK2 FOREIGN KEY (RN_Nurse_ID) REFERENCES
NURSE(Nurse_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE LPN_NURSE
(
LPN_Nurse_ID
NUMBER
NOT NULL,
Supervisor
NUMBER,
CONSTRAINT LPN_NURSE_PK PRIMARY KEY (LPN_Nurse_ID),
CONSTRAINT LPN_NURSE_FK2 FOREIGN KEY (LPN_Nurse_ID) REFERENCES
NURSE(Nurse_ID),
CONSTRAINT LPN_NURSE_FK3 FOREIGN KEY (Supervisor) REFERENCES
RN_NURSE(RN_Nurse_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE CARE_CENTER
(
Unit_ID
NUMBER
NOT NULL,
CareCenter_Location VARCHAR2(50) ,
CareCenter_Name VARCHAR2(50) ,
Day_Nurse_Incharge NUMBER ,
Night_Nurse_Incharge NUMBER ,
CONSTRAINT CARE_CENTER_PK PRIMARY KEY (CareCenter_Name),
CONSTRAINT CARE_CENTER_FK1 FOREIGN KEY (Unit_ID) REFERENCES
WORK_UNIT(Unit_ID),
CONSTRAINT CARE_CENTER_FK2 FOREIGN KEY (Day_Nurse_Incharge)
REFERENCES RN_NURSE(RN_Nurse_ID),
CONSTRAINT CARE_CENTER_FK3 FOREIGN KEY (Night_Nurse_Incharge)
REFERENCES RN_NURSE(RN_Nurse_ID)

Mountain View Community Hospital


Case Study

)TABLESPACE ADB_SPACE;

CREATE TABLE ROOM


(
Room_ID
NUMBER
NOT NULL,
CareCenter_Name VARCHAR2(50),
CONSTRAINT ROOM_PK PRIMARY KEY (CareCenter_Name,Room_ID),
CONSTRAINT ROOM_FK1 FOREIGN KEY (CareCenter_Name) REFERENCES
CARE_CENTER(CareCenter_Name)
)TABLESPACE ADB_SPACE;
CREATE TABLE BED
(
Bed_ID
NUMBER
NOT NULL,
Room_ID
NUMBER
NOT NULL,
CareCenter_Name VARCHAR2(50),
CONSTRAINT BED_PK PRIMARY KEY (Bed_ID,Room_ID,CareCenter_Name),
CONSTRAINT BED_FK1 FOREIGN KEY (Room_ID,CareCenter_Name) REFERENCES
ROOM(Room_ID,CareCenter_Name)
)TABLESPACE ADB_SPACE;
CREATE TABLE PATIENT
(
Patient_Type
VARCHAR2(10) CHECK (Patient_Type IN('IN','OUT') )
Patient_ID
NUMBER
NOT NULL,
CONSTRAINT PATIENT_PK PRIMARY KEY (Patient_ID) ,
CONSTRAINT PATIENT_FK1 FOREIGN KEY (Patient_ID) REFERENCES
PERSON(Person_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE OUT_PATIENT


(
Out_Patient_ID
NUMBER
NOT NULL,
CONSTRAINT OUTPATIENT_PK PRIMARY KEY (Out_Patient_ID),
CONSTRAINT OUTPATIENT_FK FOREIGN KEY (Out_Patient_ID) REFERENCES
PATIENT(Patient_ID)
)TABLESPACE ADB_SPACE;

Mountain View Community Hospital


Case Study
CREATE TABLE IN_PATIENT
(
IN_Patient_ID
NUMBER NOT NULL,
Bed_Nbr
NUMBER NOT NULL,
Room_Nbr
NUMBER NOT NULL,
CareCenter_Name VARCHAR2(50),
CONSTRAINT IN_PATIENT_PK PRIMARY KEY (IN_Patient_ID),
CONSTRAINT IN_PATIENT_FK1 FOREIGN KEY
(Bed_Nbr,Room_Nbr,CareCenter_Name) REFERENCES
BED(Bed_ID,Room_ID,CareCenter_Name),
CONSTRAINT IN_PATIENT_FK2 FOREIGN KEY (IN_Patient_ID) REFERENCES
PATIENT(Patient_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE ADMISSION_RECORDS
(
Admission_Date
DATE
NOT NULL,
Admission_Time
VARCHAR2(50)
NOT NULL,
Discharge_Date
DATE,
Discharge_Time
VARCHAR2(50),
IN_Patient_ID
NUMBER
NOT NULL,
Physician_ID
NUMBER
NOT NULL,
Referral_Physician NUMBER,
CONSTRAINT ADMISSION_RECORDS_PK PRIMARY KEY
(IN_Patient_ID,Admission_Date,Admission_Time),
CONSTRAINT ADMISSION_RECORDS_FK1 FOREIGN KEY (Physician_ID)
REFERENCES PHYSICIAN(Physician_ID),
CONSTRAINT ADMISSION_RECORDS_FK2 FOREIGN KEY (Referral_Physician)
REFERENCES PHYSICIAN(Physician_ID),
CONSTRAINT ADMISSION_RECORDS_FK3 FOREIGN KEY (IN_Patient_ID)
REFERENCES IN_PATIENT(IN_Patient_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE STAFF


(
Staff_ID
NUMBER
Unit_ID
NUMBER,

NOT NULL,

Mountain View Community Hospital


Case Study

CONSTRAINT STAFF_PK PRIMARY KEY (Staff_ID),


CONSTRAINT STAFF_FK1 FOREIGN KEY (Staff_ID) REFERENCES
EMPLOYEE(Employee_ID),
CONSTRAINT STAFF_FK2 FOREIGN KEY (Unit_ID) REFERENCES
WORK_UNIT(Unit_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE TECHNICIAN


(
Technician_ID
NUMBER
NOT NULL,
Unit_ID
NUMBER,
CONSTRAINT TECHNICIAN_PK PRIMARY KEY (Technician_ID),
CONSTRAINT TECHNICIAN_FK1 FOREIGN KEY (Technician_ID) REFERENCES
EMPLOYEE(Employee_ID),
CONSTRAINT TECHNICIAN_FK2 FOREIGN KEY (Unit_ID) REFERENCES
WORK_UNIT(Unit_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE TECHNICIAN_SKILL
(
Skill_ID
NUMBER
NOT NULL,
Skill_Desc
VARCHAR2(50),
CONSTRAINT TECHNICIAN_SKILL_PK PRIMARY KEY (Skill_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE TECH_HAS_SKILL
(
Technician_ID
NUMBER
NOT NULL,
Skill_ID
NUMBER
NOT NULL,
CONSTRAINT TECH_HAS_SKILL_PK PRIMARY KEY (Technician_ID,Skill_ID),
CONSTRAINT TECH_HAS_SKILL_FK1 FOREIGN KEY (Technician_ID) REFERENCES
TECHNICIAN(Technician_ID),
CONSTRAINT TECH_HAS_SKILL_FK2 FOREIGN KEY (Skill_ID) REFERENCES
TECHNICIAN_SKILL(Skill_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE VOLUNTEER
(
Volunteer_id NUMBER

NOT NULL,

Mountain View Community Hospital


Case Study

Skill
VARCHAR2(50),
Interest
VARCHAR2(50),
Address
VARCHAR2(50),
City
VARCHAR2(20),
Zip
NUMBER,
BirthDate
DATE,
CONSTRAINT VOLUNTEER_PK PRIMARY KEY (Volunteer_ID),
CONSTRAINT VOLUNTEER_FK1 FOREIGN KEY (Volunteer_ID) REFERENCES
PERSON(PERSON_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE VOLUNTEER_REFERENCE
(
Volunteer_ID NUMBER
NOT NULL,
First_Name
VARCHAR2(50),
Last_Name
VARCHAR2(50),
Relation
VARCHAR2(50),
Address
VARCHAR2(50),
Phone
NUMBER,
CONSTRAINT VOLUNTEER_REFERENCE_PK PRIMARY KEY (Volunteer_ID),
CONSTRAINT VOLUNTEER_REFERENCE_FK1 FOREIGN KEY (Volunteer_ID)
REFERENCES VOLUNTEER(Volunteer_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE VOLUNTEER_EMPLOYMENT
(
Volunteer_ID
NUMBER
NOT NULL,
Employer_Name
VARCHAR2(50),
Employer_Address VARCHAR2(50),
Position
VARCHAR2(50),
Date_of_Employment DATE,
CONSTRAINT VOLUNTEER_EMPLOYMENT_PK PRIMARY KEY (Volunteer_ID),
CONSTRAINT VOLUNTEER_EMPLOYMENT_FK1 FOREIGN KEY (Volunteer_ID)
REFERENCES VOLUNTEER(Volunteer_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE VOLUNTEER_SERVICE
(
Volunteer_ID NUMBER
NOT NULL,

Mountain View Community Hospital


Case Study

Begin_Date
DATE,
End_Date
DATE,
Unit_ID
NUMBER,
Nbr_Hours
NUMBER,
CONSTRAINT VOLUNTEER_SERVICE_PK PRIMARY KEY (Volunteer_ID),
CONSTRAINT VOLUNTEER_SERVICE_FK1 FOREIGN KEY (Volunteer_ID)
REFERENCES VOLUNTEER(Volunteer_id),
CONSTRAINT VOLUNTEER_SERVICE_FK2 FOREIGN KEY (Unit_ID) REFERENCES
WORK_UNIT(Unit_id)
)TABLESPACE ADB_SPACE;
CREATE TABLE PATIENT_EMERG_CONTACT
(
PATIENT_ID NUMBER,
FIRST_NAME VARCHAR2(30),
LAST_NAME VARCHAR2(30),
RELATION VARCHAR2(30),
ADDRESS VARCHAR2(30),
PHONE VARCHAR2(12),
CONSTRAINT PK_EMG PRIMARY KEY (PATIENT_ID),
CONSTRAINT FK_EMG FOREIGN KEY (PATIENT_ID) REFERENCES
PATIENT(PATIENT_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE PATIENT_INS
(
PATIENT_ID NUMBER,
POLICY_NBR VARCHAR2(12),
COMPANY_NAME VARCHAR2(30),
GROUP_NBR VARCHAR2(12),
COVERAGE_DATE VARCHAR2(15),
COMP_PHONE VARCHAR2(12),
CONSTRAINT FK_INS FOREIGN KEY (PATIENT_ID) REFERENCES
PATIENT(PATIENT_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE PATIENT_PRIM_DOCTOR
(
PATIENT_ID NUMBER,

Mountain View Community Hospital


Case Study

NAME
VARCHAR2(30),
ADDRESS VARCHAR2(30),
PHONE VARCHAR2(30),
DEA_NBR VARCHAR2(12),
CONSTRAINT PK_DOC PRIMARY KEY (PATIENT_ID),
CONSTRAINT FK_DOC FOREIGN KEY (PATIENT_ID) REFERENCES
PATIENT(PATIENT_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE PAT_INS_SUBSC


(
PATIENT_ID NUMBER,
FIRST_NAME VARCHAR2(30),
LAST_NAME VARCHAR2(30),
RELATION VARCHAR2(20),
ADDRESS VARCHAR2(30),
PHONE VARCHAR2(30),
CONSTRAINT FK_SUBS FOREIGN KEY (PATIENT_ID) REFERENCES
PATIENT(PATIENT_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE CONSUMPTION
(
PATIENT_ID NUMBER,
TIME
VARCHAR2(15),
CONS_DATE DATE,
MRN
VARCHAR2(12),
QUANTITY NUMBER,
TOTAL NUMBER(10,2),
CONSTRAINT FK_CON FOREIGN KEY (PATIENT_ID) REFERENCES
PATIENT(PATIENT_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE PAT_ORDER
(
ORDER_ID NUMBER,
MRN
VARCHAR2(12),
INVOICE_ID NUMBER,
PHYSICIAN_ID NUMBER,

Mountain View Community Hospital


Case Study

CONSTRAINT PK_OR PRIMARY KEY (ORDER_ID),


CONSTRAINT FK_OR FOREIGN KEY (PHYSICIAN_ID) REFERENCES
PHYSICIAN(PHYSICIAN_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE ITEM
(
ITEM_ID NUMBER,
DESCRIPTION VARCHAR2(20),
PRICE
NUMBER(9,2),
CONSTRAINT PK_IT PRIMARY KEY (ITEM_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE ORDERED_ITEM


(
ORDER_ID NUMBER,
ITEM_ID NUMBER,
CONSTRAINT FK_1 FOREIGN KEY (ORDER_ID) REFERENCES
PAT_ORDER(ORDER_ID),
CONSTRAINT FK_2 FOREIGN KEY (ITEM_ID) REFERENCES ITEM(ITEM_ID)
)TABLESPACE ADB_SPACE;

CREATE TABLE VENDOR


(
VENDOR_ID NUMBER,
NAME VARCHAR2(20),
CONSTRAINT PK_VE PRIMARY KEY (VENDOR_ID)
)TABLESPACE ADB_SPACE;
CREATE TABLE VENDOR_ITEM
(
VENDOR_ID NUMBER,
ITEM_ID NUMBER,
CONSTRAINT FK1_VI FOREIGN KEY (VENDOR_ID) REFERENCES
VENDOR(VENDOR_ID),
CONSTRAINT FK2_VI FOREIGN KEY (ITEM_ID) REFERENCES ITEM(ITEM_ID)
)TABLESPACE ADB_SPACE;

Mountain View Community Hospital


Case Study
6.2. Indexes
--A bitmap index to be created on gender & country,person_type column of person
table as the gender column has very low cardinality
DROP INDEX person_gender_bmp_idx;
DROP INDEX person_country_bmp_idx;
DROP INDEX person_type_bmp_idx;
DROP INDEX person_fname_idx;
DROP INDEX person_lname_idx;
CREATE BITMAP INDEX
person_gender_bmp_idx
ON person (PERSON_GENDER)
COMPUTE STATISTICS ;
CREATE BITMAP INDEX
person_country_bmp_idx
ON person (PERSON_COUNTRY)
COMPUTE STATISTICS ;
CREATE BITMAP INDEX
person_type_bmp_idx
ON person (PERSON_TYPE)
COMPUTE STATISTICS ;
--A search might need to be made on the first name and the last name of the various
users in the hospital
CREATE INDEX person_fname_idx
ON person (PERSON_FIRST_NAME)
COMPUTE STATISTICS ;
CREATE INDEX person_lname_idx
ON person (PERSON_LAST_NAME)
COMPUTE STATISTICS ;
--A search might be needed to be made on the records calcultated for the patient by
the nurse

Mountain View Community Hospital


Case Study

DROP TABLE vital_records CASCADE CONSTRAINTS;

CREATE TABLE vital_records


(vital_record_id
NUMBER PRIMARY KEY NOT NULL,
emp_id
NUMBER ,
patient_id
NUMBER,
weight VARCHAR2(50) ,
blood_pressure VARCHAR2(40) ,
pulse
VARCHAR2(50) ,
temp
VARCHAR2(2) ,
record_date
VARCHAR2(12) ,
reason
VARCHAR2(50) ,
symptoms
VARCHAR2(40) ,
CONSTRAINT vital_record_emp_fk FOREIGN KEY (emp_id) REFERENCES
employee(EMPLOYEE_ID),
CONSTRAINT vital_record_per_fk FOREIGN KEY (patient_id) REFERENCES
PATIENT(PATIENT_ID));

CREATE INDEX vital_records_patient_idx


ON vital_records (patient_id)
COMPUTE STATISTICS ;

CREATE INDEX vital_records_recdate_idx


ON vital_records (record_date)
COMPUTE STATISTICS ;

--A search might also be need to be made on the visit for every patient

CREATE TABLE VISIT


(Visit_ID NUMBER
NOT NULL,
Visit_Date
DATE,
Visit_Time
DATE,
Reason
VARCHAR(100),
Patient_ID
NUMBER,
CONSTRAINT VISIT_PK PRIMARY KEY (Visit_ID),

Mountain View Community Hospital


Case Study

CONSTRAINT VISIT_FK1 FOREIGN KEY (Patient_ID) REFERENCES


OUT_PATIENT(Out_Patient_ID)
);
CREATE INDEX visit_patient_idx
ON visit (patient_id)
COMPUTE STATISTICS ;
6.3. SQL Loader

/** person.ctl **/


load data
infile 'personinput.txt'
append
into table person
fields terminated by ','
trailing nullcols
(
Person_ID,Person_First_Name,Person_Last_Name,Person_Gender,Person_Country,P
ERSON_BIRTHDATE,Person_Address,Person_City,Person_State,Person_Zip,
Person_Phone,Person_Email,Person_Type,Person_Username,Person_Password,Crea
ted_Date)
/**person.txt **/
2000,Abhijeet,Kushe,M,United States,10/9/1984,38 Clearway
Street,Boston,MA,2115,5625371575,kushe.a@husky.neu.edu,PH,kushe.abhijeet,kus
he.abhijeet,02-Dec-2008
2001,Salim,Khan,M,United States,10/8/1984,52 Westland
Ave,Boston,MA,2115,6225371685,khan.sa@husky.neu.edu,PH,khan.sa,khan.sa,02Dec-2007
2002,Tanvi,Chitnis,F,United States,10/7/1985,400 Huntington
Ave,Boston,MA,2115,5225371205,tanvi.chitnis@husky.neu.edu,PH,ta.c,ta.c,03-Dec2007
2003,Subodh,Ghosalkar,M,United States,10/6/1986,438 Hemenway
,Boston,MA,2115,1234556666,kushe.a@husky.neu.edu,PH,su.g,su.g,05-Dec-2008
2004,Prathamesh,Rane,M,United States,10/5/1987,250 Mass
Ave,Cambridge,MA,2115,7891022344,kushe.a@husky.neu.edu,PH,p.rane,p.rane,05
-Dec-2008

Mountain View Community Hospital


Case Study

2005,Wasim,Sheikh,M,United States,10/3/1988,45 Clearway


Street,Boston,MA,2115,7625371575,wasim.sheikh@husky.neu.edu,PA,w.s,w.s,06Oct-2010
2006,Prasad,Shirodkar,M,United States,10/2/1989,45 Westland
Ave,Boston,MA,2115,8225371685,prasad.sh@husky.neu.edu,PA,p.sa,p.sa,07-Jul2009
2007,Tom,Sawyer,M,United States,10/1/1990,420 Huntington
Ave,Boston,MA,2115,9225371205,tom.s@husky.neu.edu,PA,tom.sa,tom.sa,08-Dec2009
2008,Mark,Twain,M,United States,9/30/1991,138 Hemenway
,Boston,MA,2115,2234556666,m.a@husky.neu.edu,PA,m.t,m.t,12-Sep-2010
2009,Arther,Doyle,M,United States,9/28/1992,350 Mass
Ave,Cambridge,MA,2115,5891022344,a.d@husky.neu.edu,PA,a.d,a.d,12-Oct-2009
/** patient.ctl **/
load data
infile 'patient.txt'
append
into table patient
fields terminated by ','
trailing nullcols
( Patient_Type,Patient_ID).
/** patient.txt **/
IN,2005
IN,2006
IN,2007
OUT,2008
IN,2009
/** patient_emer.ctl **/
load data
infile 'patient_emerinsert.txt'
append
into table PATIENT_EMERG_CONTACT
fields terminated by ','
trailing nullcols
(PATIENT_ID,FIRST_NAME,LAST_NAME,RELATION,ADDRESS,PHONE)

Mountain View Community Hospital


Case Study

/** patient_emer.txt **/


2005,Raju,King,Other Adult,38 Clearway Street,7891022344
2006,Kaju,Bing,Other Adult,52 Westland Ave,7625371575
2007,Saiju,Jing,Other Adult,400 Huntington Ave,8225371685
2008,Birju,Ding,Other Adult,438 Hemenway ,9225371205
2009,Mirzu,Ling,Other Adult,250 Mass Ave,2234556666

/** patient_insurance.ctl **/


load data
infile 'patientinsinsert.txt'
append
into table patient_ins
fields terminated by ','
trailing nullcols
(PATIENT_ID,POLICY_NBR,COMPANY_NAME,GROUP_NBR,COVERAGE_DATE,COMP
_PHONE)
/** patient_insurance.txt **/
2005,12324434567,Thomas Cook,Group 1,12/6/2008,6265371685
2006,12324445646,Axis Cook,Group 3,12/7/2010,7225371205
2007,12324678889,Five Star,Group 5,12/8/2009,1534556666
2008,45565786874,Tiger Star,Group 7,12/9/2010,7891722344
2009,89872467476,Tiger Star,Group 9,12/9/2010,7625871575
/** physician.txt **/
MVCHDEA000001,2000,Heart,5625371575
MVCHDEA000002,2001,Brain,6225371685
MVCHDEA000003,2002,Skin,5225371205
MVCHDEA000004,2003,Eyes,1234556666
MVCHDEA000005,2004,Gastro,7891022344
/** physician.ctl **/
load data
infile 'phys.txt'
BADFILE 'physician.bad'
DISCARDFILE 'physician.dsc'
append
discardmax 10
into table PHYSICIAN

Mountain View Community Hospital


Case Study

fields terminated by ','


trailing nullcols
(DEA_ID,Physician_ID,Specialty,Pager_Nbr)

7. Phase 4: Web-Enabled Database Interface


7.1. Overview
The Web-enabled Database Interface includes the following features:
A Person can login into the Mountain View Community Hospital System.
A New Patient can register for an account.
A Patient can login and update his/her profile as well.
An Administrator can login into the system.
An Administrator can register and update a new patient.
An Administrator can search for a Person by last name.
An Administrator can choose to list all Persons or only Patients.
An Administrator can choose to delete one or more Person accounts.

Mountain View Community Hospital


Case Study
7.2. Screenshots

Login Screen

Mountain View Community Hospital


Case Study

New User Screen

Mountain View Community Hospital


Case Study

Successful Registration

Mountain View Community Hospital


Case Study

Admin Work Area Screen

Mountain View Community Hospital


Case Study

Update Screen

Mountain View Community Hospital


Case Study
8. Additional PL/SQL
SPOOL c:\info\7275\finProj.list
-- Decode Query
SELECT PERSON.Person_ID, PERSON.Person_First_Name,
PERSON.Person_Last_Name, decode(PERSON.Person_Gender,'M','Male','F','Female')
person_gen, PERSON.Person_Country, PERSON.Person_Phone,
CASE PERSON.Person_Type
WHEN 'PA' THEN 'PATIENT'
WHEN 'PH' THEN 'PHYSICIAN'
WHEN 'EM' THEN 'EMPLOYEE'
WHEN 'VO' THEN 'VOLUNTEER'
END person_type
FROM PERSON
--Trigger for Delete Log
CREATE OR REPLACE TRIGGER del_person
BEFORE DELETE ON PERSON
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO DELETE_LOG VALUES(:old.Person_ID , :old.Person_First_Name
,:old.Person_Last_Name , :old.Person_Phone , :old.Person_Type);
END;
/
-- VARRAY
CREATE OR REPLACE TYPE Person_Array is VARRAY(20) OF NUMBER;
-- Procedure for Deleting users
CREATE OR REPLACE PROCEDURE DELETE_PERSON(p_person_array
Person_Array) AS
i NUMBER := 1;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);

Mountain View Community Hospital


Case Study
LOOP
EXECUTE IMMEDIATE 'DELETE FROM PERSON WHERE Person_ID =
:x' using p_person_array(i);
i := i + 1;
EXIT WHEN i > p_person_array.count;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
-- Function returning an Object Type
CREATE OR REPLACE TYPE Admission_Type AS OBJECT
(
Admission_Date
DATE,
Admission_Time
VARCHAR(50),
Discharge_Date
DATE,
Discharge_Time
VARCHAR(50),
Patient_ID
NUMBER,
Physician_ID
NUMBER
);
/
CREATE OR REPLACE TYPE Admission_List is VARRAY(100) OF Admission_Type;
/

CREATE OR REPLACE FUNCTION LIST_RECORDS RETURN Admission_List AS


v_array
i

Admission_List := Admission_List() ;
NUMBER :=1;

v_adm_date DATE;
v_adm_time
VARCHAR(20);
v_dis_date DATE;

Mountain View Community Hospital


Case Study
v_dis_time VARCHAR(20);
v_patient NUMBER;
v_physician NUMBER;

CURSOR adm_cur IS
SELECT Admission_Date, Admission_Time, Discharge_Date,
Discharge_Time, Patient_ID, Physician_ID
from ADMISSION_RECORDS;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
v_array.EXTEND(99);
OPEN adm_cur;
LOOP
FETCH adm_cur INTO v_adm_date, v_adm_time, v_dis_date,
v_dis_time, v_patient, v_physician;
v_array(i) := Admission_Type(v_adm_date, v_adm_time, v_dis_date,
v_dis_time, v_patient, v_physician);
i := i + 1;
EXIT WHEN adm_cur%NOTFOUND;
END LOOP;
CLOSE adm_cur;
RETURN v_array;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
RETURN v_array;
END;

Mountain View Community Hospital


Case Study

CREATE OR REPLACE PACKAGE fin_proj_pkg2 IS


FUNCTION encryptPassword(password IN VARCHAR2) RETURN RAW;
FUNCTION decryptPassword(password IN VARCHAR2) RETURN VARCHAR2;
FUNCTION verifyLogin(username IN VARCHAR2,password IN
VARCHAR2,p_personType OUT VARCHAR2) RETURN PLS_INTEGER;
END fin_proj_pkg2;
/
CREATE OR REPLACE PACKAGE BODY fin_proj_pkg2 IS
FUNCTION encryptPassword(password IN VARCHAR2) RETURN RAW
IS
v_encryptedPassword RAW(32767);
BEGIN
v_encryptedPassword:=UTL_ENCODE.uuencode(utl_raw.cast_to_raw(password));
RETURN v_encryptedPassword;
END;
FUNCTION decryptPassword(password IN VARCHAR2) RETURN VARCHAR2
IS
v_decryptedPassword VARCHAR2(30);
BEGIN
v_decryptedPassword:=utl_raw.cast_to_varchar2(UTL_ENCODE.uudecode(passwor
d)) ;
RETURN v_decryptedPassword;
END;
FUNCTION verifyLogin(username IN VARCHAR2,password IN
VARCHAR2,p_personType OUT VARCHAR2) RETURN PLS_INTEGER
IS
v_user_id PLS_INTEGER :=0;
v_password RAW(32767);
BEGIN
v_password:=encryptPassword(password);
SELECT p.person_id,

Mountain View Community Hospital


Case Study

CASE p.Person_Type
WHEN 'PA' THEN
'PATIENT'
WHEN 'PH' THEN
'PHYSICIAN'
WHEN 'EM' THEN
'EMPLOYEE'
WHEN 'VO' THEN
'VOLUNTEER'
END
INTO v_user_id, p_personType
FROM person p
WHERE p.person_username = username
AND p.person_password=v_password;
RETURN v_user_id;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_user_id:=0;
RETURN v_user_id;
END;
END fin_proj_pkg2;
/

CREATE OR REPLACE PROCEDURE getUserDetails(p_userType IN


VARCHAR2,p_refcursor OUT SYS_REFCURSOR,v_mode VARCHAR2,v_last_name
VARCHAR2) IS
v_user_query VARCHAR2(1000);
v_person_Type person.person_type%TYPE;
v_upper_last_name person.person_last_name%TYPE;
BEGIN
v_upper_last_name:=UPPER(v_last_name);
IF v_mode='SELECT'
THEN
IF p_userType='ALL'
THEN

Mountain View Community Hospital


Case Study

v_user_query:='Select p.Person_Id,
p.Person_First_Name,
p.Person_Last_Name,
decode(p.Person_Gender, ''M'', ''Male'', ''F'', ''Female''),
p.Person_Phone,
p.Person_Email,
em.Patient_Id,
em.First_Name,
em.Last_Name,
em.Relation,
em.Address,
em.City,
em.Phone,
em.Email,
p.person_type
FROM Person p, PATIENT_EMERG_CONTACT em
WHERE p.Person_Id = em.Patient_ID(+)';
open p_refcursor for v_user_query;
ELSIF p_userType='PATIENT'
THEN
v_person_Type:='PA';
v_user_query:='Select p.Person_Id,
p.Person_First_Name,
p.Person_Last_Name,
decode(p.Person_Gender, ''M'', ''Male'', ''F'', ''Female''),
p.Person_Phone,
p.Person_Email,
em.Patient_Id,
em.First_Name,
em.Last_Name,
em.Relation,
em.Address,
em.City,
em.Phone,
em.Email,
p.person_type
FROM Person p, PATIENT_EMERG_CONTACT em
WHERE p.Person_Id = em.Patient_ID(+) AND UPPER(p.person_type)
=:persontype';

Mountain View Community Hospital


Case Study

open p_refcursor for v_user_query USING v_person_Type;


ELSIF p_userType='PHYSICIAN'
THEN
v_person_Type:='PH';
v_user_query:='Select p.Person_Id,
p.Person_First_Name,
p.Person_Last_Name,
decode(p.Person_Gender, ''M'', ''Male'', ''F'', ''Female''),
p.Person_Phone,
p.Person_Email,
em.Patient_Id,
em.First_Name,
em.Last_Name,
em.Relation,
em.Address,
em.City,
em.Phone,
em.Email,
p.person_type
FROM Person p, PATIENT_EMERG_CONTACT em
WHERE p.Person_Id = em.Patient_ID(+) AND UPPER(p.person_type)
=:persontype';
open p_refcursor for v_user_query USING v_person_Type;
END IF;
ELSIF v_mode='SEARCH'
THEN
v_user_query:='Select p.Person_Id,
p.Person_First_Name,
p.Person_Last_Name,
decode(p.Person_Gender, ''M'', ''Male'', ''F'', ''Female''),
p.Person_Phone,
p.Person_Email,
em.Patient_Id,
em.First_Name,
em.Last_Name,
em.Relation,
em.Address,
em.City,
em.Phone,

Mountain View Community Hospital


Case Study

em.Email,
p.person_type
FROM Person p, PATIENT_EMERG_CONTACT em
WHERE p.Person_Id = em.Patient_ID(+) AND
UPPER(p.person_last_name)=:last_name ';
open p_refcursor for v_user_query USING v_last_name;
END IF;
END getUserDetails;
/
SPOOL OFF;

You might also like