У вас есть несколько вариантов, чтобы гарантировать, что уникальный набор значений будет вставлен в вашу таблицу. Давайте рассмотрим 1) передачу ответственности ядру базы данных или 2) ответственность вашего приложения.
Возложение ответственности на ядро базы данных может повлечь за собой использование уникального индекса для вашей таблицы. См. Синтаксис MySql Create Index . Обратите внимание, что это решение может привести к возникновению исключения в случае вставки дублирующего значения. Поскольку вы определили, что я определяю как три столбца для определения уникальности (строка темы, тело и адрес отправителя), вы создадите индекс, включающий все три столбца. Прошло много времени с тех пор, как я работал с Rails, поэтому вы можете проверить количество вставленных записей.
Если вы хотите перенести эту ответственность на свое прикладное программное обеспечение, вам придется бороться с потенциальными конфликтами при вставке данных. То есть, предположим, что у вас есть два пользователя, создающих электронную почту одновременно (просто работайте со мной здесь), имеющие одинаковую строку темы, текст и адрес отправки. Если ваш код просто запросит какие-либо записи, состоящие из текста (идентичного для обоих пользователей в этом примере), оба вернутся без найденных записей и будут продолжать вставлять свои электронные письма, которые теперь нарушают вашу предпосылку. Таким образом, вы можете решить эту проблему, возможно, с помощью блокировки таблицы или с помощью другого поля синхронизации в базе данных, чтобы избежать появления дубликатов. Этот последний подход может состоять из другой таблицы с одним полем, указывающим, вставляет ли кто-то запись или нет, после завершения она обновляет эту запись, чтобы заявить, что она завершена, и тогда другие могут продолжить.
Пока вы можете провести отдельное архитектурное обсуждение значения каждой альтернативы, я оставлю это в отдельном посте. Надеюсь, этого будет достаточно, чтобы ответить на ваш вопрос.