From 5d41a6b8566c505ebbf6c37888a614e440bafe80 Mon Sep 17 00:00:00 2001 From: Kirill Date: Sat, 29 Nov 2025 14:32:51 +0300 Subject: [PATCH] fix(DB): Restructurization of db --- db/InitializeDB.py | 108 ++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 60 deletions(-) diff --git a/db/InitializeDB.py b/db/InitializeDB.py index 5e28c26..d88eae5 100644 --- a/db/InitializeDB.py +++ b/db/InitializeDB.py @@ -1,78 +1,66 @@ import sqlite3 from loguru import logger as log -def init_database(): - conn = sqlite3.connect('products.db') + +def init_database(db_name='pipe_store.db'): + conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute(''' - CREATE TABLE IF NOT EXISTS Product ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - image_path TEXT - ) + CREATE TABLE IF NOT EXISTS categories ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + description TEXT, + parent_id INTEGER, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (parent_id) REFERENCES categories (id) + ) ''') cursor.execute(''' - CREATE TABLE IF NOT EXISTS Param ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - val TEXT NOT NULL - ) + CREATE TABLE IF NOT EXISTS products ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + full_name TEXT NOT NULL, + description TEXT, + category_id INTEGER NOT NULL, + diameter INTEGER, + wall_thickness REAL, + length INTEGER, + color TEXT, + application_type TEXT, -- внутренняя/наружная + stiffness_class TEXT, -- SN4, SN2 и т.д. + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (category_id) REFERENCES categories (id) + ) ''') cursor.execute(''' - CREATE TABLE IF NOT EXISTS Val ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - val TEXT NOT NULL - ) + CREATE TABLE IF NOT EXISTS filters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + filter_key TEXT NOT NULL UNIQUE, -- ключ для фильтрации + filter_type TEXT DEFAULT 'single' -- 'single' или 'multiple' + ) ''') cursor.execute(''' - CREATE TABLE IF NOT EXISTS CParams ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL - ) + CREATE TABLE IF NOT EXISTS product_filters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + product_id INTEGER NOT NULL, + filter_key TEXT NOT NULL, + value TEXT NOT NULL, + FOREIGN KEY (product_id) REFERENCES products (id), + FOREIGN KEY (filter_key) REFERENCES filters (filter_key), + UNIQUE(product_id, filter_key) + ) ''') - - cursor.execute(''' - CREATE TABLE IF NOT EXISTS Category ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - image_path TEXT - ) - ''') - - cursor.execute(''' - CREATE TABLE IF NOT EXISTS Product_Param ( - product_id INTEGER, - param_id INTEGER, - PRIMARY KEY (product_id, param_id), - FOREIGN KEY (product_id) REFERENCES Product (id), - FOREIGN KEY (param_id) REFERENCES Param (id) - ) - ''') - - cursor.execute(''' - CREATE TABLE IF NOT EXISTS Category_CParams ( - category_id INTEGER, - cparams_id INTEGER, - PRIMARY KEY (category_id, cparams_id), - FOREIGN KEY (category_id) REFERENCES Category (id), - FOREIGN KEY (cparams_id) REFERENCES CParams (id) - ) - ''') - - cursor.execute(''' - CREATE TABLE IF NOT EXISTS CParams_Val ( - cparams_id INTEGER, - val_id INTEGER, - PRIMARY KEY (cparams_id, val_id), - FOREIGN KEY (cparams_id) REFERENCES CParams (id), - FOREIGN KEY (val_id) REFERENCES Val (id) - ) - ''') - + + cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id)') + cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_diameter ON products(diameter)') + cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_length ON products(length)') + cursor.execute('CREATE INDEX IF NOT EXISTS idx_product_filters_key_value ON product_filters(filter_key, value)') + conn.commit() conn.close() - log.info("База данных успешно инициализирована!") + log.success("База данных успешно инициализирована!")