-- 001_initial_schema.sql -- Создание базовых таблиц для AETERNA -- Таблица пользователей CREATE TABLE IF NOT EXISTS users ( user_id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, full_name VARCHAR(100) NOT NULL, phone VARCHAR(20), city VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_login TIMESTAMP, is_active BOOLEAN DEFAULT TRUE, is_admin BOOLEAN DEFAULT FALSE ); -- Таблица категорий CREATE TABLE IF NOT EXISTS categories ( category_id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, slug VARCHAR(100) UNIQUE NOT NULL, parent_id INTEGER REFERENCES categories(category_id) ON DELETE SET NULL, description TEXT, sort_order INTEGER DEFAULT 0, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Таблица подкатегорий CREATE TABLE IF NOT EXISTS subcategories ( subcategory_id SERIAL PRIMARY KEY, category_id INTEGER REFERENCES categories(category_id) ON DELETE CASCADE, name VARCHAR(100) NOT NULL, slug VARCHAR(100) UNIQUE NOT NULL, description TEXT, sort_order INTEGER DEFAULT 0, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Таблица товаров CREATE TABLE IF NOT EXISTS products ( product_id SERIAL PRIMARY KEY, category_id INTEGER REFERENCES categories(category_id) ON DELETE SET NULL, name VARCHAR(200) NOT NULL, slug VARCHAR(200) UNIQUE NOT NULL, description TEXT, price DECIMAL(10, 2) NOT NULL, old_price DECIMAL(10, 2), sku VARCHAR(50) UNIQUE, stock_quantity INTEGER DEFAULT 0, is_available BOOLEAN DEFAULT TRUE, is_featured BOOLEAN DEFAULT FALSE, rating DECIMAL(3, 2) DEFAULT 0, review_count INTEGER DEFAULT 0, image_url VARCHAR(500), color VARCHAR(50), material VARCHAR(100), card_size VARCHAR(20) DEFAULT 'small', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Индексы для быстрого поиска CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id); CREATE INDEX IF NOT EXISTS idx_products_available ON products(is_available); CREATE INDEX IF NOT EXISTS idx_products_price ON products(price); CREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id); CREATE INDEX IF NOT EXISTS idx_categories_active ON categories(is_active);