При создании приложений часто возникает необходимость структурировать данные по категориям и подкатегориям. В этой статье блога мы рассмотрим различные методы реализации операций CRUD (создание, чтение, обновление, удаление) с иерархией категорий и подкатегорий, подобной файловой структуре. Мы будем использовать сервер Apollo в качестве сервера GraphQL и MySQL в качестве базы данных. Давайте погрузимся!
Метод 1: Модель списка смежности
Модель списка смежности — это один из самых простых способов представления иерархических структур данных в реляционной базе данных. В этом методе каждая категория или подкатегория имеет ссылку на свою родительскую категорию. Вот пример того, как вы можете структурировать таблицы и схему MySQL, используя эту модель:
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES categories(id)
);
CREATE TABLE items (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
category_id INT,
FOREIGN KEY (category_id) REFERENCES categories(id)
);
Метод 2: Модель вложенных множеств
Модель вложенных множеств — это еще один подход к представлению иерархических данных в реляционной базе данных. Он присваивает левое и правое значение каждой категории или подкатегории, обеспечивая эффективный запрос и обход иерархии. Вот пример того, как вы можете структурировать таблицы и схему MySQL, используя эту модель:
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
CREATE TABLE items (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
category_id INT,
FOREIGN KEY (category_id) REFERENCES categories(id)
);
Метод 3: Материализованная модель пути
Материализованная модель пути хранит полный путь каждой категории или подкатегории в виде строки. Эта модель позволяет легко запрашивать и манипулировать иерархией, но может работать медленнее для глубоко вложенных структур. Вот пример того, как вы можете структурировать таблицы и схему MySQL, используя эту модель:
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
path VARCHAR(255) NOT NULL
);
CREATE TABLE items (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
category_id INT,
FOREIGN KEY (category_id) REFERENCES categories(id)
);
В этой статье мы рассмотрели три различных метода структурирования операций CRUD с категориями и подкатегориями с использованием Apollo Server и MySQL. Модель списка смежности, модель вложенных множеств и модель материализованного пути имеют свои преимущества и особенности. В зависимости от конкретных требований вашего приложения вы можете выбрать наиболее подходящий подход. Используя эти методы, вы можете создавать мощные и гибкие приложения, которые эффективно обрабатывают иерархические структуры данных.