-- 1. Категории животных
CREATE TABLE Category (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) UNIQUE NOT NULL
);
-- 2. Породы
CREATE TABLE Breed (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
category_id INT NOT NULL,
FOREIGN KEY (category_id) REFERENCES Category(id)
);
-- 3. Питомцы
CREATE TABLE Pet (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
color VARCHAR(50),
age_months INT,
price DECIMAL(10,2),
breed_id INT,
FOREIGN KEY (breed_id) REFERENCES Breed(id)
);
-- 4. Клиенты
CREATE TABLE Client (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE NOT NULL
);
-- 5. Продажи
CREATE TABLE Sale (
id INT PRIMARY KEY AUTO_INCREMENT,
pet_id INT UNIQUE NOT NULL,
client_id INT NOT NULL,
sale_datetime DATETIME NOT NULL,
FOREIGN KEY (pet_id) REFERENCES Pet(id),
FOREIGN KEY (client_id) REFERENCES Client(id)
);
-- 6. Статус доставки
CREATE TABLE DeliveryStatus (
id INT PRIMARY KEY AUTO_INCREMENT,
sale_id INT NOT NULL,
status VARCHAR(30) NOT NULL,
status_datetime DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sale_id) REFERENCES Sale(id)
);
-- Категории
INSERT INTO Category (name) VALUES ('Собака'), ('Кошка'), ('Птица');
-- Породы
INSERT INTO Breed (name, category_id)
VALUES
('Лабрадор', 1),
('Овчарка', 1),
('Такса', 1),
('Персидская', 2),
('Британская', 2),
('Попугай', 3),
('Канарейка', 3);
-- Клиенты
INSERT INTO Client (email) VALUES ('Cli1@ya.ru'), ('Cli2@ya.ru');
-- Питомцы
INSERT INTO Pet (name, color, age_months, price, breed_id)
VALUES
('Тузик', 'Черный', 2, 7000, 1),
('Мурка', 'Серый', 3, 2000, 4),
('Кеша', 'Зеленый', 2, 1000, 6),
('Рекс', 'Рыжий', 6, 2000, 2),
('Шарик', 'Коричневая', 4, 8000, 3),
('Барсик', 'Серый', 6, 1800, 4),
('Борис', 'Черепаховый', 2, 6000, 5),
('Томас', 'Серебристый', 2, 6500, 5),
('Кешуля', 'Желтый', 4, 2200, 7);
-- Продажи (только для тех, где есть дата)
INSERT INTO Sale (pet_id, client_id, sale_datetime)
VALUES
(6, 1, '2024-05-20 12:00:00'),
(8, 1, '2024-05-20 12:00:00'),
(9, 2, '2024-05-15 12:00:00');
-- Статусы доставки
INSERT INTO DeliveryStatus (sale_id, status, status_datetime)
VALUES
(1, 'получен', '2024-05-20 12:00:00'),
(2, 'получен', '2024-05-20 12:00:00'),
(3, 'в пути', '2024-05-15 12:00:00');
SELECT
p.id AS pet_id,
p.name AS pet_name,
p.color,
p.age_months,
p.price,
b.name AS breed_name,
c.name AS category_name,
cl.email AS client_email,
s.sale_datetime,
d.status AS delivery_status,
d.status_datetime
FROM Pet p
JOIN Breed b ON p.breed_id = b.id
JOIN Category c ON b.category_id = c.id
LEFT JOIN Sale s ON p.id = s.pet_id
LEFT JOIN Client cl ON s.client_id = cl.id
LEFT JOIN DeliveryStatus d ON s.id = d.sale_id;