Files
g10-m3/g10-m3-5/database_setup.sql
2026-01-30 17:52:25 +03:00

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)
);