Skip to content

Latest commit

 

History

History
225 lines (216 loc) · 5.53 KB

File metadata and controls

225 lines (216 loc) · 5.53 KB

Database

Bellow is the database schema for the Hackspace Membership Management System. This schema is designed to be used with a MySQL database.

The databse also contains tables defined by laravel and some packages namely which are not shown here ie:

  • migrations
  • jobs
  • roles
  • permissions
erDiagram
    users ||--o{ members: has
    users {
        uuid id PK
        string email
        datetime email_verified_at
        string password
        string remember_token
        datetime created_at
        datetime updated_at
    }
    members {
        uuid id PK
        string user_id FK
        string name
        string known_as
        string discord_id
        datetime created_at
        datetime updated_at
    }
    users ||--o{ discordUsers: has
    members ||--o{ discordUsers: has
    discordUsers {
        uuid id PK
        string discord_id
        string user_id FK
        string member_id FK
        string username
        datetime created_at
        datetime updated_at
    }
    members ||--o{ membership_histories: has
    membership_histories {
        uuid id PK
        string member_id FK
        string membership_type
        datetime created_at
        datetime updated_at
    }
    members ||--o{ membership_rate_modifier: has
    membership_rate_modifier {
        uuid id PK
        string member_id FK
        float percentage
        period discount_start
        period discount_end
        datetime created_at
        datetime updated_at
    }
    membership_rates {
        uuid id PK
        int membership_type_id FK
        int rate
        datetime from
        datetime created_at
        datetime updated_at
    }
    members ||--|{ email_addresses: has
    email_addresses {
        uuid id PK
        string member_id FK
        string email_address
        datetime verified_at
        boolean is_primary
        datetime created_at
        datetime updated_at
    }
    members ||--|| postal_addresses: has
    postal_addresses {
        uuid id PK
        string member_id FK
        string line_1
        string line_2
        string line_3
        string city
        string county
        string postcode
        datetime created_at
        datetime updated_at
    }
    members ||--o| access_control_items: has
    access_control_items {
        uuid id PK
        string member_id FK
        string key_id
        string fob_id
        datetime given_at
        datetime returned_at
        datetime created_at
        datetime updated_at
    }
    members ||--o{ bank_references: has
    bank_references {
        uuid id PK
        string member_id FK
        string acc_num_sort_code_hash
        string bank_account_name
        string payment_reference
        datetime created_at
        datetime updated_at
    }
    members ||--|| keyholder_applications: has
    keyholder_applications {
        uuid id PK
        string member_id FK
        uuid proposed_by_member_id FK
        uuid seconded_by_member_id FK
        boolean id_verified
        boolean approved
        datetime created_at
        datetime updated_at
    }
    members ||--|{ trustee_histories: has
    trustee_histories {
        uuid id PK
        string member_id FK
        datetime elected_at
        datetime resigned_at
        datetime created_at
        datetime updated_at
    }
    tools {
        uuid id PK
        string name
        string description
        string training_offered
        string training_required
        datetime created_at
        datetime updated_at
    }
    tools ||--o{ tool_trainers: has
    tool_trainers ||--o{ members: has
    tool_trainers {
        uuid id PK
        string tool_id FK
        string member_id FK
        datetime created_at
        datetime updated_at
    }
    tool_trainers ||--o{ training_sessions: has
    training_sessions {
        uuid id PK
        string tool_trainer_id FK
        datetime when
        int cost
        datetime created_at
        datetime updated_at
    }
    training_sessions ||--o{ training_signups: has
    training_signups ||--|{ members: has
    training_signups {
        uuid id PK
        string training_session_id FK
        string member_id FK
        boolean attended
        boolean paid
        boolean completed
        datetime created_at
        datetime updated_at
    }
    members ||--|{ training_requests: has
    training_requests ||--|{ tools: has
    training_requests {
        uuid id PK
        string member_id FK
        string tool FK
        string avaliablity
        datetime created_at
        datetime updated_at
    }

    bank_transactions {
        uuid id PK
        string acc_num_sort_code_hash
        string description
    }

    bank_transactions ||--|o transactions: bank_transaction_id
    members ||--o{ transactions : member_id
    transactions {
        int id PK
        uuid order_id FK
        uuid member_id FK
        float debit_amount
        float credit_amount
        datetime created_at
        datetime updated_at

        %% it might be a good idea to keep record of
        %% why or from where the payment was made.
        %% think something like "web ui", "automatic", etc...
        string origination 
    }

    %% potentially, membership rates can be a purchased_products!
    purchased_products {
        uuid id PK
        uuid transaction_id FK
        string description
        int purchased_products
        float price
    }

    transactions }|--|| purchased_products: transaction_id
    products {
        uuid id PK
        string description
        int purchased_products_id
        float price
        string category
    }
Loading