Загрузка данных
-- 1. Должности
CREATE TABLE Positions (
position_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL
);
-- 2. Сотрудники
CREATE TABLE Employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(150) NOT NULL,
phone VARCHAR(20),
position_id INT,
FOREIGN KEY (position_id) REFERENCES Positions(position_id)
);
-- 3. Категории услуг
CREATE TABLE Service_Categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
-- 4. Услуги
CREATE TABLE Services (
service_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(150) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
duration_minutes INT NOT NULL,
category_id INT,
FOREIGN KEY (category_id) REFERENCES Service_Categories(category_id)
);
-- 5. Клиенты (Убрал DEFAULT CURRENT_DATE, чтобы не ругалось!)
CREATE TABLE Clients (
client_id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(150) NOT NULL,
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(100),
registration_date DATE
);
-- 6. Справочник противопоказаний (для 4НФ)
CREATE TABLE Contraindications (
contra_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
-- 7. Противопоказания клиентов (Связь многие-ко-многим, 4НФ)
CREATE TABLE Client_Contraindications (
client_id INT,
contra_id INT,
PRIMARY KEY (client_id, contra_id),
FOREIGN KEY (client_id) REFERENCES Clients(client_id),
FOREIGN KEY (contra_id) REFERENCES Contraindications(contra_id)
);
-- 8. Кабинеты
CREATE TABLE Rooms (
room_id INT AUTO_INCREMENT PRIMARY KEY,
room_number VARCHAR(10),
description VARCHAR(255)
);
-- 9. Типы абонементов
CREATE TABLE Subscription_Types (
sub_type_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
visit_count INT NOT NULL,
price DECIMAL(10, 2) NOT NULL,
validity_days INT NOT NULL
);
-- 10. Купленные абонементы (Тоже убрал DEFAULT для даты)
CREATE TABLE Client_Subscriptions (
subscription_id INT AUTO_INCREMENT PRIMARY KEY,
client_id INT,
sub_type_id INT,
purchase_date DATE,
remaining_visits INT NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
FOREIGN KEY (client_id) REFERENCES Clients(client_id),
FOREIGN KEY (sub_type_id) REFERENCES Subscription_Types(sub_type_id)
);
-- 11. Записи на сеанс (Расписание)
CREATE TABLE Appointments (
appointment_id INT AUTO_INCREMENT PRIMARY KEY,
client_id INT,
employee_id INT,
service_id INT,
room_id INT,
appointment_datetime DATETIME NOT NULL,
status VARCHAR(50) DEFAULT 'Scheduled',
FOREIGN KEY (client_id) REFERENCES Clients(client_id),
FOREIGN KEY (employee_id) REFERENCES Employees(employee_id),
FOREIGN KEY (service_id) REFERENCES Services(service_id),
FOREIGN KEY (room_id) REFERENCES Rooms(room_id)
);
-- 12. Расходные материалы
CREATE TABLE Materials (
material_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
unit VARCHAR(20) NOT NULL,
stock_quantity DECIMAL(10, 2) NOT NULL
);
-- 13. Нормы расхода материалов на услуги (Связь многие-ко-многим, 4НФ)
CREATE TABLE Service_Material_Norms (
service_id INT,
material_id INT,
norm_quantity DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (service_id, material_id),
FOREIGN KEY (service_id) REFERENCES Services(service_id),
FOREIGN KEY (material_id) REFERENCES Materials(material_id)
);
-- 14. Списание материалов по факту процедуры
CREATE TABLE Material_Usage (
usage_id INT AUTO_INCREMENT PRIMARY KEY,
appointment_id INT,
material_id INT,
actual_quantity DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (appointment_id) REFERENCES Appointments(appointment_id),
FOREIGN KEY (material_id) REFERENCES Materials(material_id)
);
-- 15. Выплаты сотрудникам (Зарплата)
CREATE TABLE Salaries (
salary_id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT,
payment_date DATE NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
bonus DECIMAL(10, 2) DEFAULT 0,
FOREIGN KEY (employee_id) REFERENCES Employees(employee_id)
);
-- ==========================================
-- ЗАПОЛНЕНИЕ ДАННЫМИ (по 10 строк)
-- ==========================================
INSERT INTO Positions (title) VALUES
('Администратор'), ('Массажист'), ('Старший массажист'), ('Управляющий'),
('Косметолог'), ('Уборщик'), ('Маркетолог'), ('Бухгалтер'),
('Стажер'), ('Помощник администратора');
INSERT INTO Employees (full_name, phone, position_id) VALUES
('Иванов И.И.', '89001112233', 2), ('Петров П.П.', '89002223344', 2),
('Сидоров С.С.', '89003334455', 1), ('Васильева В.В.', '89004445566', 3),
('Кузнецова А.А.', '89005556677', 2), ('Смирнов Д.Д.', '89006667788', 4),
('Попова Е.Е.', '89007778899', 5), ('Лебедев А.Б.', '89008889900', 2),
('Козлов В.Г.', '89009990011', 1), ('Новикова И.С.', '89000001122', 2);
INSERT INTO Service_Categories (name) VALUES
('Классический массаж'), ('Аппаратная коррекция'), ('СПА-программы'),
('Тейпирование'), ('Лицо'), ('Лечебный массаж'), ('Детский массаж'),
('Релакс'), ('Спортивный массаж'), ('Детокс');
INSERT INTO Services (name, price, duration_minutes, category_id) VALUES
('Общий массаж', 2500, 60, 1), ('LPG-массаж', 3000, 45, 2),
('Кедровая бочка', 1500, 30, 3), ('Тейпирование колена', 800, 15, 4),
('Массаж лица', 2000, 40, 5), ('Антицеллюлитный', 2800, 60, 2),
('Массаж спины', 1800, 30, 1), ('Шоколадное обертывание', 3500, 90, 3),
('Стоун-терапия', 4000, 80, 8), ('Лимфодренажный', 2700, 60, 1);
-- Тут добавил даты вручную, чтобы точно без ошибок
INSERT INTO Clients (full_name, phone, email, registration_date) VALUES
('Анна А.', '89130000001', 'anna@mail.ru', '2026-05-01'),
('Борис Б.', '89130000002', 'boris@mail.ru', '2026-05-02'),
('Вера В.', '89130000003', NULL, '2026-05-03'),
('Глеб Г.', '89130000004', 'gleb@mail.ru', '2026-05-04'),
('Дарья Д.', '89130000005', 'daria@mail.ru', '2026-05-05'),
('Елена Е.', '89130000006', NULL, '2026-05-06'),
('Жанна Ж.', '89130000007', 'zhanna@mail.ru', '2026-05-07'),
('Игорь И.', '89130000008', 'igor@mail.ru', '2026-05-08'),
('Кирилл К.', '89130000009', 'kirill@mail.ru', '2026-05-09'),
('Лев Л.', '89130000010', NULL, '2026-05-10');
INSERT INTO Contraindications (name) VALUES
('Аллергия на масла'), ('Гипертония'), ('Травмы позвоночника'),
('Варикоз'), ('Кожные заболевания'), ('Беременность'),
('Онкология'), ('ОРВИ'), ('Металлические импланты'), ('Сердечная недостаточность');
INSERT INTO Client_Contraindications VALUES
(1, 1), (1, 2), (2, 4), (3, 6), (5, 1),
(7, 3), (8, 5), (9, 9), (10, 2), (4, 8);
INSERT INTO Rooms (room_number, description) VALUES
('101', 'Малый кабинет'), ('102', 'СПА-зона'), ('103', 'Аппаратный кабинет'),
('104', 'Классика'), ('105', 'Классика'), ('106', 'Душевая'),
('201', 'ВИП-зал'), ('202', 'Массаж лица'), ('203', 'Групповой'), ('204', 'Детский');
INSERT INTO Subscription_Types (name, visit_count, price, validity_days) VALUES
('Стандарт 5', 5, 11000, 30), ('Стандарт 10', 10, 20000, 60),
('LPG Курс', 10, 25000, 45), ('СПА-Лайт', 3, 4000, 14),
('Годовой Релакс', 50, 90000, 365), ('Тейпирование 5', 5, 3500, 30),
('Здоровая спина 10', 10, 16000, 60), ('Лицо 5', 5, 9000, 30),
('Премиум', 20, 45000, 90), ('Пробный', 1, 1500, 7);
-- И тут даты добавил вручную
INSERT INTO Client_Subscriptions (client_id, sub_type_id, purchase_date, remaining_visits) VALUES
(1, 1, '2026-05-11', 5), (2, 3, '2026-05-12', 10), (3, 2, '2026-05-12', 8),
(4, 4, '2026-05-13', 3), (5, 7, '2026-05-14', 10), (6, 10, '2026-05-15', 1),
(7, 5, '2026-05-16', 50), (8, 8, '2026-05-17', 4), (9, 9, '2026-05-18', 20),
(10, 6, '2026-05-19', 5);
INSERT INTO Appointments (client_id, employee_id, service_id, room_id, appointment_datetime) VALUES
(1, 1, 1, 1, '2026-05-20 10:00:00'), (2, 2, 2, 3, '2026-05-20 11:00:00'),
(3, 4, 3, 2, '2026-05-20 12:00:00'), (4, 5, 4, 4, '2026-05-21 09:00:00'),
(5, 8, 5, 8, '2026-05-21 15:00:00'), (6, 1, 7, 1, '2026-05-22 10:00:00'),
(7, 2, 8, 7, '2026-05-22 18:00:00'), (8, 4, 9, 7, '2026-05-23 11:00:00'),
(9, 10, 6, 3, '2026-05-23 14:00:00'), (10, 1, 10, 5, '2026-05-24 12:00:00');
INSERT INTO Materials (name, unit, stock_quantity) VALUES
('Масло кокосовое', 'мл', 5000), ('Простынь однораз.', 'шт', 500),
('Крем для лица', 'мл', 1000), ('Тейп лента', 'м', 50),
('Масло эфирное лаванда', 'мл', 100), ('Скраб кофейный', 'гр', 2000),
('Шоколад для оберт.', 'гр', 3000), ('Гель для LPG', 'мл', 2000),
('Тапочки', 'шт', 200), ('Шапочки', 'шт', 300);
INSERT INTO Service_Material_Norms VALUES
(1, 1, 30), (1, 2, 1), (2, 8, 50), (4, 4, 0.5), (5, 3, 10),
(8, 7, 300), (3, 2, 1), (7, 1, 20), (9, 5, 5), (10, 1, 40);
INSERT INTO Material_Usage (appointment_id, material_id, actual_quantity) VALUES
(1, 1, 35), (1, 2, 1), (2, 8, 50), (3, 2, 2), (4, 4, 0.6),
(5, 3, 12), (6, 1, 25), (7, 7, 310), (8, 5, 5), (9, 8, 45);
INSERT INTO Salaries (employee_id, payment_date, amount, bonus) VALUES
(1, '2026-05-01', 50000, 5000), (2, '2026-05-01', 48000, 3000),
(3, '2026-05-01', 45000, 2000), (4, '2026-05-01', 60000, 7000),
(5, '2026-05-01', 47000, 1500), (6, '2026-05-01', 80000, 10000),
(7, '2026-05-01', 52000, 4000), (8, '2026-05-01', 46000, 2500),
(9, '2026-05-01', 44000, 1000), (10, '2026-05-01', 49000, 3500);