Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 сем / 2 / мисприс-2.2_1374_Наволоцкий_Зырянов_Харитонов.docx
Скачиваний:
3
Добавлен:
29.03.2025
Размер:
1.7 Mб
Скачать

2.5 Разработка модели хранения

На рис. 8 представлена диаграмма, описывающая сущности и связи модели хранения.

Рисунок 7 - ERD для проекта Работа с маршрутной спецификацией изделий

2.6 Создание базы данных

Дополним работу 2.1 двумя таблицами: 1. создание таблицы операций для объектов (продукции)

def create_prod_operation_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS prod_operation (

id INTEGER PRIMARY KEY AUTOINCREMENT,

id_operation_type INTEGER NOT NULL,

operation_name TEXT NOT NULL,

operation_priority REAL NOT NULL,

id_shd INTEGER NOT NULL,

prod_id INTEGER NOT NULL,

grc_id INTEGER NOT NULL,

prof_id INTEGER NOT NULL,

prof_qual_id INTEGER,

launch_time REAL NOT NULL,

time_per_obj REAL NOT NULL,

time_unit_id INTEGER NOT NULL,

FOREIGN KEY (id_shd) REFERENCES terminal_classifier(id) ON DELETE CASCADE,

FOREIGN KEY (prod_id) REFERENCES product(id) ON DELETE CASCADE,

FOREIGN KEY (grc_id) REFERENCES terminal_classifier(id) ON DELETE RESTRICT,

FOREIGN KEY (prof_id) REFERENCES terminal_classifier(id) ON DELETE RESTRICT,

FOREIGN KEY (prof_qual_id) REFERENCES enum(id) ON DELETE RESTRICT,

FOREIGN KEY (time_unit_id) REFERENCES unit(id) ON DELETE RESTRICT

);

''')

conn.commit()

2. создание таблицы входных ресурсов для объектов (продукции)

def create_input_resources_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS input_resources (

id INTEGER PRIMARY KEY AUTOINCREMENT,

operation_id INTEGER NOT NULL,

prod_id INTEGER NOT NULL,

resource_name TEXT NOT NULL,

unit_id INTEGER NOT NULL,

quantity REAL NOT NULL,

FOREIGN KEY (operation_id) REFERENCES prod_operation(id) ON DELETE CASCADE,

FOREIGN KEY (prod_id) REFERENCES product(id) ON DELETE RESTRICT

FOREIGN KEY (unit_id) REFERENCES unit(id) ON DELETE RESTRICT

);

""")

conn.commit()

2.7 Разработка основных процедур

2.7.1 Процедура, создающая запись в таблице “prod_operation”:

функция: create_obj_operation - добавление записи в таблицу prod_operations

-- вход:

-- 1. id_operation_type - тип операции

-- 2. operation_name - названия типа операции

-- 3. operation_priority - порядок операции в ТМ

-- 4. id_shd - id СХД

-- 5. prod_id - id продукции

-- 6. grc_id - id ГРЦ

-- 7. prof_id - id профессии

-- 8. prof_qual_id - квалификация для профессии (разряд)

-- 9. launch_time - время начала операции

-- 10. time_per_obj - время, затрачиваемое на выполнение операции для одного объекта

-- 11. time_unit_id - ЕИ времени

-- выход: 1 успех / 0 ошибка

-- эффекты:

-- 1. создание новой записи в таблице prod_operations

-- требования:

-- 1. передаваемые аргукменты должны существовать

def create_obj_operation(id_operation_type, operation_name, operation_priority, id_shd, prod_id, grc_id, prof_id, prof_qual_id, launch_time, time_per_obj, time_unit_id):

try:

if not is_exist_by_id_in_table(id_shd, 'terminal_classifier'):

print('нет такой записи СХД таблице terminal_classifier')

return

if not is_exist_by_id_in_table(prod_id, 'product'):

print('нет такой записи объекта в таблице product')

return

if not is_exist_by_id_in_table(grc_id, 'product'):

print('нет такой записи ГРЦ таблице terminal_classifier')

return

if not is_exist_by_id_in_table(prof_id, 'terminal_classifier'):

print('нет такой записи Профессии таблице terminal_classifier')

return

if not is_exist_by_id_in_table(prof_qual_id, 'enum'):

print('нет такой записи квалификации Профессии таблице enum')

print(f'prof_qual_id - {prof_qual_id}')

return

if not is_exist_by_id_in_table(time_unit_id, 'unit'):

print('нет такой записи ЕИ таблице unit')

return

# Проверка на существование операции с таким приоритетом

query = f"SELECT COUNT(*) FROM {PROD_OPERATION_TABLE} WHERE prod_id = ? AND operation_priority = ?"

cursor.execute(query, (prod_id, operation_priority))

is_operation_with_same_order_exist = cursor.fetchone()[0]

if is_operation_with_same_order_exist > 0:

print(f'операция с таким порядком - {operation_priority} уже существует для ТМ')

return

# Добавление новой операции

insert_query = f'''

INSERT INTO {PROD_OPERATION_TABLE} (id_operation_type, operation_name, operation_priority, id_shd, prod_id, grc_id, prof_id, prof_qual_id, launch_time, time_per_obj, time_unit_id)

VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

'''

cursor.execute(insert_query, (id_operation_type, operation_name, operation_priority, id_shd, prod_id, grc_id, prof_id, prof_qual_id, launch_time, time_per_obj, time_unit_id))

conn.commit()

print(f'операция \"{operation_name}\" успешно добавлена')

except Exception as e:

conn.rollback()

print(f"Error in create_obj_operation: {e}")

return 0

Соседние файлы в папке 2