@startuml

hide circle

left to right direction

entity USER {
    PK USER_ID: NUMBER
    --
    FK USER_ROLE_ID: NUMBER
    N LOGIN: VARCHAR(10)
    NAME: VARCHAR(10)
    SURNAME: VARCHAR(10)
    MIDDLE_NAME: VARCHAR(10)
    CREATE_TIME: TIMESTAMP WITH TIMEZONE
    UPDATE_TIME: TIMESTAMP WITH TIMEZONE
}

entity USER_GROUP {
    PK USER_GROUP_ID: NUMBER
    PK USER_ROLE_ID: NUMBER
    --
    N GROUP_NAME: VARCHAR(20)
}

entity BOARD {
    PK BOARD_ID: NUMBER
    --
    FK N USER_GROUP_ID: NUMBER
}

entity CLIENT {
    PK CLIENT_ID: NUMBER
    --
    FK CLIENT_TYPE_ID: NUMBER
    CREATE_TIME: TIMESTAMP WITH TIMEZONE
    UPDATE_TIME: TIMESTAMP WITH TIMEZONE
}

entity CLIENT_TYPE {
    PK ID: NUMBER
    --
    N CLIENT_TYPE_ID: NUMBER
    CLIENT_TYPE_NAME: VARCHAR(10)
}

entity PHYSICAL_CLIENT_TYPE {
    PK FK CLIENT_ID: NUMBER
    --
    NAME: VARCHAR(10)
    SURNAME: VARCHAR(10)
    MIDDLE_NAME: VARCHAR(10)
    DESCRIPTION: VARCHAR(200)
}

entity JURIDICAL_CLIENT_TYPE {
    PK FK CLIENT_ID: NUMBER
    --
    NAME: VARCHAR(15)
    DESCRIPTION: VARCHAR(200)
}

entity CLIENT_ADDRESS {
    PK ID: NUMBER
    --
    FK CLIENT_ID: NUMBER
    COUNTRY: VARCHAR(10)
    REGION: VARCHAR(10)
    STREET: VARCHAR(15)
    MAIL: VARCHAR(10)
    POST_CODE: NUMBER
    PHONE: NUMBER
    PRIMARY: BOOL
}

entity APPEAL {
  PK APPEAL_ID: NUMBER
  --
  FK CLIENT_ID: NUMBER
  DESCRIPTION: VARCHAR(200)
  IS_CLOSED: BOOL
  CREATE_TIME: TIMESTAMP WITH TIMEZONE
  UPDATE_TIME: TIMESTAMP WITH TIMEZONE
}

entity ORDER {
  PK ORDER_ID: NUMBER
  --
  FK CLIENT_ID: NUMBER
  DESCRIPTION: VARCHAR(200)
  IS_CLOSED: BOOL
  CREATE_TIME: TIMESTAMP WITH TIMEZONE
  UPDATE_TIME: TIMESTAMP WITH TIMEZONE
}

entity TASK {
  PK TASK_ID: NUMBER
  PK FK BOARD_ID: NUMBER
  --
  FK APPEAL_ID: NUMBER
  FK STATUS_ID: NUMBER
  PROCESSED_BY_USER_ID: NUMBER
  DESCRIPTION: VARCHAR(200)
  CREATE_TIME: TIMESTAMP WITH TIMEZONE
  UPDATE_TIME: TIMESTAMP WITH TIMEZONE
}

entity TASK_STATUS {
  PK ID: NUMBER
  --
  N STATUS_ID: NUMBER
  N STATUS_NAME: VARCHAR(10)
}

BOARD::USER_GROUP_ID ||--|| USER_GROUP::USER_GROUP_ID

USER::USER_ROLE_ID }|--|| USER_GROUP::USER_ROLE_ID

CLIENT::CLIENT_TYPE_ID }|--|| CLIENT_TYPE::CLIENT_TYPE_ID
CLIENT::CLIENT_ID ||--|| PHYSICAL_CLIENT_TYPE::CLIENT_ID
CLIENT::CLIENT_ID ||--|| JURIDICAL_CLIENT_TYPE::CLIENT_ID
CLIENT::CLIENT_ID ||--|{ CLIENT_ADDRESS::CLIENT_ID

APPEAL::CLIENT_ID }|--|| CLIENT::CLIENT_ID

ORDER::CLIENT_ID }|--|| CLIENT::CLIENT_ID

TASK::APPEAL_ID ||--|| APPEAL::APPEAL_ID
TASK::BOARD_ID }|--|| BOARD::BOARD_ID
TASK::STATUS_ID }|--|| TASK_STATUS::STATUS_ID
TASK::PROCESSED_BY_USER_ID }|--|| USER::USER_ID

@enduml
