LogicalPhysicalDesign: OLPMS-create-DDL.sql

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