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. ИТОГ
Таблица создана:
