fix(DB): Restructurization of db
This commit is contained in:
1 parent
dc8156e05c
commit
5d41a6b856
1 file changed
+48
-60
+48
-60
@@ -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("База данных успешно инициализирована!")
|
||||
Reference in new issue
Block a user