Как-то сталкивался с похожей задачей, при отправке смс сообщений, нужно было проверять что такое сообщение уже было отправлено и не стоит отправлять его заново. Тогда делал CRC (пользователь, сообщение, что-то еще). Для моей задачи этого хватило, в моем случае было не фатально если пользователь вдруг еще раз получит похожее сообщение.
Если же повторение записей фатально, то только уникальный индекс по полям даст 100% защиту, но будет очень тяжелым. Или же отдельное поле с sha1 хешем, вроде в sha1 вероятность коллизии крайне мала
https://crypto.stackexchange.com/questions/2583/is...