1.1 СОЗДАЕМ ТАБЛИЦУ С ПЕРЕЧНЕМ КАТЕГОРИЙ
-- Создание таблицы категорий товаров
CREATE TABLE public.categories (
-- Уникальный идентификатор категории (первичный ключ)
categori_id SERIAL PRIMARY KEY,
-- Наименование категории (обязательное поле)
categori_name VARCHAR(100) NOT NULL,
-- Код категории (уникальный символьный код)
code VARCHAR(50) UNIQUE NOT NULL,
-- Описание категории
description TEXT,
-- Родительская категория (для иерархии)
parent_id INTEGER REFERENCES public.categories(categori_id),
-- Уровень в иерархии (для удобства)
level INTEGER DEFAULT 1 CHECK (level >= 1),
-- Порядок сортировки
sort_order INTEGER DEFAULT 0,
-- Статус активности категории
is_active BOOLEAN DEFAULT TRUE,
-- Дата создания записи
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
-- Дата последнего обновления
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Создание индексов для категорий
CREATE INDEX idx_categories_name ON public.categories(categori_name);
CREATE INDEX idx_categories_code ON public.categories(code);
CREATE INDEX idx_categories_parent_id ON public.categories(parent_id);
CREATE INDEX idx_categories_active ON public.categories(is_active);
-- Комментарии к таблице категорий
COMMENT ON TABLE public.categories IS 'Таблица категорий товаров';
COMMENT ON COLUMN public.categories.categori_id IS 'Уникальный идентификатор категории';
COMMENT ON COLUMN public.categories.categori_name IS 'Наименование категории';
COMMENT ON COLUMN public.categories.code IS 'Уникальный код категории';
COMMENT ON COLUMN public.categories.description IS 'Описание категории';
COMMENT ON COLUMN public.categories.parent_id IS 'Ссылка на родительскую категорию';
COMMENT ON COLUMN public.categories.level IS 'Уровень в иерархии категорий';
COMMENT ON COLUMN public.categories.sort_order IS 'Порядок сортировки';
COMMENT ON COLUMN public.categories.is_active IS 'Флаг активности категории';
-- Создание триггера для автоматического обновления updated_at
CREATE TRIGGER update_categories_updated_at
BEFORE UPDATE ON public.categories
FOR EACH ROW
EXECUTE FUNCTION public.update_updated_at_column();
1.2. ОПИСАНИЕ ПОЛЕЙ
Основные поля:
| Поле | Тип | Описание |
|---|---|---|
| categori_id | SERIAL PRIMARY KEY | Уникальный идентификатор категории (автоинкремент) |
| categori_name | VARCHAR(100) NOT NULL | Наименование категории (обязательное поле) |
| code | VARCHAR(50) UNIQUE NOT NULL | Уникальный символьный код категории (для системных нужд) |
| description | TEXT | Подробное описание категории |
Поля для создания иерархии:
| Поле | Тип | Описание |
|---|---|---|
| parent_id | INTEGER REFERENCES categories(categori_id) | Ссылка на родительскую категорию (для древовидной структуры) |
| level | INTEGER DEFAULT 1 CHECK (level >= 1) | Уровень в иерархии (1 - корневой) |
| sort_order | INTEGER DEFAULT 0 | Порядок сортировки внутри родительской категории |
Служебные поля:
| Поле | Тип | Описание |
|---|---|---|
| is_active | BOOLEAN DEFAULT TRUE | Флаг активности категории (TRUE - активна) |
| created_at | TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | Дата и время создания записи |
| updated_at | TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | Дата и время последнего обновления |
1.3 СОЗДАЕМ СВЯЗЬ С ТАБЛИЦЕЙ ТОВАРОВ ЧЕРЕЗ ВНЕШНИЙ КЛЮЧ
-- После создания таблицы categories можно добавить внешний ключ
ALTER TABLE public.products
ADD CONSTRAINT fk_products_category
FOREIGN KEY (category) REFERENCES public.categories(categori_id);
1.3. ИТОГ
Теперь обе таблицы (public.products и public.categories) созданы в одной схеме.
Таблица создана:
