74 lines
2.6 KiB
SQL
74 lines
2.6 KiB
SQL
-- 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);
|
|
|