| | 25 | |
| | 26 | === 4. Магацинска структура (WAREHOUSES, SECTIONS, LOCATIONS, BINS) === |
| | 27 | * Табелата WAREHOUSES претставува физичка градба или просторија. Секој магацин има уникатно име, адреса, град и земја корисно при проширување на системот кон повеќелокациски компании. |
| | 28 | * Табелата SECTIONS претставува именувана зона внатре во магацинот (на пример, „Зона А", Зона Б", „Зона Југ", „Зона 32"). Уникатноста е на ниво на (warehouse_id, name), бидејќи секциите мора да бидат уникатни само во рамките на истиот магацин. |
| | 29 | * Табелата LOCATIONS претставува конкретна физичка позиција во секцијата, дефинирана преку ред, колона и ниво (рафт). Уникатноста (section_id, row, column, level) гарантира дека не постојат две идентични позиции во иста секција. Дополнително, location_code е уникатен бизнис-идентификатор (на пример, „A-03-02-01"). |
| | 30 | * Табелата BINS е последното ниво во хиерархијата. Секој бин е физичка кутија или контејнер на дадена локација. Ограничувањето UQ_BINS_LOCATION гарантира дека на секоја локација може да постои само еден бин тоа е дизајнерска одлука која ја поедноставува логиката на движење. |
| | 31 | |
| | 32 | === 5.Залихи (INVENTORY, INVENTORY_MOVEMENTS) === |
| | 33 | * Табелата INVENTORY претставува моментална состојба на залиха: колку единици од одредена варијанта се наоѓаат во одреден бин. Составениот уникатен клуч (product_variant_id, bin_id) осигурува дека за иста комбинација не може да постојат два записа. Полето reserved_quantity означува количина која е резервирана (на пример, за нарачка), а уште не е физички извадена ова овозможува точно следење на достапни залихи. |
| | 34 | * Табелата INVENTORY_MOVEMENTS чува историски запис за секое движење на производ. Секое движење е поврзано со изворен бин (from_bin_id) и/или целен бин (to_bin_id). Кога from_bin_id е NULL, тоа е прием на нова роба; кога to_bin_id е NULL, тоа е издавање/испорака. |
| | 35 | === 6.Трансакции (TRANSACTION_TYPES, INVENTORY_TRANSACTIONS, DELIVERY_TRANSACTIONS, SHIPMENT_TRANSACTIONS) === |
| | 36 | * Табелата TRANSACTION_TYPES е едноставен шифарник кој ги дефинира можните типови на трансакции (на пример: DELIVERY, SHIPMENT, TRANSFER). |
| | 37 | * Табелата INVENTORY_TRANSACTIONS е заедничка основа за сите трансакции. Чува универзални полиња: кој вработен ја создал трансакцијата, кој ја ажурирал, кој ја прифатил и кој ја спакувал. Ваквото разделување значи дека бизнис-логиката за „прием" и „испорака" не мора да се дуплира само специфичните полиња одат во подтабелите. |
| | 38 | * Табелата DELIVERY_TRANSACTIONS е подтип за приемот на роба и содржи специфични полиња: добавувач и напомена за доставница. |
| | 39 | * Табелата SHIPMENT_TRANSACTIONS е подтип за испраќање на роба и носи специфични полиња: број на пратка и дестинациска адреса. |
| | 40 | 7.Вработени (EMPLOYEES, EMPLOYEE_WAREHOUSE_ASSIGNMENTS) |
| | 41 | * Табелата EMPLOYEES чува сеопфатни информации за секој вработен: лични податоци, контакт, работно место, статус и датуми на вработување и евентуално на отказ. Полето manager_id е самореференцирачко секој вработен може да има надреден, а тоа формира менаџерска хиерархија. |
| | 42 | * Табелата EMPLOYEE_WAREHOUSE_ASSIGNMENTS ја моделира временски условената врска помеѓу вработениот и магацинот во кој работи. Со start_date и end_date може да се следи историјата на распоредување. Некој работник можел да работи во Магацин А до март, а потоа во Магацин Б. Полето is_primary означува кој магацин е примарно работно место. |
| | 43 | === 8. Улоги и Дозволи (ROLES, PERMISSIONS, ROLES_EMPLOYEES, PERMISSIONS_ROLES) === |
| | 44 | * Табелите ROLES и PERMISSIONS се независни ентитети: улогата е групирање (на пример, „Магацински менаџер"), а дозволата е конкретно право (на пример, „Може да одобрува движења"). И двете имаат created_at/updated_at за аудит. |
| | 45 | * Табелата PERMISSIONS_ROLES е врска многу-кон-многу помеѓу дозволи и улоги: на улога можат да и се доделат повеќе дозволи, а иста дозвола може да ја имаат повеќе улоги. |
| | 46 | * Табелата ROLES_EMPLOYEES е врска многу-кон-многу помеѓу улоги и вработени: на вработен можат да му се доделат повеќе улоги истовремено, а иста улога може да ја имаат повеќе вработени. Ваквата структура е флексибилна, нов тип на корисник се дефинира со нова улога и доделување на соодветни дозволи, без да се менува структурата на базата. |
| | 47 | |
| | 48 | |
| | 49 | |
| | 50 | |