1.1 СОЗДАЕМ ТАБЛИЦУ С ПЕРЕЧНЕМ ТОВАРОВ

-- Создание таблицы для номенклатуры товаров
CREATE TABLE public.products (
    -- Уникальный идентификатор товара (первичный ключ)
    product_id SERIAL PRIMARY KEY,
    -- Наименование товара (обязательное поле)
    product_name VARCHAR(255) NOT NULL,
    -- Артикул (уникальный код товара)
    sku VARCHAR(100) UNIQUE NOT NULL,
    -- Описание товара (может быть пустым)
    description TEXT,
    -- Категория товара
    category INTEGER NOT NULL,
    -- Единица измерения (шт, кг, м и т.д.)
    unit VARCHAR(20) DEFAULT 'шт',
    -- Статус товара (активен/неактивен)
    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_products_name ON public.products(product_name);
CREATE INDEX idx_products_category ON public.products(category);
CREATE INDEX idx_products_sku ON public.products(sku);
CREATE INDEX idx_products_active ON public.products(is_active);

-- Комментарии к таблице и полям
COMMENT ON TABLE public.products IS 'Таблица номенклатуры товаров';
COMMENT ON COLUMN public.products.product_id IS 'Уникальный идентификатор товара';
COMMENT ON COLUMN public.products.product_name IS 'Наименование товара';
COMMENT ON COLUMN public.products.sku IS 'Артикул (уникальный код товара)';
COMMENT ON COLUMN public.products.description IS 'Подробное описание товара';
COMMENT ON COLUMN public.products.category IS 'Категория товара';
COMMENT ON COLUMN public.products.unit IS 'Единица измерения';
COMMENT ON COLUMN public.products.is_active IS 'Флаг активности товара';
COMMENT ON COLUMN public.products.created_at IS 'Дата создания записи';
COMMENT ON COLUMN public.products.updated_at IS 'Дата последнего обновления';

-- Создание триггера для автоматического обновления updated_at
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ language 'plpgsql';

CREATE TRIGGER update_products_updated_at
    BEFORE UPDATE ON public.products
    FOR EACH ROW
    EXECUTE FUNCTION update_updated_at_column();

1.2. ОПИСАНИЕ ПОЛЕЙ

Основные поля:
Поле Тип Описание
product_id INTEGER PRIMARY KEY Уникальный идентификатор товара (автоинкремент)
product_name VARCHAR(255) NOT NULL Наименование товара (обязательное поле)
sku VARCHAR(100) UNIQUE NOT NULL Артикул (уникальный код товара)
description TEXT Подробное описание товара, характеристик
category INTEGER NOT NULL Ссылка на категорию товара

Служебные поля:
Поле Тип Описание
unit VARCHAR(20) DEFAULT 'шт' Единица измерения (по умолчанию - штуки)
is_active BOOLEAN DEFAULT TRUE Флаг активности товара (TRUE - активен)
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP Дата и время создания записи
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP Дата и время последнего обновления

1.3. ИТОГ

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