Po pierwsze, w twoim kodzie jest wiele błędów, które sprawiają, że testowanie jest nieco kłopotliwe. Po drugie, upewnij się, że używasz tego samego zestawu znaków w obu tabelach, zmieniłem message_map na utf8:
DROP TABLE message_map;
CREATE TABLE message_map (
message_from varchar(15) NOT NULL,
message_id varchar(15) NOT NULL,
message_to varchar(15) NOT NULL,
message_status bit(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE message_map
ADD PRIMARY KEY (message_from,message_id,message_to),
ADD KEY FK_ij6tystusydqijqp8lgoigo1c (message_id);
ALTER TABLE message_map
ADD CONSTRAINT FK_MSG_MAP_USER
FOREIGN KEY (message_from)
REFERENCES user (USER_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
ADD CONSTRAINT FK_MSG_MAP_USER_TO
FOREIGN KEY (message_to)
REFERENCES user (USER_ID)
ON DELETE CASCADE
ON UPDATE CASCADE;
Usunąłem demo z definicji klucza obcego.