| | 1 | = Логички и физички дизајн = |
| | 2 | |
| | 3 | == Релациска шема (со парцијална трансформација) == |
| | 4 | |
| | 5 | === Ознаки === |
| | 6 | |
| | 7 | * '''примарни клучеви''' - болдирани и подвлечени |
| | 8 | * '''not null атрибути''' - болдирани |
| | 9 | * '''надворешни клучеви''' - * до името на надворешниот клуч и во заграда табелата кон која референцира |
| | 10 | * останати атрибути - без ознака |
| | 11 | |
| | 12 | === Табели === |
| | 13 | |
| | 14 | * '''ROLE''' ('''role_id''', '''role_name''', '''description''') |
| | 15 | * '''APP_USER''' ('''user_id''', '''role_id'''* ('''ROLE'''), '''username''', '''password_hash''', '''first_name''', '''last_name''', '''email''', '''active''') |
| | 16 | * '''SESSION''' ('''token''', '''user_id'''* ('''APP_USER'''), '''created_at''', '''expires_at''') |
| | 17 | * '''AUDIT_LOG''' ('''log_id''', '''user_id'''* ('''APP_USER'''), '''action''', '''entity_name''', '''created_at''') |
| | 18 | * '''SHIFT''' ('''shift_id''', '''user_id'''* ('''APP_USER'''), '''start_time''', '''end_time''') |
| | 19 | * '''SHIFT_CLOSE''' ('''shift_id''', '''closed_at''', '''closed_by'''* ('''APP_USER'''), '''total''', '''order_count''') |
| | 20 | * '''CATEGORY''' ('''category_id''', '''name''', '''description''', '''active''') |
| | 21 | * '''PRODUCT''' ('''product_id''', '''category_id'''* ('''CATEGORY'''), '''name''', '''description''', '''price''', '''active''', '''min_stock''') |
| | 22 | * '''RECIPE''' ('''recipe_id''', '''product_id'''* ('''PRODUCT''')) |
| | 23 | * '''RECIPE_ITEM''' ('''recipe_id''', '''ingredient_id''', '''quantity_needed''') |
| | 24 | * '''INGREDIENT''' ('''ingredient_id''', '''name''', '''unit''', '''min_stock''', '''active''') |
| | 25 | * '''INGREDIENT_INVENTORY''' ('''id''', '''ingredient_id'''* ('''INGREDIENT'''), '''quantity_change''', '''operation_type''', '''created_at''') |
| | 26 | * '''INVENTORY''' ('''inventory_id''', '''product_id'''* ('''PRODUCT'''), '''quantity_change''', '''operation_type''', '''created_at''') |
| | 27 | * '''RESTAURANT_TABLE''' ('''table_id''', '''table_number''', '''capacity''', '''status''') |
| | 28 | * '''ORDERS''' ('''order_id''', '''user_id'''* ('''APP_USER'''), '''table_id'''* ('''RESTAURANT_TABLE'''), '''created_at''', '''status''') |
| | 29 | * '''ORDER_ITEM''' ('''order_id''', '''item_number''', '''product_id'''* ('''PRODUCT'''), '''quantity''', '''unit_price''', '''status''') |
| | 30 | * '''PAYMENT''' ('''payment_id''', '''order_id'''* ('''ORDERS'''), '''amount''', '''method''', '''payment_date''') |
| | 31 | * '''INVOICE''' ('''invoice_id''', '''payment_id'''* ('''PAYMENT'''), '''invoice_number''', '''issued_at''') |
| | 32 | * '''APP_SETTINGS''' ('''id''', '''restaurant_name''', '''vat_rate''', '''currency''', '''printer_config''') |
| | 33 | * '''SETTINGS''' ('''id''', '''restaurant_name''', '''vat_percent''', '''currency''', '''printer_ip''', '''printer_port''') |
| | 34 | |
| | 35 | == DDL скрипта за креирање и бришење на табелите == |
| | 36 | |
| | 37 | '''DDL скрипта''' |
| | 38 | |
| | 39 | Прикачена е датотеката schema_creation.sql |
| | 40 | |
| | 41 | == DML скрипта за полнење на табелите со податоци == |
| | 42 | |
| | 43 | '''DML скрипта''' |
| | 44 | |
| | 45 | Прикачена е датотеката data_load.sql |
| | 46 | |
| | 47 | == Релациски дијаграм изваден од DBeaver == |
| | 48 | |
| | 49 | Прикачена е датотеката relational_schema.jpg |