CREATE DATABASE prod; USE prod; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL ); CREATE TABLE posts ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL DEFAULT 'asdf', body TEXT NOT NULL, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE comments ( id INT AUTO_INCREMENT PRIMARY KEY, body TEXT NOT NULL, post_id INT, FOREIGN KEY (post_id) REFERENCES posts(id) ); CREATE TABLE tags ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE post_tags ( post_id INT, tag_id INT, PRIMARY KEY (post_id, tag_id), FOREIGN KEY (post_id) REFERENCES posts(id), FOREIGN KEY (tag_id) REFERENCES tags(id) ); CREATE TABLE likes ( user_id INT, post_id INT, PRIMARY KEY (user_id, post_id), FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (post_id) REFERENCES posts(id) ); CREATE TABLE followers ( follower_id INT, followee_id INT, PRIMARY KEY (follower_id, followee_id), FOREIGN KEY (follower_id) REFERENCES users(id), FOREIGN KEY (followee_id) REFERENCES users(id) ); CREATE TABLE notifications ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, message TEXT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, sender_id INT, receiver_id INT, body TEXT NOT NULL, FOREIGN KEY (sender_id) REFERENCES users(id), FOREIGN KEY (receiver_id) REFERENCES users(id) ); CREATE TABLE sessions ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, token VARCHAR(255) NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE settings ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, theme VARCHAR(255) NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE reports ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, post_id INT, reason TEXT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (post_id) REFERENCES posts(id) ); CREATE TABLE blocks ( blocker_id INT, blockee_id INT, PRIMARY KEY (blocker_id, blockee_id), FOREIGN KEY (blocker_id) REFERENCES users(id), FOREIGN KEY (blockee_id) REFERENCES users(id) ); CREATE TABLE mutes ( muter_id INT, mutee_id INT, PRIMARY KEY (muter_id, mutee_id), FOREIGN KEY (muter_id) REFERENCES users(id), FOREIGN KEY (mutee_id) REFERENCES users(id) ); CREATE INDEX idx_user_email ON users (email); CREATE INDEX idx_user_name_email ON users (name, email); CREATE INDEX idx_post_user_id ON posts (user_id); CREATE INDEX idx_comment_post_id ON comments (post_id); CREATE INDEX idx_post_tag_post_id ON post_tags (post_id); CREATE INDEX idx_post_tag_tag_id ON post_tags (tag_id); CREATE INDEX idx_like_user_id ON likes (user_id); CREATE INDEX idx_like_post_id ON likes (post_id); CREATE INDEX idx_follower_follower_id ON followers (follower_id); CREATE TABLE admins ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL ); CREATE TABLE reports_fk_test ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, post_id INT, reason TEXT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (post_id) REFERENCES posts(id) );