CREATE TABLE accounts
(
    id             VARCHAR(40) PRIMARY KEY,
    customer_id    VARCHAR(40) NOT NULL,
    currency_code  VARCHAR(10) NOT NULL,
    account_number INTEGER NOT NULL,
    constraint account_number_unique unique (account_number)
);

CREATE INDEX customer_id_index ON accounts(customer_id);
CREATE INDEX account_number_index ON accounts(account_number);

CREATE TABLE transactions
(
    id               varchar(40) PRIMARY KEY,
    conversion_rate  FLOAT(53)      NOT NULL,
    withdraws_from   VARCHAR(40)    NOT NULL,
    deposits_to      VARCHAR(40)    NOT NULL,
    withdrawn_amount numeric(38, 2) NOT NULL,
    deposited_amount numeric(38, 2) NOT NULL,
    note             VARCHAR(255)   NOT NULL,
    variable_symbol  VARCHAR(10)    NOT NULL,
    constraint fk_account_transaction_withdraws_from foreign key (withdraws_from) references accounts (id),
    constraint fk_account_transaction_deposits_to foreign key (deposits_to) references accounts (id)
);

CREATE INDEX withdraws_from_index ON transactions(withdraws_from);
CREATE INDEX deposits_to_index ON transactions(deposits_to);