-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.sql
106 lines (98 loc) · 2.98 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
drop database pop;
create database pop;
use pop;
CREATE TABLE Users (
userId CHAR(36) PRIMARY KEY,
username VARCHAR(25) UNIQUE NOT NULL,
fullname VARCHAR(50),
email VARCHAR(100) UNIQUE,
phone VARCHAR(13) UNIQUE NOT NULL,
dob DATE,
INDEX (username)
);
CREATE TABLE UserProfile(
username VARCHAR(25) PRIMARY KEY,
imageUrl VARCHAR(300),
views int default 0,
reacts int default 0,
popScore int default 0,
bio VARCHAR(1000),
followers int default 0,
following int default 0,
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE
);
CREATE TABLE Posts(
postId CHAR(36) PRIMARY KEY,
imageUrl varchar(300),
description varchar(1000),
username VARCHAR(25),
views INT DEFAULT 0,
timestamp date,
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE,
INDEX (username)
);
CREATE TABLE UserReactions(
username VARCHAR(25),
postId CHAR(36),
reactionString varchar(100),
PRIMARY KEY (postId, username),
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE,
FOREIGN KEY (postId) REFERENCES Posts(postId) ON DELETE CASCADE,
INDEX (reactionString)
);
CREATE TABLE Tagged(
postId CHAR(36),
username VARCHAR(25),
approvalStatus bool default false,
PRIMARY KEY (postId, username),
INDEX (username),
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE,
FOREIGN KEY (postId) REFERENCES Posts(postId) ON DELETE CASCADE
);
CREATE TABLE PostViews(
postId CHAR(36),
username VARCHAR(25),
PRIMARY KEY (postId, username),
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE,
FOREIGN KEY (postId) REFERENCES Posts(postId) ON DELETE CASCADE
);
CREATE TABLE Follows(
username VARCHAR(25),
followerUsername CHAR(36),
PRIMARY KEY (username, followerUsername),
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE,
FOREIGN KEY (followerUsername) REFERENCES Users(username) ON DELETE CASCADE
);
create table Comments(
commentId CHAR(36) PRIMARY KEY,
postId CHAR(36),
username VARCHAR(25),
likeCount int DEFAULT 0,
message varchar(1000),
FOREIGN KEY (postId) REFERENCES Posts(postId),
FOREIGN KEY (username) REFERENCES Users(username),
INDEX (postId)
);
create TABLE CommentsReactionCounter(
commentId CHAR(36),
username CHAR(36),
PRIMARY KEY (commentId, username),
FOREIGN KEY (username) REFERENCES Users(username) ON DELETE CASCADE,
FOREIGN KEY (commentId) REFERENCES Comments(commentId) ON DELETE CASCADE
);
CREATE TABLE Notifications(
notificationId CHAR(36) PRIMARY KEY,
username VARCHAR(25),
notificationType VARCHAR(30),
timestamp DATE,
title VARCHAR(255),
primaryMediaUrl VARCHAR(300),
secondaryMediaUrl VARCHAR(300),
targetType VARCHAR(20),
targetResourceId VARCHAR(200),
opened bool,
expiryTime Date,
INDEX (username, timestamp),
INDEX (notificationType, targetResourceId),
FOREIGN KEY (username) REFERENCES Users(username)
);