Skip to content

Database Schema

PavelAparcana edited this page Nov 13, 2019 · 5 revisions

users

Column name data type details
id integer not null, primary key
username string not null, indexed, unique
full_name string not null
email string not null, indexed, unique
password_digest string not null
session_token string not null, indexed, unique
  • index on username, unique: true
  • index on email, unique: true
  • index on session_token, unique: true
  • has_many comments
  • has_many authored_likes
  • has_many images
  • has_many in_follows, foreign_key: followee_id - followers table
  • has_many out_follows, foreign_key: follower_id - followers table
  • has_many followers(as a followee through in_follows - followers table
  • has_many following(as a follower through out_follows - followers table
  • has_many sent_messages, foreign_key: senders - messages table
  • has_many received_messages, foreign_key: recipient - messages table

images

Column name data type details
id integer not null, primary key
author_id integer not null, indexed, foreign key
image_url string not null
caption text
  • index on user_id
  • has_many comments
  • has_many likes
  • has_many hashtags
  • belongs_to author, foreign_key: author_id - users table

comments

Column name data type details
id integer not null, primary key
author_id integer not null, indexed
image_id integer not null, indexed
body text not null
  • indexed on user_id
  • indexed on image_id
  • belongs_to author, foreign_key: author_id - users table
  • belongs_to image, foreign_key: image_id - images table

likes

Column name data type details
id integer not null, primary key
user_id integer not null, indexed
image_id integer not null, indexed
  • indexed on user_id
  • indexed on image_id
  • belongs_to author, foreign_key: user_id - users table
  • belongs_to image, foreign_key: image_id - images table

followers

Column name data type details
id integer not null, primary key
followee_id integer not null, indexed
follower_id integer not null, indexed
  • indexed on followee_id
  • indexed on follower_id
  • belongs_to followee, foreign_key: followee_id - users table
  • belongs_to follower, foreign_key: follower_id - users table

direct_message

Column name data type details
id integer not null, primary key
sender_id integer not null, indexed
recipient_id integer not null, indexed
body text not null
  • indexed on sender_id
  • indexed on recipient_id
  • belongs_to sender, foreign_key: sender_id - users table
  • belongs_to recipient, foreign_key: recipient_id - users table

hashtags

Column name data type details
id integer not null, primary key
name string not null, indexed
image_id integer not null, indexed
  • indexed on name
  • indexed on image_id
  • belongs_to image, foreign_key: image_id - images table

Clone this wiki locally