Skip to main content

📊 Smart Campus Database Documentation

🏗️ Database Overview

The Smart Campus application uses MongoDB with Mongoose ODM for data management. The database follows a microservices-oriented design with clear separation of concerns and consistent naming conventions.

🔧 Common Features

  • Soft Delete: All models use mongoose-delete plugin for soft deletion
  • Timestamps: Most models include createdAt and updatedAt fields
  • Plural Collections: All collections use plural naming (e.g., users, classrooms)

📋 Database Models

1. 👥 Users Collection (users)

Purpose: Central user management for students, teachers, and administrators

{
firstName: String (required),
middleName: String (optional),
lastName: String (optional),
gender: String (enum: ["male", "female"]),
dob: Date,
email: String (required),
password: String (required),
address: String,
contactNo: String,
nfcTag: String, // For NFC-based attendance
role: String (required, enum: ["admin", "student", "teacher"]),
college: String,
courseName: String,
branch: String,
parentContactNo: String, // Students only
semester: Number (enum: [1,2,3,4,5,6,7,8]) // Students only
}

2. 📚 Subjects Collection (subjects)

Purpose: Academic subject definitions

{
name: String (required),
code: String (required)
}

3. 🏫 Classrooms Collection (classrooms)

Purpose: Physical classroom management with NFC scanner integration

{
roomNumber: Number (required),
capacity: Number (required),
isLab: Boolean (default: false),
scanner: ObjectIdscanners (required)
}

4. 📡 Scanners Collection (scanners)

Purpose: NFC scanner device management

{
name: String (required),
macAddress: String,
isActive: Boolean (default: true)
}

5. 📅 TimeTables Collection (timeTables)

Purpose: Class schedule definition linking subjects, classrooms, and teachers

{
subject: ObjectIdsubjects (required),
startTime: Date (required),
endTime: Date (required),
classroom: ObjectIdclassrooms (required),
teacher: ObjectIdusers (required),
teacherEntryTime: Date,
teacherExitTime: Date
}

6. 👨‍🎓 StudentTimeTable Collection (studentTimeTable)

Purpose: Links students to specific timetable entries and tracks presence status

{
student: ObjectIdusers (required),
timeTable: ObjectIdtimeTables (required),
isMarkedPresent: Boolean (default: false)
}

7. ✅ Attendance Collection (attendance)

Purpose: Records actual attendance events with timing details

{
user: ObjectIdusers (required),
timeTable: ObjectIdtimeTables (required),
timeOfAttendance: Date (default: Date.now),
isLate: Boolean (default: false)
}

8. 📊 NfcReaderEntries Collection (nfcReaderEntries)

Purpose: Raw NFC scan data logging

{
entryTime: Date (default: Date.now),
nfcTag: String (required),
scanner: Stringscanner (required)
}

Note: Has time-based index for efficient queries

9. 📝 Assignments Collection (assignments)

Purpose: Assignment content management (basic implementation)

{
content: String (default: "")
}

🔗 Entity Relationship Diagram


🔄 Data Flow Architecture

NFC Attendance Processing Flow

Database Query Patterns


🎯 Key Design Patterns

1. Role-Based User Model

  • Single users collection handles all user types
  • Role field determines permissions and available fields
  • Students have additional fields (semester, parentContactNo)

2. Timetable-Centric Architecture

  • timeTables is the central scheduling entity
  • Links subjects, classrooms, teachers, and time slots
  • studentTimeTable creates many-to-many relationship with students

3. Dual Attendance System

  • studentTimeTable.isMarkedPresent: Quick boolean flag
  • attendance: Detailed records with timing and late status

4. Asynchronous Processing

  • Raw NFC data immediately persisted
  • Business logic processed in background
  • Parallel job execution for performance

5. Soft Delete Pattern

  • All models support soft deletion
  • Data integrity maintained for historical records
  • Easy restoration of accidentally deleted data

📈 Performance Considerations

Indexes

  • nfcReaderEntries has time-based index: { entryTime: 1 }
  • Consider adding compound indexes for frequent queries:
    • users: { nfcTag: 1, role: 1 }
    • timeTables: { classroom: 1, startTime: 1, endTime: 1 }
    • studentTimeTable: { student: 1, timeTable: 1 }

Query Optimization

  • Use Promise.all() for parallel database operations
  • Population strategy for related documents
  • Time-window queries for timetable matching

🔒 Security & Data Integrity

Access Control

  • Role-based authorization in routes
  • User creation restricted to admin/teachers
  • Soft delete prevents accidental data loss

Data Validation

  • Required fields enforced at schema level
  • Enum validation for roles and semesters
  • Reference integrity through ObjectId relationships

Audit Trail

  • Timestamps on all relevant models
  • NFC entry logging for debugging
  • Comprehensive error logging in workers

This documentation provides a complete overview of your Smart Campus database structure. The design supports efficient attendance tracking through NFC technology while maintaining data integrity and audit capabilities.