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 |