-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.sql
36 lines (33 loc) · 1.52 KB
/
schema.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
CREATE TABLE IF NOT EXISTS users (
id VARCHAR NOT NULL PRIMARY KEY,
email VARCHAR NOT NULL UNIQUE,
username VARCHAR NOT NULL UNIQUE,
posts_count INTEGER NOT NULL DEFAULT 0 CHECK (posts_count >= 0),
followers_count INTEGER NOT NULL DEFAULT 0 CHECK (followers_count >= 0),
following_count INTEGER NOT NULL DEFAULT 0 CHECK (following_count >= 0),
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS posts (
id VARCHAR NOT NULL PRIMARY KEY,
user_id VARCHAR NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
content TEXT NOT NULL,
comments_count INTEGER NOT NULL DEFAULT 0 CHECK (comments_count >= 0),
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS comments (
id VARCHAR NOT NULL PRIMARY KEY,
user_id varchar NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
post_id VARCHAR NOT NULL REFERENCES posts ON DELETE CASCADE ON UPDATE CASCADE,
content TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS user_follows (
follower_id VARCHAR NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
followed_id VARCHAR NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP NOT NULL DEFAULT now(),
PRIMARY KEY (follower_id, followed_id)
);