Schema Overview

16
Database Tables
15
Performance Indexes
6
Oracle Sequences
3
Update Triggers

Oracle Optimized

Native Oracle data types, sequences, and PL/SQL triggers for optimal performance.

Referential Integrity

Comprehensive foreign key relationships ensuring data consistency across all entities.

Data Validation

CHECK constraints and data validation rules enforcing business logic at the database level.

ERP Integration

Seamless integration with existing ERP tables through foreign key relationships.

Database Tables

Authentication
Core Entities
Workflow
Financial
Inspection

Authentication & User Management

1. User Profiles

Stores user profile information with role-based access control integration.

CREATE TABLE USER_PROFILES (
    ID VARCHAR2(36) PRIMARY KEY,
    FULL_NAME VARCHAR2(255) NOT NULL,
    ROLE VARCHAR2(50) NOT NULL CHECK (ROLE IN ('PL', 'PMO', 'Operations Manager', 'BOD', 'Construction Manager', 'Coordinator')),
    COUNTRY VARCHAR2(50),
    PHONE VARCHAR2(50),
    DEPARTMENT VARCHAR2(100),
    CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UPDATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. Spring Security Users

Spring Security compatible user authentication table with account status flags.

CREATE TABLE USERS (
    ID VARCHAR2(36) PRIMARY KEY,
    USERNAME VARCHAR2(100) UNIQUE NOT NULL,
    PASSWORD VARCHAR2(255) NOT NULL,
    EMAIL VARCHAR2(255) UNIQUE NOT NULL,
    ENABLED NUMBER(1) DEFAULT 1,
    ACCOUNT_NON_EXPIRED NUMBER(1) DEFAULT 1,
    ACCOUNT_NON_LOCKED NUMBER(1) DEFAULT 1,
    CREDENTIALS_NON_EXPIRED NUMBER(1) DEFAULT 1,
    CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UPDATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3. User Roles

Many-to-many relationship table for user role assignments.

CREATE TABLE USER_ROLES (
    USER_ID VARCHAR2(36) NOT NULL,
    ROLE VARCHAR2(50) NOT NULL,
    CONSTRAINT FK_USER_ROLES_USER FOREIGN KEY (USER_ID) REFERENCES USERS(ID)
);

Performance Optimization

Oracle Indexes

-- Performance indexes for query optimization
CREATE INDEX IDX_EQUIPMENT_PROJECT_ID ON EQUIPMENT(PROJECT_ID);
CREATE INDEX IDX_EQUIPMENT_SUBCONTRACTOR_ID ON EQUIPMENT(SUBCONTRACTOR_ID);
CREATE INDEX IDX_EQUIPMENT_STATUS ON EQUIPMENT(STATUS);
CREATE INDEX IDX_TIMESHEETS_DATE ON TIMESHEETS(SHEET_DATE);
CREATE INDEX IDX_TIMESHEETS_EQUIPMENT_ID ON TIMESHEETS(EQUIPMENT_ID);
CREATE INDEX IDX_TIMESHEETS_PROJECT_ID ON TIMESHEETS(PROJECT_ID);
CREATE INDEX IDX_EQUIPMENT_REQUESTS_STATUS ON EQUIPMENT_REQUESTS(STATUS);
CREATE INDEX IDX_EQUIPMENT_SERIAL_NUMBER ON EQUIPMENT(SERIAL_NUMBER);
CREATE INDEX IDX_SUBCONTRACTORS_REGISTRATION ON SUBCONTRACTORS(REGISTRATION_NUMBER);
CREATE INDEX IDX_USERS_USERNAME ON USERS(USERNAME);
CREATE INDEX IDX_USERS_EMAIL ON USERS(EMAIL);

-- Composite indexes for complex queries
CREATE INDEX IDX_EQUIPMENT_STATUS_PROJECT ON EQUIPMENT(STATUS, PROJECT_ID);
CREATE INDEX IDX_TIMESHEETS_DATE_PROJECT ON TIMESHEETS(SHEET_DATE, PROJECT_ID);
CREATE INDEX IDX_EQUIPMENT_TYPE_STATUS ON EQUIPMENT(TYPE, STATUS);

Oracle Sequences

-- Sequences for auto-generating IDs
CREATE SEQUENCE SEQ_USER_PROFILES START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE SEQ_USERS START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE SEQ_WORK_STATUS_RATES START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE SEQ_REQUEST_APPROVALS START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE SEQ_EXTENSION_REQUEST_APPROVALS START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE SEQ_EVALUATION_SCORES START WITH 1 INCREMENT BY 1;

Automatic Timestamp Triggers

-- Trigger for PROJECTS table
CREATE OR REPLACE TRIGGER TRG_PROJECTS_UPDATED_AT
    BEFORE UPDATE ON PROJECTS
    FOR EACH ROW
BEGIN
    :NEW.UPDATED_AT := CURRENT_TIMESTAMP;
END;

-- Trigger for EQUIPMENT table
CREATE OR REPLACE TRIGGER TRG_EQUIPMENT_UPDATED_AT
    BEFORE UPDATE ON EQUIPMENT
    FOR EACH ROW
BEGIN
    :NEW.UPDATED_AT := CURRENT_TIMESTAMP;
END;

-- Trigger for SUBCONTRACTORS table
CREATE OR REPLACE TRIGGER TRG_SUBCONTRACTORS_UPDATED_AT
    BEFORE UPDATE ON SUBCONTRACTORS
    FOR EACH ROW
BEGIN
    :NEW.UPDATED_AT := CURRENT_TIMESTAMP;
END;

Database Features

Data Integrity

Comprehensive CHECK constraints and foreign key relationships ensure data consistency and business rule enforcement.

Automatic Timestamps

Oracle triggers automatically maintain created_at and updated_at timestamps for audit trail and change tracking.

Multi-Country Support

Built-in support for Libya, Tunisia, and Iraq with country-specific validation and data segregation.

Performance Optimized

Strategic indexing and composite indexes for optimal query performance on large datasets.

Security

Role-based access control integration with Spring Security and comprehensive audit trails.

Scalable Design

Designed to handle enterprise-scale data volumes with efficient storage and query patterns.