If milestone_id is NULL, we shouldn't need to update it to be NULL again. This was causing us to touch almost all rows in the issues table for no good reason. Closes https://gitlab.com/gitlab-com/infrastructure/issues/3416
This adds various foreign key constraints, indexes, missing NOT NULL constraints, and changes some column types from timestamp to timestamptz. Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/31811