CREATE TABLE votes ( id SERIAL PRIMARY KEY, post_id INT REFERENCES posts(id) ON DELETE CASCADE, comment_id INT REFERENCES comments(id) ON DELETE CASCADE, user_id INT NOT NULL, inc INT NOT NULL CHECK (inc in (-1, 1)), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT post_comment_user_pkey UNIQUE NULLS NOT DISTINCT (post_id, comment_id, user_id), CHECK ((post_id IS NOT NULL AND comment_id IS NULL) OR (comment_id IS NOT NULL AND post_id IS NULL)) ); CREATE TRIGGER set_timestamp BEFORE UPDATE ON votes FOR EACH ROW EXECUTE PROCEDURE trigger_set_timestamp(); ---- create above / drop below ---- DROP TABLE votes;