Вы создаете уникальный индекс, а не ограничение первичного ключа. Уникальный индекс позволяет любому ключу быть нулевым, но все же обеспечивает уникальность для каждого столбца. Синтаксис такой же, как у индекса, но вы добавляете уникальный перед:
create unique index i_table_name
on table_name ( column_names )
tablespace
storage ( ... )
< etc >
Уникальный индекс автоматически создает уникальное ограничение, лежащее в его основе. Если вам не нужен индекс, вы можете просто создать собственное ограничение:
alter table table_name
add constraint constraint_name unique (column_names)
Здесь - дополнительная информация о различных типах ограничений.