= Логички и физички дизајн = == Релациска шема (со парцијална трансформација) == === Ознаки === * '''примарни клучеви''' - __'''болдирани и подвлечени'''__ * '''not null атрибути''' - '''болдирани''' * '''надворешни клучеви''' - * до името на надворешниот клуч и во заграда табелата кон која референцира * останати атрибути - без ознака === Табели === === Табели === * '''ROLE''' (__'''role_id'''__, '''role_name''', description) * '''APP_USER''' (__'''user_id'''__, '''role_id'''* ('''ROLE'''), username, '''password_hash''', first_name, last_name, email, active) * '''SESSION''' (__'''token'''__, '''user_id'''* ('''APP_USER'''), '''created_at''', '''expires_at''') * '''AUDIT_LOG''' (__'''log_id'''__, '''user_id'''* ('''APP_USER'''), '''action''', entity_name, created_at) * '''SHIFT''' (__'''shift_id'''__, '''user_id'''* ('''APP_USER'''), '''start_time''', end_time) * '''SHIFT_CLOSE''' (__'''shift_id'''__, '''closed_at''', '''closed_by'''* ('''APP_USER'''), '''total''', '''order_count''') * '''CATEGORY''' (__'''category_id'''__, '''name''', description, active) * '''PRODUCT''' (__'''product_id'''__, '''category_id'''* ('''CATEGORY'''), '''name''', description, '''price''', active, '''min_stock''') * '''RECIPE''' (__'''recipe_id'''__, product_id* ('''PRODUCT''')) * '''RECIPE_ITEM''' (__'''recipe_id'''__, __'''ingredient_id'''__, '''quantity_needed''') * '''INGREDIENT''' (__'''ingredient_id'''__, '''name''', '''unit''', '''min_stock''', '''active''') * '''INGREDIENT_INVENTORY''' (__'''id'''__, '''ingredient_id'''* ('''INGREDIENT'''), '''quantity_change''', '''operation_type''', '''created_at''') * '''INVENTORY''' (__'''inventory_id'''__, '''product_id'''* ('''PRODUCT'''), '''quantity_change''', operation_type, created_at) * '''RESTAURANT_TABLE''' (__'''table_id'''__, '''table_number''', '''capacity''', '''status''') * '''ORDERS''' (__'''order_id'''__, '''user_id'''* ('''APP_USER'''), '''table_id'''* ('''RESTAURANT_TABLE'''), created_at, '''status''') * '''ORDER_ITEM''' (__'''order_id'''__, __'''item_number'''__, product_id* ('''PRODUCT'''), '''quantity''', '''unit_price''', '''status''') * '''PAYMENT''' (__'''payment_id'''__, '''order_id'''* ('''ORDERS'''), '''amount''', '''method''', payment_date) * '''INVOICE''' (__'''invoice_id'''__, '''payment_id'''* ('''PAYMENT'''), '''invoice_number''', issued_at) * '''APP_SETTINGS''' (__'''id'''__, '''restaurant_name''', '''vat_rate''', '''currency''', '''printer_config''') * '''SETTINGS''' (__'''id'''__, '''restaurant_name''', '''vat_percent''', '''currency''', printer_ip, '''printer_port''') == DDL скрипта за креирање и бришење на табелите == '''DDL скрипта''' Прикачена е датотеката schema_creation.sql == DML скрипта за полнење на табелите со податоци == '''DML скрипта''' Прикачена е датотеката data_load.sql == Релациски дијаграм изваден од DBeaver == Прикачена е датотеката relational_schema.jpg