Первичный ключ не требуется как таковой. Но концептуально он выполняет другую функцию, чем уникальный индекс.
Первичный ключ идентифицирует строку. Уникальный индекс просто гарантирует отсутствие дубликатов. SQL Engine может оптимизировать запросы на основе этой информации. Также по умолчанию многие RDMS создают кластеризованный индекс на основе первичного ключа.
У вас может быть только один первичный ключ, а столбцы не могут допускать значения NULL. У вас может быть несколько уникальных индексов, и они могут включать в себя столбцы, допускающие значение NULL. уникальный индекс.
Это своего рода разрыв между логическим моделированием базы данных и физическим проектированием / реализацией базы данных - логически сущность (таблица) должна иметь первичный ключ, который однозначно идентифицирует каждый экземпляр (строку). На самом деле вы можете делать со своей системой баз данных все, что хотите.