Użyłbym tabeli przeglądowej dla wiadomości, która przechowywałaby, kto ma prawa do przeglądania tej wiadomości
table->message | table->messageUsers
id->0, message->'hi', user_id->1 user_id->1, message_id->0
user_id->2, message_id->0
W ten sposób, jeśli użytkownik usunie swoją wiadomość, w rzeczywistości usuwa tylko swój związek z wiadomością, a nie samą wiadomość. po prostu usuwasz je z tabeli messageUsers. lub ustaw aktywne pole na 1 lub 0.