Научный руководитель: Вильданов Алмаз Нафкатович
к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал
Введение
В современном мире домашние животные становятся неотъемлемой частью многих семей, а кошки — одними из самых популярных питомцев. С развитием специализированной розничной торговли возникает необходимость в эффективном управлении данными о животных, клиентах и продажах.
Архитектура базы данных
Концептуальная модель
База данных строится на основе трехуровневой архитектуры, включающей:
1. Таблица `cat` — основная сущность, содержащая информацию о кошках
2. Таблица `flea` — сущность клиентов (в контексте задачи использовано стилизованное название)
3. Таблица `cat_flea` — связующая таблица для отношения «многие-ко-многим»
Физическая модель данных
Таблица CAT (Кошки)
| Поле | Тип данных | Обязательное | Описание |
|——|————|—————|———-|
| `id_cat` | INT PRIMARY KEY | Да | Уникальный идентификатор |
| `name` | VARCHAR(50) | Да | Кличка животного |
| `breed` | VARCHAR(50) | Да | Порода |
| `age` | INT | Да | Возраст в месяцах |
| `price` | DECIMAL(10,2) | Да | Стоимость в рублях |
| `weight` | DECIMAL(4,2) | Да | Вес в килограммах |
| `birth_date` | DATE | Да | Дата рождения |
| `color` | VARCHAR(30) | Да | Окрас |
| `vaccinated` | BOOLEAN | Нет | Статус вакцинации |
| `description` | TEXT | Нет | Дополнительное описание |
Таблица FLEA (Клиенты)
| Поле | Тип данных | Обязательное | Описание |
|——|————|—————|———-|
| `id_flea` | INT PRIMARY KEY | Да | Уникальный идентификатор |
| `first_name` | VARCHAR(50) | Да | Имя клиента |
| `last_name` | VARCHAR(50) | Да | Фамилия клиента |
| `email` | VARCHAR(100) | Нет | Электронная почта |
| `phone` | VARCHAR(20) | Нет | Контактный телефон |
| `registration_date` | DATE | Да | Дата регистрации |
| `address` | TEXT | Нет | Адрес проживания |
| `discount` | INT | Нет | Размер скидки в % |
Таблица CAT_FLEA (Покупки)
| Поле | Тип данных | Обязательное | Описание |
|——|————|—————|———-|
| `id_cat` | INT | Да | Внешний ключ на таблицу CAT |
| `id_flea` | INT | Да | Внешний ключ на таблицу FLEA |
| `count` | INT | Да | Количество приобретенных животных |
| `purchase_date` | DATE | Да | Дата совершения покупки |
| `total_price` | DECIMAL(10,2) | Да | Общая стоимость покупки |
Реализация на SQL
Создание таблиц
“`sql
Таблица кошек
CREATE TABLE cat (
id_cat INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
breed VARCHAR(50) NOT NULL,
age INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
weight DECIMAL(4,2) NOT NULL,
birth_date DATE NOT NULL,
color VARCHAR(30) NOT NULL,
vaccinated BOOLEAN DEFAULT FALSE,
description TEXT
);
Таблица клиентов
CREATE TABLE flea (
id_flea INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
registration_date DATE NOT NULL,
address TEXT,
discount INT DEFAULT 0
);
Таблица покупок
CREATE TABLE cat_flea (
id_cat INT,
id_flea INT,
count INT NOT NULL DEFAULT 1,
purchase_date DATE NOT NULL,
total_price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (id_cat, id_flea, purchase_date),
FOREIGN KEY (id_cat) REFERENCES cat(id_cat),
FOREIGN KEY (id_flea) REFERENCES flea(id_flea)
);
Наполнение данными
База данных заполнена реалистичными данными, включающими 10 записей о кошках различных пород (британские, мейн-куны, хаусы, манулы и др.) и 10 записей о клиентах из разных городов России.
Пример данных из таблицы CAT:
| ID | Имя | Порода | Возраст | Цена | Вес |
|—-|—–|——–|———|——|—–|
| 1 | Мурзик | Британский | 12 | 15000.00 | 4.5 |
| 3 | Вася | Хаус | 6 | 8000.00 | 3.8 |
| 5 | Рыжик | Манул | 18 | 50000.00 | 7.1 |
Отношение «многие-ко-многим»
Ключевым аспектом проекта является реализация отношения «многие-ко-многим» между кошками и клиентами через таблицу `cat_flea`. Это позволяет:
- Одному клиенту покупать нескольких кошек
- Одну кошку продавать нескольким клиентам (в случае покупки животных одного помета)
- Учитывать количество приобретаемых животных
- Фиксировать дату и стоимость каждой покупки
Пример из задания: Клиент Иванова Мария приобрела 3 кошек породы “хаус” и 2 кошек породы “манул”, что отражено в двух записях таблицы `cat_flea`.
Практическое применение
Аналитические запросы
sql
Топ-5 самых популярных пород
SELECT c.breed, SUM(cf.count) as total_sold
FROM cat_flea cf
JOIN cat c ON cf.id_cat = c.id_cat
GROUP BY c.breed
ORDER BY total_sold DESC
LIMIT 5;
Выручка по месяцам
SELECT YEAR(purchase_date) as year,
MONTH(purchase_date) as month,
SUM(total_price) as monthly_revenue
FROM cat_flea
GROUP BY YEAR(purchase_date), MONTH(purchase_date)
ORDER BY year, month;
Операционные отчеты
База данных позволяет генерировать:
- Отчеты по продажам
- Статистику популярности пород
- Информацию о клиентской базе
- Финансовые отчеты
Заключение
Разработанная база данных демонстрирует классический подход к проектированию реляционных баз данных для предметной области розничной торговли. Использование отношения «многие-ко-многим» обеспечивает гибкость учета продаж, а разнообразие типов данных в таблицах соответствует реальным бизнес-требованиям.
Архитектура базы может быть расширена дополнительными таблицами (поставщики, ветеринарные услуги, корма), что делает ее хорошей основой для полноценной системы управления зоомагазином.
Библиографический список
- Аткинсон, Л. MySQL Библиотека профессионала / Л. Аткинсон. – М.: Вильямс, 2002 – 255 с.
- Базы данных: теория и практика : учебник для бакалавров / Б.Я. Советов , В.В. Цехановский, В.Д. Чертовской .— 2-е изд. — М. : Издательство Юрайт, 2014 .— 463с. — (Бакалавр. Базовый курс).
- Васвани, В. Zend Framework. Разработка веб-приложений на PHP / В. Васвани. – СПб: Питер, 2012 – 319 с.
