Определение уникального ключа таблицы
Спецификация

См. спецификацию пункта «Создание таблицы».

Синтаксические правила
  1. < Имена столбцов > должны быть предварительно определены в < спецификации столбцов таблицы > и не должны повторяться.

  2. Для столбцов типа DATE, BOOLEAN, BLOB, EXTFILE атрибут UNIQUE недопустим.

  3. Нельзя создать уникальный ключ на один и тот же столбец (или с одинаковым набором столбцов).

  4. Разрешается одновременное указание ограничений целостности PRIMARY KEY и UNIQUE с одним и тем же набором столбцов (при этом создается только атрибут PRIMARY KEY), однако указание одного из этих атрибутов при существовании другого запрещено.

    Примечание

    Если ограничения PRIMARY KEY и UNIQUE заданы для одного и того же столбца, останется только PRIMARY KEY.

    Пример.
    create or replace table tst (i int, ch char(10), vch varchar(10), primary key(vch), unique(vch));
    Столбец vch будет первичным, а не уникальным ключом.
  5. Для одностолбцового уникального ключа разрешено устанавливать DEFAULT-значения.

  6. Количество уникальных ключей таблицы ограничено количеством индексов таблицы.

  7. В текущей реализации допускается суммарно максимум 250 простых (одностолбцовых) и 100 составных (многостолбцовых) индексов.

Общие правила
  1. Конструкция < уникальный ключ > определяет простой или составной уникальный ключ записей таблицы. Столбцы, входящие в состав уникального составного ключа, могут содержать NULL-значения.

  2. Значения столбцов составного уникального ключа могут дублироваться, но комбинация значений всех столбцов составного уникального ключа (без учета NULL-значений) должна быть уникальной.

    create or replace table t_pk (c_pk1 int autorowid, c_pk2 char(10), c_pk3 char(10), c_pk4 char(10), unique (c_pk2, c_pk3, c_pk4));
    
    insert into t_pk (c_pk2, c_pk3, c_pk4) values 
    ('Иванов', 'Иван', 'Иванович'),
    ('Иванов', 'Петр', 'Иванович'),
    ('Иванов', 'Иван', 'Петрович'),
    ('Иванов', 'Иван', null),
    (null, null, null),
    (null, null, null);
    
    select * from t_pk;
    
    | 1| Иванов| Иван| Иванович|
    | 2| Иванов| Петр| Иванович|
    | 3| Иванов| Иван| Петрович|
    | 4| Иванов| Иван| null    |
    | 5| null  | null| null    |
    | 6| null  | null| null    |
  3. Конструкция UNIQUE (VALUE) означает, что все явно определенные столбцы (исключая псевдостолбцы типа ROWID) таблицы являются частью составного уникального ключа. Таблица в этом случае не должна иметь столбцы типа BLOB или EXTFILE.

    Эти конструкции эквивалентны
    create or replace table test(i int, j int, unique (value));
    create or replace table test(i int, j int, unique (i, j));