-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.sql
More file actions
137 lines (127 loc) · 5.61 KB
/
database.sql
File metadata and controls
137 lines (127 loc) · 5.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
-- Child Learning and Progress Management System Database Schema
-- Create database
CREATE DATABASE IF NOT EXISTS learning_system;
USE learning_system;
-- Users table (for all roles: admin, teacher, student, parent)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
full_name VARCHAR(255) NOT NULL,
role ENUM('admin', 'teacher', 'student', 'parent') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Classes table
CREATE TABLE classes (
id INT AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(100) NOT NULL,
grade VARCHAR(50) NOT NULL,
section VARCHAR(50),
teacher_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (teacher_id) REFERENCES users(id) ON DELETE RESTRICT ON UPDATE CASCADE
);
-- Students table
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE,
class_id INT NOT NULL,
parent_user_id INT,
enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (parent_user_id) REFERENCES users(id) ON DELETE SET NULL ON UPDATE CASCADE
);
-- Activities table (for content and quizzes)
CREATE TABLE activities (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
activity_type ENUM('pdf', 'quiz') NOT NULL,
class_id INT,
created_by INT NOT NULL,
due_date DATETIME,
max_marks INT DEFAULT 100,
file_path VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT ON UPDATE CASCADE
);
-- Quiz Questions table
CREATE TABLE quiz_questions (
id INT AUTO_INCREMENT PRIMARY KEY,
activity_id INT NOT NULL,
question_text TEXT NOT NULL,
option_a VARCHAR(255) NOT NULL,
option_b VARCHAR(255) NOT NULL,
option_c VARCHAR(255) NOT NULL,
option_d VARCHAR(255) NOT NULL,
correct_option ENUM('a', 'b', 'c', 'd') NOT NULL,
marks INT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE ON UPDATE CASCADE
);
-- Activity Assignments table
CREATE TABLE activity_assignments (
id INT AUTO_INCREMENT PRIMARY KEY,
activity_id INT NOT NULL,
student_id INT NOT NULL,
status ENUM('not_started', 'in_progress', 'completed') DEFAULT 'not_started',
score INT,
completed_at DATETIME,
assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY unique_assignment (activity_id, student_id),
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE ON UPDATE CASCADE
);
-- Quiz Attempts table (to store individual student quiz attempts)
CREATE TABLE quiz_attempts (
id INT AUTO_INCREMENT PRIMARY KEY,
activity_id INT NOT NULL,
student_id INT NOT NULL,
attempt_number INT DEFAULT 1,
score INT,
total_marks INT,
attempted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE ON UPDATE CASCADE
);
-- Student Answers table (to store individual answers for quiz questions)
CREATE TABLE student_answers (
id INT AUTO_INCREMENT PRIMARY KEY,
quiz_attempt_id INT NOT NULL,
question_id INT NOT NULL,
selected_option ENUM('a', 'b', 'c', 'd') NOT NULL,
is_correct BOOLEAN,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (quiz_attempt_id) REFERENCES quiz_attempts(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (question_id) REFERENCES quiz_questions(id) ON DELETE CASCADE ON UPDATE CASCADE
);
-- Announcements table
CREATE TABLE announcements (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
class_id INT,
posted_by INT NOT NULL,
posted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (posted_by) REFERENCES users(id) ON DELETE RESTRICT ON UPDATE CASCADE
);
-- Create indexes for better query performance
CREATE INDEX idx_students_user_id ON students(user_id);
CREATE INDEX idx_students_parent_user_id ON students(parent_user_id);
CREATE INDEX idx_activities_created_by ON activities(created_by);
CREATE INDEX idx_activity_assignments_student_id ON activity_assignments(student_id);
CREATE INDEX idx_activity_assignments_activity_id ON activity_assignments(activity_id);
CREATE INDEX idx_quiz_questions_activity_id ON quiz_questions(activity_id);
CREATE INDEX idx_quiz_attempts_student_id ON quiz_attempts(student_id);
CREATE INDEX idx_announcements_posted_by ON announcements(posted_by);