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) созданы в одной схеме.

Таблица создана: