Позвольте мне перефразировать вопрос. Интересный момент не в том, находится ли таблица в 1NF или нет. Интересным моментом является наличие естественных данных в 1NF.
Если вы удалите столбец идентификатора, а затем уничтожите дубликаты, вы выполнили то, что называется «проекцией» в реляционном языке. Результат в 1НФ по определению.
Если вы удалите столбец идентификатора, но не удалите дубликаты, вы получите набор строк, а не набор. Если приложение каким-то образом не препятствует попаданию дубликатов в эту сумку, значит, сумка не в 1NF.
Мой ответ сводится к тому же, что и у Джонатана и Тома. В итоге вы переместили защиту целостности данных обратно из СУБД в приложение. Прикладные программисты, как правило, делают это, в этом случае и во многих других. Если они правильно пишут свои приложения, то это вопрос предпочтений. Если они этого не делают, то они возвращались к уровню техники до введения баз данных.