CREATE TABLE users ( user_id SERIAL PRIMARY KEY, nick text UNIQUE NOT NULL, hash text NOT NULL, email text NOT NULL, created_on timestamp NOT NULL DEFAULT now(), is_admin boolean NOT NULL DEFAULT false, avatar text NOT NULL DEFAULT '', contact text NOT NULL DEFAULT '', bio text NOT NULL DEFAULT '' ); CREATE TABLE rooms ( room_id SERIAL PRIMARY KEY, key text UNIQUE NOT NULL, name text NOT NULL, description text NOT NULL, created_on timestamp NOT NULL DEFAULT now(), admin_only bool NOT NULL DEFAULT false ); CREATE TABLE messages ( message_id SERIAL PRIMARY KEY, user_id integer NOT NULL REFERENCES users, room_id integer NOT NULL REFERENCES rooms, content text NOT NULL, created_on timestamp NOT NULL DEFAULT now(), is_image bool NOT NULL ); -- Queries to support: -- 1) What are my favorite images? (By room, time, or author) -- 2) Who favorited me? (By user, image, or time) -- 3) What are the most favorited images? (By room, time, or author) CREATE TABLE favorites ( favorite_id SERIAL PRIMARY KEY, src_user_id integer NOT NULL REFERENCES users, message_id integer NOT NULL REFERENCES messages, created_on timestamp NOT NULL DEFAULT now() ); CREATE INDEX user_id_idx ON messages (user_id); CREATE INDEX room_id_idx ON messages (room_id); CREATE INDEX created_on_idx ON messages (created_on); CREATE INDEX src_user_id_idx ON favorites (src_user_id); CREATE INDEX favorites_created_on_idx on favorites (created_on); INSERT INTO rooms (key, name, description, admin_only) VALUES ('RoomA', 'Room A', 'Hangout', false); INSERT INTO rooms (key, name, description, admin_only) VALUES ('VIP', 'The VIP Room', 'Command Post', true);