-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
142 lines (125 loc) · 3.86 KB
/
schema.sql
File metadata and controls
142 lines (125 loc) · 3.86 KB
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
USE master;
GO
ALTER DATABASE social_media SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE social_media;
GO
CREATE DATABASE social_media;
USE social_media;
GO
CREATE TABLE users (
user_id INT IDENTITY(1,1) PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
profile_photo_url VARCHAR(255) DEFAULT 'https://th.bing.com/th/id/R.6b635dff497042ec0b6f3ea47dc47170?rik=wsuwv2QLQfQv6g&pid=ImgRaw&r=0&sres=1&sresct=1',
bio VARCHAR(255),
created_at DATETIME DEFAULT GETDATE(),
);
ALTER TABLE users
ADD email VARCHAR(30) NOT NULL;
CREATE TABLE photos (
photo_id INT IDENTITY(1,1) PRIMARY KEY,
photo_url VARCHAR(255) NOT NULL UNIQUE,
post_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
size FLOAT CHECK (size<5)
);
CREATE TABLE videos (
video_id INT IDENTITY(1,1) PRIMARY KEY,
video_url VARCHAR(255) NOT NULL UNIQUE,
post_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
size FLOAT CHECK (size<10)
);
CREATE TABLE post (
post_id INT IDENTITY(1,1) PRIMARY KEY,
photo_id INT,
video_id INT,
user_id INT NOT NULL,
caption VARCHAR(200) NULL,
location VARCHAR(50) NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(user_id) REFERENCES users(user_id),
FOREIGN KEY(photo_id) REFERENCES photos(photo_id),
FOREIGN KEY(video_id) REFERENCES videos(video_id)
);
CREATE TABLE comments (
comment_id INT IDENTITY(1,1) PRIMARY KEY,
comment_text VARCHAR(255) NOT NULL,
post_id INT NOT NULL,
user_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(post_id) REFERENCES post(post_id),
FOREIGN KEY(user_id) REFERENCES users(user_id)
);
CREATE TABLE post_likes (
user_id INT NOT NULL,
post_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(user_id) REFERENCES users(user_id),
FOREIGN KEY(post_id) REFERENCES post(post_id),
PRIMARY KEY(user_id, post_id)
);
CREATE TABLE comment_likes (
user_id INT NOT NULL,
comment_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(user_id) REFERENCES users(user_id),
FOREIGN KEY(comment_id) REFERENCES comments(comment_id),
PRIMARY KEY(user_id, comment_id)
);
CREATE TABLE follows (
follower_id INT NOT NULL,
followee_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(follower_id) REFERENCES users(user_id),
FOREIGN KEY(followee_id) REFERENCES users(user_id),
PRIMARY KEY(follower_id, followee_id)
);
CREATE TABLE hashtags (
hashtag_id INT IDENTITY(1,1) PRIMARY KEY,
hashtag_name VARCHAR(255) UNIQUE,
created_at DATETIME DEFAULT GETDATE()
);
CREATE TABLE hashtag_follow (
user_id INT NOT NULL,
hashtag_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(user_id) REFERENCES users(user_id),
FOREIGN KEY(hashtag_id) REFERENCES hashtags(hashtag_id),
PRIMARY KEY(user_id, hashtag_id)
);
CREATE TABLE post_tags (
post_id INT NOT NULL,
hashtag_id INT NOT NULL,
FOREIGN KEY(post_id) REFERENCES post(post_id),
FOREIGN KEY(hashtag_id) REFERENCES hashtags(hashtag_id),
PRIMARY KEY(post_id, hashtag_id)
);
CREATE TABLE bookmarks (
post_id INT NOT NULL,
user_id INT NOT NULL,
created_at DATETIME DEFAULT GETDATE(),
FOREIGN KEY(post_id) REFERENCES post(post_id),
FOREIGN KEY(user_id) REFERENCES users(user_id),
PRIMARY KEY(user_id, post_id)
);
CREATE TABLE log_in (
log_in_id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
user_id INT NOT NULL,
ip VARCHAR(50) NOT NULL,
log_in_time DATETIME NOT NULL DEFAULT GETDATE(),
FOREIGN KEY(user_id) REFERENCES users(user_id)
);
select * from users;
select * from photos;
select * from videos;
select * from comments;
select * from comment_likes;
select * from post;
select * from post_likes;
select * from post_tags;
select * from hashtags;
select * from hashtag_follow;
select * from log_in;
select * from bookmarks;
select * from follows;