В конце надо данные без дублей:)
А чем варианты 1 и 2 хуже? Ну кроме очевидных:
В первой можно выбрать перезаписывать при коллизии или нет, плюс некрасивый код который пишется под конкретную базу
Во втором - ловить эксепшены о юнике и после этого не пытаться/пытаться записать данные