-- 1. Таблица категорий (например: Программирование, Дизайн, Маркетинг)
CREATE TABLE Categories (
category_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL UNIQUE
);
-- 2. Таблица преподавателей
CREATE TABLE Teachers (
teacher_id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
-- 3. Таблица студентов
CREATE TABLE Students (
student_id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
registration_date DATE DEFAULT (CURRENT_DATE)
);
-- 4. Таблица курсов (ссылается на Категории и Преподавателей)
CREATE TABLE Courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
category_id INT,
teacher_id INT,
FOREIGN KEY (category_id) REFERENCES Categories(category_id) ON DELETE SET NULL,
FOREIGN KEY (teacher_id) REFERENCES Teachers(teacher_id) ON DELETE SET NULL
);
-- 5. Таблица записей на курс / доступов (ссылается на Студентов и Курсы)
-- Статус может быть: 'active', 'completed', 'dropped'
CREATE TABLE Enrollments (
enrollment_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
course_id INT NOT NULL,
status VARCHAR(20) DEFAULT 'active',
enroll_date DATE DEFAULT (CURRENT_DATE),
FOREIGN KEY (student_id) REFERENCES Students(student_id) ON DELETE CASCADE,
FOREIGN KEY (course_id) REFERENCES Courses(course_id) ON DELETE CASCADE,
UNIQUE (student_id, course_id) -- Один студент не может быть записан на один курс дважды
);
-- 6. Таблица оплат (ссылается на Студентов и Курсы)
CREATE TABLE Payments (
payment_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
course_id INT NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (student_id) REFERENCES Students(student_id) ON DELETE RESTRICT,
FOREIGN KEY (course_id) REFERENCES Courses(course_id) ON DELETE RESTRICT
);