fix(DB): Restructurization of db

This commit is contained in:
Kirill committed 2025-11-29 14:35:16 +03:00
1 parent dc8156e05c
commit 5d41a6b856
1 file changed
+46 -58
+46 -58
View File
@@ -1,78 +1,66 @@
import sqlite3 import sqlite3
from loguru import logger as log 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 = conn.cursor()
cursor.execute(''' cursor.execute('''
CREATE TABLE IF NOT EXISTS Product ( CREATE TABLE IF NOT EXISTS categories (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL, name TEXT NOT NULL UNIQUE,
image_path TEXT description TEXT,
) parent_id INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES categories (id)
)
''') ''')
cursor.execute(''' cursor.execute('''
CREATE TABLE IF NOT EXISTS Param ( CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL, name TEXT NOT NULL,
val 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(''' cursor.execute('''
CREATE TABLE IF NOT EXISTS Val ( CREATE TABLE IF NOT EXISTS filters (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
val TEXT NOT NULL name TEXT NOT NULL,
) filter_key TEXT NOT NULL UNIQUE, -- ключ для фильтрации
filter_type TEXT DEFAULT 'single' -- 'single' или 'multiple'
)
''') ''')
cursor.execute(''' cursor.execute('''
CREATE TABLE IF NOT EXISTS CParams ( CREATE TABLE IF NOT EXISTS product_filters (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL 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(''' cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id)')
CREATE TABLE IF NOT EXISTS Category ( cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_diameter ON products(diameter)')
id INTEGER PRIMARY KEY AUTOINCREMENT, cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_length ON products(length)')
name TEXT NOT NULL, cursor.execute('CREATE INDEX IF NOT EXISTS idx_product_filters_key_value ON product_filters(filter_key, value)')
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)
)
''')
conn.commit() conn.commit()
conn.close() conn.close()
log.info("База данных успешно инициализирована!") log.success("База данных успешно инициализирована!")