Professional Documents
Culture Documents
Case Study
INFO7275
Advanced Data Management and Database Design
Professor: Dimitrios Fotiadis
Fall 2010
2. Software Used
Oracle 10g
Microsoft Visio
REF Cursor
Procedures
Functions
Packages
Triggers
Sequences
Tablespace
Decode statements
VARRAY
Merge Statements
SQL Loader
Business Rules:
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.
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.
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
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
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
CASCADE CONSTRAINTS ;
)TABLESPACE ADB_SPACE;
NOT NULL,
NOT NULL,
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,
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,
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;
--A search might also be need to be made on the visit for every patient
Login Screen
Successful Registration
Update Screen
Admission_List := Admission_List() ;
NUMBER :=1;
v_adm_date DATE;
v_adm_time
VARCHAR(20);
v_dis_date DATE;
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;
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;
/
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';
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;