-- database_setup.sql -- Core Tables Creation -- 1. Students Table CREATE TABLE students ( student_id INTEGER PRIMARY KEY AUTOINCREMENT, full_name TEXT NOT NULL, date_of_birth DATE, class_group TEXT, emergency_contact TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 2. Teachers Table CREATE TABLE teachers ( teacher_id INTEGER PRIMARY KEY AUTOINCREMENT, full_name TEXT NOT NULL, department TEXT, email TEXT, qualifications TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 3. Subjects Table CREATE TABLE subjects ( subject_id INTEGER PRIMARY KEY AUTOINCREMENT, subject_name TEXT NOT NULL, department TEXT, credits INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 4. Rooms Table CREATE TABLE rooms ( room_id INTEGER PRIMARY KEY AUTOINCREMENT, room_number TEXT NOT NULL, capacity INTEGER, equipment TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 5. Classes Table CREATE TABLE classes ( class_id INTEGER PRIMARY KEY AUTOINCREMENT, class_name TEXT NOT NULL, homeroom_teacher_id INTEGER, academic_year TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (homeroom_teacher_id) REFERENCES teachers(teacher_id) ); -- 6. Tech Tracks Table CREATE TABLE tech_tracks ( track_id INTEGER PRIMARY KEY AUTOINCREMENT, track_name TEXT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 7. English Levels Table CREATE TABLE english_levels ( level_id INTEGER PRIMARY KEY AUTOINCREMENT, level_code TEXT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 8. Special Groups Table CREATE TABLE special_groups ( group_id INTEGER PRIMARY KEY AUTOINCREMENT, group_name TEXT NOT NULL, group_type TEXT, teacher_in_charge_id INTEGER, max_participants INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (teacher_in_charge_id) REFERENCES teachers(teacher_id) ); -- 9. Timeslots Table CREATE TABLE timeslots ( timeslot_id INTEGER PRIMARY KEY AUTOINCREMENT, day_of_week TEXT NOT NULL, period_number INTEGER, start_time TIME NOT NULL, end_time TIME NOT NULL, academic_module TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 10. Schedule Entries Table (Core Connection Table) CREATE TABLE schedule_entries ( entry_id INTEGER PRIMARY KEY AUTOINCREMENT, student_id INTEGER NOT NULL, teacher_id INTEGER NOT NULL, subject_id INTEGER NOT NULL, room_id INTEGER, timeslot_id INTEGER NOT NULL, academic_year TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id), FOREIGN KEY (subject_id) REFERENCES subjects(subject_id), FOREIGN KEY (room_id) REFERENCES rooms(room_id), FOREIGN KEY (timeslot_id) REFERENCES timeslots(timeslot_id) ); -- 11. Users Table (Security) CREATE TABLE users ( user_id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, role TEXT NOT NULL, email TEXT, last_login TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 12. Audit Log Table CREATE TABLE audit_log ( log_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, action TEXT NOT NULL, table_name TEXT NOT NULL, record_id INTEGER, old_value TEXT, new_value TEXT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(user_id) ); -- 13. Relationship Tables CREATE TABLE student_subjects ( student_id INTEGER NOT NULL, subject_id INTEGER NOT NULL, PRIMARY KEY (student_id, subject_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (subject_id) REFERENCES subjects(subject_id) ); CREATE TABLE student_tech_tracks ( student_id INTEGER NOT NULL, track_id INTEGER NOT NULL, PRIMARY KEY (student_id, track_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (track_id) REFERENCES tech_tracks(track_id) ); CREATE TABLE student_english_levels ( student_id INTEGER NOT NULL, level_id INTEGER NOT NULL, PRIMARY KEY (student_id, level_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (level_id) REFERENCES english_levels(level_id) ); CREATE TABLE student_groups ( student_id INTEGER NOT NULL, group_id INTEGER NOT NULL, PRIMARY KEY (student_id, group_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (group_id) REFERENCES special_groups(group_id) );