A comment on the DDL
Despite this using MySQL (which would never be my first choice), the schema seems pretty sane; good job. This surprised me:
removed_date date default null
but then, reading the documentation, MySQL does a nonsensical thing by default and uses the "zero" value for a date as its default; so what you've done is correct.
For these ...