-- Create database if not exists
CREATE DATABASE IF NOT EXISTS lms_db;
USE lms_db;
-- Create users table
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'student', 'instructor') NOT NULL DEFAULT 'student',
first_name VARCHAR(50),
last_name VARCHAR(50),
profile_image VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Create courses table
CREATE TABLE IF NOT EXISTS courses (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
course_code VARCHAR(20) UNIQUE,
instructor_id INT,
price DECIMAL(10,2) NOT NULL,
thumbnail VARCHAR(255),
duration VARCHAR(50),
level ENUM('beginner', 'intermediate', 'advanced') NOT NULL,
status ENUM('draft', 'published', 'archived') NOT NULL DEFAULT 'draft',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (instructor_id) REFERENCES users(id) ON DELETE SET NULL
);
-- Create lessons table
CREATE TABLE IF NOT EXISTS lessons (
id INT PRIMARY KEY AUTO_INCREMENT,
course_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
content TEXT,
video_url VARCHAR(255),
duration VARCHAR(50),
order_number INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
);
-- Create enrollments table
CREATE TABLE IF NOT EXISTS enrollments (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
course_id INT NOT NULL,
enrollment_number VARCHAR(20) UNIQUE,
status ENUM('active', 'completed', 'dropped') NOT NULL DEFAULT 'active',
progress INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE,
UNIQUE KEY unique_enrollment (user_id, course_id)
);
-- Create payments table
CREATE TABLE IF NOT EXISTS payments (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
course_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
payment_method VARCHAR(50),
transaction_id VARCHAR(100),
status ENUM('pending', 'completed', 'failed', 'refunded') NOT NULL DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
);
-- Create assignments table
CREATE TABLE IF NOT EXISTS assignments (
id INT PRIMARY KEY AUTO_INCREMENT,
lesson_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
due_date DATETIME,
max_score INT DEFAULT 100,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (lesson_id) REFERENCES lessons(id) ON DELETE CASCADE
);
-- Create submissions table
CREATE TABLE IF NOT EXISTS submissions (
id INT PRIMARY KEY AUTO_INCREMENT,
assignment_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT,
file_url VARCHAR(255),
score INT,
feedback TEXT,
submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (assignment_id) REFERENCES assignments(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Create categories table
CREATE TABLE IF NOT EXISTS categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description TEXT,
parent_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL
);
-- Create course_categories table
CREATE TABLE IF NOT EXISTS course_categories (
course_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (course_id, category_id),
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE
);
-- Create settings table
CREATE TABLE IF NOT EXISTS settings (
id INT PRIMARY KEY AUTO_INCREMENT,
setting_key VARCHAR(50) UNIQUE NOT NULL,
setting_value TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Create slider_images table
CREATE TABLE IF NOT EXISTS slider_images (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
image_url VARCHAR(255) NOT NULL,
link_url VARCHAR(255),
order_number INT DEFAULT 0,
status ENUM('active', 'inactive') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Insert default admin user (password: admin123)
INSERT INTO users (username, email, password, role, first_name, last_name)
VALUES ('admin', '[email protected]', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin', 'Admin', 'User');
-- Insert default settings
INSERT INTO settings (setting_key, setting_value) VALUES
('site_name', 'Learning Management System'),
('site_description', 'A modern learning management system'),
('site_email', '[email protected]'),
('currency', 'USD'),
('currency_symbol', '$'),
('enable_registration', '1'),
('enable_payments', '1'),
('maintenance_mode', '0');