Table "Roles" {
"role_id" INT [pk, increment]
"name" NVARCHAR(20) [not null]
}
Table "Users" {
"user_id" INT [pk, increment]
"role_id" INT [not null]
"username" VARCHAR(50) [unique, not null]
"password" VARCHAR(50) [not null]
"full_name" NVARCHAR(100)
"email" VARCHAR(100)
"birth_date" DATE
"image" VARCHAR(255)
"phone_number" VARCHAR(20)
"address" NVARCHAR(255)
"created_at" DATETIME [not null]
}
Table "Categories" {
"category_id" INT [pk, increment]
"name" NVARCHAR(100) [not null]
"description" NVARCHAR(100)
}
Table "Courses" {
"course_id" INT [pk, increment]
"title" NVARCHAR(100) [not null]
"category_id" INT
"description" NVARCHAR(MAX)
"price" DECIMAL(10,2) [not null]
"created_at" DATETIME [not null]
"updated_at" DATETIME
"status" VARCHAR(20)
}
Table "CourseContents" {
"content_id" INT [pk, increment]
"course_id" INT [not null]
"type" VARCHAR(10) [not null]
"content_path" VARCHAR(50)
}
Table "Feedback" {
"feedback_id" INT [pk, increment]
"user_id" INT [not null]
"course_id" INT [not null]
"rating" INT [not null]
"comment" NVARCHAR(100)
"created_at" DATETIME [not null]
}
Table "Orders" {
"order_id" INT [pk, increment]
"user_id" INT [not null]
"order_date" DATETIME [not null]
"total_amount" DECIMAL(10,2) [not null]
}
Table "OrderItems" {
"order_id" INT [not null]
"course_id" INT [not null]
Indexes {
(order_id, course_id) [pk]
}
}
Table "Cart" {
"user_id" INT [not null]
"course_id" INT [not null]
Indexes {
(user_id, course_id) [pk]
}
}
Table "Purchases" {
"user_id" INT [not null]
"course_id" INT [not null]
Indexes {
(user_id, course_id) [pk]
}
}
Table "Experts" {
"expert_id" INT [pk, increment]
"user_id" INT [not null]
"description" NVARCHAR(MAX) [not null]
"certification" NVARCHAR(MAX)
}
Table "ExpertCourses" {
"expert_id" INT [not null]
"course_id" INT [not null]
Indexes {
(expert_id, course_id) [pk]
}
}
Table "ExpertCategories" {
"expert_id" INT [not null]
"category_id" INT [not null]
Indexes {
(expert_id, category_id) [pk]
}
}
Table "Sections" {
"section_id" INT [pk, increment]
"course_id" INT [not null]
"title" NVARCHAR(100) [not null]
}
Table "Lectures" {
"lecture_id" INT [pk, increment]
"section_id" INT [not null]
"title" NVARCHAR(100) [not null]
}
Table "Exams" {
"exam_id" INT [pk, increment]
"lecture_id" INT [not null]
"title" NVARCHAR(100) [not null]
"description" NVARCHAR(MAX)
}
Table "ExamQuestions" {
"question_id" INT [pk, increment]
"exam_id" INT [not null]
"question_text" NVARCHAR(MAX) [not null]
}
Table "ExamChoices" {
"choice_id" INT [pk, increment]
"question_id" INT [not null]
"choice_text" NVARCHAR(MAX) [not null]
"is_correct" BIT [not null]
}
Table "ExamSubmissions" {
"submission_id" INT [pk, increment]
"user_id" INT [not null]
"exam_id" INT [not null]
"submission_date" DATETIME [not null]
"score" DECIMAL(5,2) [not null]
}
Table "ExamResults" {
"result_id" INT [pk, increment]
"submission_id" INT [not null]
"question_id" INT [not null]
"choice_id" INT [not null]
"is_correct" BIT [not null]
"question_text" NVARCHAR(MAX)
"choice_text" NVARCHAR(MAX)
}
Table "Videos" {
"video_id" INT [pk, increment]
"lecture_id" INT [not null]
"title" NVARCHAR(100) [not null]
"description" NVARCHAR(MAX)
"youtube_link" NVARCHAR(MAX) [not null]
}
Table "Articles" {
"article_id" INT [pk, increment]
"lecture_id" INT [not null]
"title" NVARCHAR(100) [not null]
"description" NVARCHAR(MAX)
"article_link" NVARCHAR(MAX)
}
Table "UserProgress" {
"user_id" INT [not null]
"course_id" INT [not null]
"grade" INT [not null]
"progress" DECIMAL(5,2) [not null]
Indexes {
(user_id, course_id) [pk]
}
}
Ref "FK_Users_Roles":"Roles"."role_id" < "Users"."role_id"
Ref "FK_Courses_Categories":"Categories"."category_id" < "Courses"."category_id"
Ref "FK_CourseContents_Courses":"Courses"."course_id" <
"CourseContents"."course_id"
Ref "FK_Feedback_Users":"Users"."user_id" < "Feedback"."user_id"
Ref "FK_Feedback_Courses":"Courses"."course_id" < "Feedback"."course_id"
Ref "FK_Orders_Users":"Users"."user_id" < "Orders"."user_id"
Ref "FK_OrderItems_Orders":"Orders"."order_id" < "OrderItems"."order_id"
Ref "FK_OrderItems_Courses":"Courses"."course_id" < "OrderItems"."course_id"
Ref "FK_Cart_Users":"Users"."user_id" < "Cart"."user_id"
Ref "FK_Cart_Courses":"Courses"."course_id" < "Cart"."course_id"
Ref "FK_Purchases_Users":"Users"."user_id" < "Purchases"."user_id"
Ref "FK_Purchases_Courses":"Courses"."course_id" < "Purchases"."course_id"
Ref "FK_Experts_Users":"Users"."user_id" < "Experts"."user_id"
Ref "FK_ExpertCourses_Experts":"Experts"."expert_id" < "ExpertCourses"."expert_id"
Ref "FK_ExpertCourses_Courses":"Courses"."course_id" < "ExpertCourses"."course_id"
Ref "FK_ExpertCategories_Experts":"Experts"."expert_id" <
"ExpertCategories"."expert_id"
Ref "FK_ExpertCategories_Categories":"Categories"."category_id" <
"ExpertCategories"."category_id"
Ref "FK_Sections_Courses":"Courses"."course_id" < "Sections"."course_id"
Ref "FK_Lectures_Sections":"Sections"."section_id" < "Lectures"."section_id"
Ref "FK_Exams_Lectures":"Lectures"."lecture_id" < "Exams"."lecture_id"
Ref "FK_ExamQuestions_Exams":"Exams"."exam_id" < "ExamQuestions"."exam_id"
Ref "FK_ExamChoices_ExamQuestions":"ExamQuestions"."question_id" <
"ExamChoices"."question_id"
Ref "FK_ExamSubmissions_Users":"Users"."user_id" < "ExamSubmissions"."user_id"
Ref "FK_ExamSubmissions_Exams":"Exams"."exam_id" < "ExamSubmissions"."exam_id"
Ref "FK_ExamResults_ExamSubmissions":"ExamSubmissions"."submission_id" <
"ExamResults"."submission_id"
Ref "FK_ExamResults_ExamQuestions":"ExamQuestions"."question_id" <
"ExamResults"."question_id"
Ref "FK_ExamResults_ExamChoices":"ExamChoices"."choice_id" <
"ExamResults"."choice_id"
Ref "FK_Videos_Lectures":"Lectures"."lecture_id" < "Videos"."lecture_id"
Ref "FK_Articles_Lectures":"Lectures"."lecture_id" < "Articles"."lecture_id"
Ref "FK_UserProgress_Users":"Users"."user_id" < "UserProgress"."user_id"
Ref "FK_UserProgress_Courses":"Courses"."course_id" < "UserProgress"."course_id"