Что бы исключить заливку дубликатов что лучше сделать:
1) создать колонку с Hash и навесить на неё уникальный индекс. Создать триггер before insert ..., который делает sha512 из добавляемых полей и заносит его в поле Hash.
2) создать просто уникальный индекс на все добавляемые поля.
Скорость вставки не важна.
Мне интереснее сильно ли разбухнет база от уникального индекса по куче полей?
для начала нужно определиться, как определяется у вас дупликат
Так как у вызовов нет уникальных id, то дубликатом считаются записи с одинаковыми полями date, number_a, number_b, duration. Уникальный индекс по нескольким полям вроде как логически правильный путь, но в итоге получается индекс, который покрывает всю таблицу
если поля всего 4, то можно сделать на них констрейнт и не заморачиватсья
Тут с самой моделью что-то не так, мне кажется — странно / непонятно, почему это считается дубликатом (почему в норме не может быть двух таких записей?).
Это база строгой отчётности. Биллинг по сути.
Это не отвечает на мой вопрос. Почему в ту же дату не может быть двух вызовов A -> B одинаковой длительности?
невозможно установить два соединения в одно и то же время. хотя бы микросекунда, но будет разница. Видимо под date понималась не столько дата, сколько datetime)
Если так, то duration в ключе не место. ;)
ну да, оно избыточно получается, для уникальности достаточно и трех полей
Сначала разберитесь, откуда у вас дубли. Ни индекс, ни хэш это за вас не сделают.
Обсуждают сегодня