Files
coursera-ibm-java-developer…/SmartClinicManagementSystem/schema-design.md

2.9 KiB

Schema Design

MySQL Database Design

Table: patients

Patient information

  • id: INT, Primary Key, Auto Increment
  • user_id: INT, Foreign Key → user(id)
  • age: INT, Not Null, Constraint(age > 0)
  • description: VARCHAR
  • phone_number: VARCHAR -- Validated via Code
  • email_address: VARCHAR -- Validated via Code
  • home_address: VARCHAR
  • archived: BOOLEAN, Not Null, default False -- When patient is removed it is marked as Archived and his active appointments are marked as Cancelled.

Table: appointments

Appointment information

  • id: INT, Primary Key, Auto Increment
  • doctor_id: INT, Foreign Key → doctors(id)
  • patient_id: INT, Foreign Key → patients(id)
  • appointment_time: DATETIME, Not Null
  • status: INT (0 = Scheduled, 1 = Completed, 2 = Cancelled)
  • status_changed_timestamp: DATETIME, Not Null
  • reason: VARCHAR, Not Null

Table: doctors

Doctor information

  • id: INT, Primary Key, Auto Increment
  • user_id: INT, Foreign Key → user(id)
  • specialization: VARCHAR, Not Null
  • phone_number: VARCHAR -- Validated via Code
  • email_address: VARCHAR -- Validated via Code
  • archived: BOOLEAN, Not Null, default False -- When doctor is removed it is marked as Archived and his active appointments are marked as Cancelled.

Table: user

Basic user information for all system users

  • id: INT, Primary Key, Auto Increment
  • username: VARCHAR, Not Null, Unique
  • password: CHAR(64) -- SHA256 hashed password value
  • role: INT (0 = Admin, 1 = Doctor, 2 = Patient)
  • name: VARCHAR, Not Null
  • last_login_timestamp: DATETIME
  • registration_timestamp: DATETIME, Not Null

Table: office_hours

Table storing regular office hours for a doctor

  • id: INT, Primary Key, Auto Increment
  • doctor_id: Foreign Key → doctors(id)
  • day: INT (0 = Monday, 1 = Tuesday, 2 = Wednesday, 3 = Thursday, 4 = Friday), Not Null
  • start: TIME, Not Null
  • end: TIME, Not Null
  • Constraint: start < end

Table: unavailability_schedule

Table storing temporary unavailability for a doctor

  • id: INT, Primary Key, Auto Increment
  • doctor_id: Foreign Key → doctors(id)
  • start: TIMETIME, Not Null
  • end: TIMETIME, Not Null
  • Constraint: start < end

MongoDB Collection Design

Collection: prescriptions

Collection describing a prescriptions for the patients

{
  "_id": "ObjectId('64abc123456')",
  "doctorId":222222,
  "patientId": 123213,
  "appointmentId": 51,
  "medication": "Paracetamol",
  "dosage": "500mg",
  "doctorNotes": "Take 1 tablet every 6 hours.",
  "refillCount": 2,
  "pharmacy": {
    "name": "Walgreens SF",
    "location": "Market Street"
  }
  "timestamp": "2011-12-03T10:15:30Z",
  "expires:" "2012-12-03T10:15:30Z"
}

Collection: messages

Chat message between Doctor and Patient

{
  "_id": "ObjectId('64abc123456')",
  "_parentId": "ObjectId('64abc123456')",
  "fromUserId": 121,
  "toUserId": 121,
  "message": "Where can I get the medicine from",
  "timestamp": "2011-12-03T10:15:30Z"
}