Schema - minwang2022/SplitDice GitHub Wiki
Postgres Database Schema
USERS
| column name |
data type |
details |
| id |
integer |
not null, unique |
| username |
string |
not null, indexed |
| email |
string |
not null, indexed, unique |
| password digest |
string |
not null |
| session token |
string |
not null, indexed, unique |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |
- index on email, unique: true, null: false
- index on name
- index on session_token, unique: true
FRIENDS
| column name |
data type |
details |
| id |
integer |
not null, primary key |
| user_id |
integer |
not null, foreign key |
| friend_id |
integer |
not null, foreign key |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |
- index on user_id, null: false
- index on friend_id, null: false
EXPENSES
| column name |
data type |
details |
| id |
integer |
not null, primary key |
| belong_to_group_id |
integer |
not null, foreign key |
| expense |
float |
not null |
| description |
string |
not null |
| category |
string |
not null |
| note |
string |
not null |
| author_id |
integer |
not null, foreign key |
| expense_date |
date |
not null |
| expense_split_percentage |
float |
not null |
| paid |
boolean |
default: false |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |
*index on author_id, null: false
*expense_split_percentage could vary choose by user.
GROUP EXPENSES TOTAL AND SPLIT
| column name |
data type |
details |
| id |
integer |
not null, primary key |
| split_amount |
float |
not null |
| receiver_id |
integer |
not null, foreign key |
| receiver_paid |
boolean |
default: false |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |
- index on id(expense id), null: false
- index on receiver_id , null: false
GROUP TABLE
| column name |
data type |
details |
| id |
integer |
not null, primary key |
| group_name |
string |
not null |
| group_type |
string |
not null |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |
- group_member associate to many current users. ( has_many association)
- index on group_name, null: false
GROUP MEMBERS TABLE
| column name |
data type |
details |
| id |
integer |
not null, primary key |
| group_id |
integer |
not null, foreign_key |
| group_member_id |
integer |
not null, foreign_key |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |
- users can have many groups and group can have many users.
COMMENT
| column name |
data type |
details |
| id |
integer |
not null, primary key |
| comment |
string |
not null |
| author_id |
integer |
not null, foreign_key |
| expense_id |
integer |
not null, foreign_key |
| created_at |
dateTime |
not null |
| updated_at |
dateTime |
not null |