LogicalPhysicalDesign: OPLMS-create-DDL.sql

File OPLMS-create-DDL.sql, 3.7 KB (added by 221296, 3 days ago)
Line 
1CREATE TABLE users (
2 id SERIAL PRIMARY KEY,
3 first_name VARCHAR(100) NOT NULL,
4 last_name VARCHAR(100) NOT NULL,
5 email VARCHAR(150) UNIQUE NOT NULL,
6 password VARCHAR(255) NOT NULL,
7 role VARCHAR(20) NOT NULL CHECK (role IN ('USER', 'ADMIN', 'INSTRUCTOR'))
8);
9
10CREATE TABLE subscription_plan (
11 plan_id SERIAL PRIMARY KEY,
12 name VARCHAR(100) NOT NULL,
13 price NUMERIC(10,2) NOT NULL,
14 duration_months INT NOT NULL,
15 description TEXT,
16 access_type VARCHAR(50)
17);
18
19CREATE TABLE user_subscription (
20 subscription_id SERIAL PRIMARY KEY,
21 user_id INT NOT NULL,
22 plan_id INT NOT NULL,
23 start_date DATE NOT NULL,
24 end_date DATE NOT NULL,
25 status VARCHAR(30) NOT NULL,
26
27 FOREIGN KEY (user_id) REFERENCES users(id),
28 FOREIGN KEY (plan_id) REFERENCES subscription_plan(plan_id)
29);
30
31CREATE TABLE payment (
32 payment_id SERIAL PRIMARY KEY,
33 user_id INT NOT NULL,
34 subscription_id INT NOT NULL,
35 amount NUMERIC(10,2) NOT NULL,
36
37 FOREIGN KEY (user_id) REFERENCES users(id),
38 FOREIGN KEY (subscription_id) REFERENCES user_subscription(subscription_id)
39);
40
41CREATE TABLE support_ticket (
42 ticket_id SERIAL PRIMARY KEY,
43 user_id INT NOT NULL,
44 admin_id INT NOT NULL,
45 subject VARCHAR(200),
46 description TEXT,
47 status VARCHAR(30),
48 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
49
50 FOREIGN KEY (user_id) REFERENCES users(id),
51 FOREIGN KEY (admin_id) REFERENCES users(id)
52);
53
54CREATE TABLE category (
55 category_id SERIAL PRIMARY KEY,
56 name VARCHAR(100) NOT NULL,
57 description TEXT
58);
59
60CREATE TABLE course (
61 course_id SERIAL PRIMARY KEY,
62 name VARCHAR(150) NOT NULL,
63 price NUMERIC(10,2),
64 status VARCHAR(30),
65 instructor_id INT NOT NULL,
66
67 FOREIGN KEY (instructor_id) REFERENCES users(id)
68);
69
70CREATE TABLE course_category (
71 course_id BIGINT NOT NULL,
72 category_id BIGINT NOT NULL,
73
74 PRIMARY KEY (course_id, category_id),
75
76 CONSTRAINT fk_cc_course
77 FOREIGN KEY (course_id) REFERENCES course(course_id)
78 ON DELETE CASCADE,
79
80 CONSTRAINT fk_cc_category
81 FOREIGN KEY (category_id) REFERENCES category(category_id)
82 ON DELETE CASCADE
83);
84
85CREATE TABLE module (
86 module_id SERIAL PRIMARY KEY,
87 course_id INT NOT NULL,
88 title VARCHAR(150) NOT NULL,
89 description TEXT,
90
91 FOREIGN KEY (course_id) REFERENCES course(course_id)
92);
93
94CREATE TABLE lesson (
95 lesson_id SERIAL PRIMARY KEY,
96 module_id INT NOT NULL,
97 title VARCHAR(150) NOT NULL,
98 material TEXT,
99
100 FOREIGN KEY (module_id) REFERENCES module(module_id)
101);
102
103CREATE TABLE quiz (
104 quiz_id SERIAL PRIMARY KEY,
105 total_points INT NOT NULL,
106 passing_score INT NOT NULL,
107 lesson_id INT NOT NULL,
108
109 FOREIGN KEY (lesson_id) REFERENCES lesson(lesson_id)
110);
111
112create table quiz_attempt (
113 attempt_id SERIAL PRIMARY KEY,
114 score INT,
115 attempt_date DATE,
116 user_id INT,
117 quiz_id INT,
118
119 FOREIGN KEY (user_id) REFERENCES users(id),
120 FOREIGN KEY (quiz_id) REFERENCES quiz(quiz_id)
121);
122
123CREATE TABLE enrollment (
124 enrollment_id SERIAL PRIMARY KEY,
125 user_id INT NOT NULL,
126 course_id INT NOT NULL,
127 enroll_date DATE NOT NULL,
128 completion_status VARCHAR(30),
129 progress_percentage INT CHECK (progress_percentage BETWEEN 0 AND 100),
130
131 FOREIGN KEY (user_id) REFERENCES users(id),
132 FOREIGN KEY (course_id) REFERENCES course(course_id)
133);
134
135CREATE TABLE certificate (
136 certificate_id SERIAL PRIMARY KEY,
137 enrollment_id INT UNIQUE NOT NULL,
138 issue_date DATE NOT NULL,
139 certificate_code VARCHAR(100) UNIQUE NOT NULL,
140 status VARCHAR(30),
141
142 FOREIGN KEY (enrollment_id) REFERENCES enrollment(enrollment_id)
143);
144