162 lines
4.6 KiB
SQL
162 lines
4.6 KiB
SQL
-- 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)
|
|
); |