Database

Model

erDiagram
    User {
        int id PK
        string username UK
        string email UK "Nullable"
        string password UK "Hashed and salted Password"
        timestamp created_at
        bool is_admin
    }

    Currency {
        int id PK
        string name
        string symbol
        string iso_code
        int decimal_places
        User user FK "Nullable"
    }
    Currency }|--|| User: "many to one"

    Account {
        int id PK
        string name
        string description "Nullable"
        string iban UK "Nullable"
        int balance
        Currency currency FK
        timestamp created_at
    }

    UserAccount {
        User user PK "References User.id"
        Account account PK "References Account.id"
    }
    UserAccount ||--|{ User: "one to many"
    UserAccount ||--|{ Account: "one to many"

    Transaction {
        int id PK
        Account source FK "Nullable"
        Account destination FK "Nullable"
        int amount
        Currency currency FK
        string description "Nullable"
        Budget budget FK "Nullable"
        timestamp created_at
        timestamp executed_at
    }
    Transaction ||--|| Account: "one to one"
    Transaction ||--|| Budget: "one to one"

    Budget {
        int id PK
        User user FK
        int amount
        string name
        string description "Nullable"
        timestamp created_at
    }
    Budget ||--|| User: "one to one" 

SQL

You can find the SQL script here.