Skip to content

Database Schema

tkla edited this page Oct 2, 2021 · 13 revisions

1. users

Column Name data type details
id integer not null, primary key
username string not null, indexed, unique
email string not null, indexed, unique
password_digest string not null
session_token string not null, indexed, unique
nickname string
created_at datetime not null
updated_at datetime not null

2. servers

column name data types details
id integer not null, primary key
name string not null, indexed, unique
author_id integer not null, indexed, foreign key
created_at datetime not null
updated_at datetime not null

Servers belong to one User.

3. channels

column name data types details
id integer not null, primary key
server_id integer not null, foreign key
name string not null, unique: server
author_id integer not null, foreign key
voice_channel boolean not null
created_at datetime not null
updated_at datetime not null

Channels belong to servers.

Channels belong to one author.

4. posts

column name data types details
id integer not null, unique, primary key
server_id integer not null, indexed, foreign key
channel_id integer not null, indexed, foreign key
author_id integer not null, foreign key
parent_id integer foreign key
body text not null
original_body text not null
created_at datetime not null
updated_at datetime not null

Comments belong to one author.

Comments belong to one parent comment.

Comments have many replies.

5. user_servers

column name data types details
id integer not null, unique, primary key
user_id integer not null, indexed, unique: server, foreign key
server_id integer not null, indexed, foreign key
admin boolean not null
created_at datetime not null
updated_at datetime not null

Users can join many servers.

6. active_storage_attachments

column name data types details
id integer not null, unique, primary key
record_id integer not null, foreign key
blob_id integer not null, foreign key
record_type string not null,

Clone this wiki locally