Last active
January 2, 2024 10:43
-
-
Save hoangvvo/b87f822229894f7c5db7ef557943c86b to your computer and use it in GitHub Desktop.
co3103-lms-db
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- This script was generated by the ERD tool in pgAdmin 4. | |
-- Please log an issue at https://github.com/pgadmin-org/pgadmin4/issues/new/choose if you find any bugs, including reproduction steps. | |
BEGIN; | |
CREATE TABLE IF NOT EXISTS public.app_session | |
( | |
id serial NOT NULL, | |
user_id integer NOT NULL, | |
token character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
expires_at timestamp without time zone NOT NULL, | |
CONSTRAINT app_session_pkey PRIMARY KEY (id), | |
CONSTRAINT app_session_token_unique UNIQUE (token) | |
); | |
CREATE TABLE IF NOT EXISTS public.app_user | |
( | |
id serial NOT NULL, | |
email character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
password_hash character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
name character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
bio text COLLATE pg_catalog."default", | |
image_url character varying(255) COLLATE pg_catalog."default", | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
CONSTRAINT app_user_pkey PRIMARY KEY (id), | |
CONSTRAINT app_user_email_unique UNIQUE (email) | |
); | |
CREATE TABLE IF NOT EXISTS public.course | |
( | |
id serial NOT NULL, | |
instructor_id integer NOT NULL, | |
title character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
description text COLLATE pg_catalog."default" NOT NULL, | |
course_category_id integer NOT NULL, | |
price integer NOT NULL, | |
currency_code character varying(3) COLLATE pg_catalog."default" NOT NULL, | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
language_code character varying(2) COLLATE pg_catalog."default" NOT NULL, | |
image_url character varying(255) COLLATE pg_catalog."default", | |
learning_outcomes character varying[] COLLATE pg_catalog."default", | |
requirements character varying[] COLLATE pg_catalog."default", | |
learning_audience character varying[] COLLATE pg_catalog."default", | |
CONSTRAINT course_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_assignment | |
( | |
id serial NOT NULL, | |
course_item_id integer NOT NULL, | |
title character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
description text COLLATE pg_catalog."default" NOT NULL, | |
max_score integer NOT NULL, | |
CONSTRAINT course_assignment_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_assignment_attempt | |
( | |
id serial NOT NULL, | |
course_assignment_id integer NOT NULL, | |
user_id integer NOT NULL, | |
instructor_feedback text COLLATE pg_catalog."default", | |
score integer, | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
CONSTRAINT course_assignment_attempt_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_assignment_attempt_answer | |
( | |
id serial NOT NULL, | |
course_assignment_attempt_id integer NOT NULL, | |
url character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
mime_type character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
CONSTRAINT course_assignment_attempt_answer_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_category | |
( | |
id serial NOT NULL, | |
title character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
description text COLLATE pg_catalog."default", | |
CONSTRAINT course_category_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_enrollment | |
( | |
id serial NOT NULL, | |
course_id integer NOT NULL, | |
user_id integer NOT NULL, | |
enrolled_at timestamp without time zone NOT NULL DEFAULT now(), | |
completed_at timestamp without time zone, | |
CONSTRAINT course_enrollment_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_item | |
( | |
id serial NOT NULL, | |
course_section_id integer NOT NULL, | |
index integer NOT NULL, | |
CONSTRAINT course_item_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_item_comment | |
( | |
id serial NOT NULL, | |
course_item_id integer NOT NULL, | |
user_id integer NOT NULL, | |
comment text COLLATE pg_catalog."default" NOT NULL, | |
reply_to_comment_id integer, | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
CONSTRAINT course_item_comment_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_material | |
( | |
id serial NOT NULL, | |
course_item_id integer NOT NULL, | |
title character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
description text COLLATE pg_catalog."default" NOT NULL, | |
url character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
mime_type character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
CONSTRAINT course_material_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_quiz | |
( | |
id serial NOT NULL, | |
course_item_id integer NOT NULL, | |
title character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
description text COLLATE pg_catalog."default" NOT NULL, | |
time_limit_seconds integer, | |
max_score integer NOT NULL, | |
CONSTRAINT course_quiz_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_quiz_attempt | |
( | |
id serial NOT NULL, | |
course_quiz_id integer NOT NULL, | |
user_id integer NOT NULL, | |
score integer NOT NULL, | |
instructor_feedback text COLLATE pg_catalog."default", | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
CONSTRAINT course_quiz_attempt_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_quiz_attempt_answer | |
( | |
id serial NOT NULL, | |
course_quiz_attempt_id integer NOT NULL, | |
course_quiz_question_id integer NOT NULL, | |
course_quiz_question_option_id integer NOT NULL, | |
CONSTRAINT course_quiz_attempt_answer_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_quiz_question | |
( | |
id serial NOT NULL, | |
course_quiz_id integer NOT NULL, | |
question text COLLATE pg_catalog."default" NOT NULL, | |
CONSTRAINT course_quiz_question_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_quiz_question_option | |
( | |
id serial NOT NULL, | |
course_quiz_question_id integer NOT NULL, | |
option text COLLATE pg_catalog."default" NOT NULL, | |
is_correct integer NOT NULL, | |
CONSTRAINT course_quiz_question_option_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.course_section | |
( | |
id serial NOT NULL, | |
course_id integer NOT NULL, | |
title character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
description text COLLATE pg_catalog."default" NOT NULL, | |
index integer NOT NULL, | |
CONSTRAINT course_section_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.user_payment | |
( | |
id serial NOT NULL, | |
user_id integer NOT NULL, | |
user_payment_method_id integer NOT NULL, | |
course_id integer NOT NULL, | |
amount integer NOT NULL, | |
currency_code character varying(3) COLLATE pg_catalog."default" NOT NULL, | |
created_at timestamp without time zone NOT NULL DEFAULT now(), | |
CONSTRAINT user_payment_pkey PRIMARY KEY (id) | |
); | |
CREATE TABLE IF NOT EXISTS public.user_payment_method | |
( | |
id serial NOT NULL, | |
user_id integer NOT NULL, | |
credit_card_number character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
credit_card_expiration_month integer NOT NULL, | |
credit_card_expiration_year integer NOT NULL, | |
credit_card_cvv character varying(255) COLLATE pg_catalog."default" NOT NULL, | |
CONSTRAINT user_payment_method_pkey PRIMARY KEY (id) | |
); | |
ALTER TABLE IF EXISTS public.app_session | |
ADD CONSTRAINT app_session_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course | |
ADD CONSTRAINT course_course_category_id_course_category_id_fk FOREIGN KEY (course_category_id) | |
REFERENCES public.course_category (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course | |
ADD CONSTRAINT course_instructor_id_app_user_id_fk FOREIGN KEY (instructor_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course_assignment | |
ADD CONSTRAINT course_assignment_course_item_id_course_item_id_fk FOREIGN KEY (course_item_id) | |
REFERENCES public.course_item (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_assignment_attempt | |
ADD CONSTRAINT course_assignment_attempt_course_assignment_id_course_assignmen FOREIGN KEY (course_assignment_id) | |
REFERENCES public.course_assignment (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_assignment_attempt | |
ADD CONSTRAINT course_assignment_attempt_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course_assignment_attempt_answer | |
ADD CONSTRAINT course_assignment_attempt_answer_course_assignment_attempt_id_c FOREIGN KEY (course_assignment_attempt_id) | |
REFERENCES public.course_assignment_attempt (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_enrollment | |
ADD CONSTRAINT course_enrollment_course_id_course_id_fk FOREIGN KEY (course_id) | |
REFERENCES public.course (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_enrollment | |
ADD CONSTRAINT course_enrollment_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course_item | |
ADD CONSTRAINT course_item_course_section_id_course_section_id_fk FOREIGN KEY (course_section_id) | |
REFERENCES public.course_section (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_item_comment | |
ADD CONSTRAINT course_item_comment_course_item_id_course_item_id_fk FOREIGN KEY (course_item_id) | |
REFERENCES public.course_item (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_item_comment | |
ADD CONSTRAINT course_item_comment_reply_to_comment_id_course_item_comment_id_ FOREIGN KEY (reply_to_comment_id) | |
REFERENCES public.course_item_comment (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_item_comment | |
ADD CONSTRAINT course_item_comment_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course_material | |
ADD CONSTRAINT course_material_course_item_id_course_item_id_fk FOREIGN KEY (course_item_id) | |
REFERENCES public.course_item (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_quiz | |
ADD CONSTRAINT course_quiz_course_item_id_course_item_id_fk FOREIGN KEY (course_item_id) | |
REFERENCES public.course_item (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_quiz_attempt | |
ADD CONSTRAINT course_quiz_attempt_course_quiz_id_course_quiz_id_fk FOREIGN KEY (course_quiz_id) | |
REFERENCES public.course_quiz (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_quiz_attempt | |
ADD CONSTRAINT course_quiz_attempt_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course_quiz_attempt_answer | |
ADD CONSTRAINT course_quiz_attempt_answer_course_quiz_attempt_id_course_quiz_a FOREIGN KEY (course_quiz_attempt_id) | |
REFERENCES public.course_quiz_attempt (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_quiz_attempt_answer | |
ADD CONSTRAINT course_quiz_attempt_answer_course_quiz_question_id_course_quiz_ FOREIGN KEY (course_quiz_question_id) | |
REFERENCES public.course_quiz_attempt (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_quiz_attempt_answer | |
ADD CONSTRAINT course_quiz_attempt_answer_course_quiz_question_option_id_cours FOREIGN KEY (course_quiz_question_option_id) | |
REFERENCES public.course_quiz_attempt (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.course_quiz_question | |
ADD CONSTRAINT course_quiz_question_course_quiz_id_course_quiz_id_fk FOREIGN KEY (course_quiz_id) | |
REFERENCES public.course_quiz (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_quiz_question_option | |
ADD CONSTRAINT course_quiz_question_option_course_quiz_question_id_course_quiz FOREIGN KEY (course_quiz_question_id) | |
REFERENCES public.course_quiz_question (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.course_section | |
ADD CONSTRAINT course_section_course_id_course_id_fk FOREIGN KEY (course_id) | |
REFERENCES public.course (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE CASCADE; | |
ALTER TABLE IF EXISTS public.user_payment | |
ADD CONSTRAINT user_payment_course_id_course_id_fk FOREIGN KEY (course_id) | |
REFERENCES public.course (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.user_payment | |
ADD CONSTRAINT user_payment_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.user_payment | |
ADD CONSTRAINT user_payment_user_payment_method_id_user_payment_method_id_fk FOREIGN KEY (user_payment_method_id) | |
REFERENCES public.user_payment_method (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
ALTER TABLE IF EXISTS public.user_payment_method | |
ADD CONSTRAINT user_payment_method_user_id_app_user_id_fk FOREIGN KEY (user_id) | |
REFERENCES public.app_user (id) MATCH SIMPLE | |
ON UPDATE NO ACTION | |
ON DELETE NO ACTION; | |
END; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment