-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
101 lines (91 loc) · 3.03 KB
/
Copy pathschema.sql
File metadata and controls
101 lines (91 loc) · 3.03 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
-- EduTrack Database Schema
-- Run this before running seed_data.sql
-- Users table
CREATE TABLE IF NOT EXISTS users (
userid SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
passwordhash VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL,
class VARCHAR(50),
approved BOOLEAN DEFAULT NULL
);
-- Teacher Classes table
CREATE TABLE IF NOT EXISTS teacher_classes (
id SERIAL PRIMARY KEY,
teacherid INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
class VARCHAR(50) NOT NULL,
subject VARCHAR(100) NOT NULL
);
-- Quizzes table
CREATE TABLE IF NOT EXISTS quizzes (
quizid SERIAL PRIMARY KEY,
createdby INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
description TEXT,
difficulty VARCHAR(20),
availablefrom TIMESTAMP,
availableto TIMESTAMP,
attemptlimit INTEGER DEFAULT 1,
isdraft BOOLEAN DEFAULT TRUE,
class VARCHAR(50) NOT NULL
);
-- Questions table
CREATE TABLE IF NOT EXISTS questions (
questionid SERIAL PRIMARY KEY,
quizid INTEGER NOT NULL REFERENCES quizzes(quizid) ON DELETE CASCADE,
questiontext TEXT NOT NULL,
optiona VARCHAR(255),
optionb VARCHAR(255),
optionc VARCHAR(255),
optiond VARCHAR(255),
correctoption VARCHAR(1) NOT NULL,
difficulty VARCHAR(20)
);
-- Enrollments table
CREATE TABLE IF NOT EXISTS enrollments (
enrollmentid SERIAL PRIMARY KEY,
studentid INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
class VARCHAR(50) NOT NULL,
approved BOOLEAN DEFAULT NULL,
requested_at TIMESTAMP DEFAULT NOW()
);
-- Attempts table
CREATE TABLE IF NOT EXISTS attempts (
attemptid SERIAL PRIMARY KEY,
quizid INTEGER NOT NULL REFERENCES quizzes(quizid) ON DELETE CASCADE,
studentid INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
attemptno INTEGER,
starttime TIMESTAMP DEFAULT NOW(),
score NUMERIC(5,2),
endtime TIMESTAMP
);
-- Responses table
CREATE TABLE IF NOT EXISTS responses (
id SERIAL PRIMARY KEY,
attemptid INTEGER NOT NULL REFERENCES attempts(attemptid) ON DELETE CASCADE,
questionid INTEGER NOT NULL REFERENCES questions(questionid) ON DELETE CASCADE,
selectedoption VARCHAR(1),
iscorrect BOOLEAN,
submittedat TIMESTAMP DEFAULT NOW()
);
-- Leaderboard table
CREATE TABLE IF NOT EXISTS leaderboard (
leaderboardid SERIAL PRIMARY KEY,
quizid INTEGER NOT NULL REFERENCES quizzes(quizid) ON DELETE CASCADE,
studentid INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
totalscore NUMERIC(5,2),
class VARCHAR(50),
rank INTEGER
);
-- Feedback table
CREATE TABLE IF NOT EXISTS feedback (
feedbackid SERIAL PRIMARY KEY,
attemptid INTEGER NOT NULL REFERENCES attempts(attemptid) ON DELETE CASCADE,
teacherid INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
studentid INTEGER NOT NULL REFERENCES users(userid) ON DELETE CASCADE,
feedback TEXT,
comments TEXT,
createdat TIMESTAMP DEFAULT NOW()
);
-- End of schema