Уникальная комбинация полей в SQLite?

Я пытаюсь заполнить новую базу данных SQLite строками на основе набора данных, но у меня возникают проблемы с предотвращением дублирования строк. Я мог бы сделать это на Python, но, безусловно, в SQLite должен быть вариант дизайна, чтобы справиться с этим.

Мне нужно, чтобы каждая строка существовала только для уникальной комбинации трех текстовых полей. Если я сделаю каждое текстовое поле ограниченным УНИКАЛЬНЫМ, то все три должны быть уникальными. Но вместо этого я хотел бы уникальную комбинацию трех строк.

Другими словами, все эти записи должны существовать: (a, a, a) (a, a, b) (a, b, b) (b, b, b)

Если я сделаю все три поля УНИКАЛЬНЫМИ и вставлю эти строки, будут вставлены только (a,a,a) и (b,b,b). Я мог бы объединить поля 1-3 в Python и использовать их в качестве первичного ключа, но это кажется дополнительной работой.


person Thomas    schedule 13.09.2011    source источник


Ответы (2)


CREATE TABLE (col1 typ
              , col2 typ
              , col3 typ
              , CONSTRAINT unq UNIQUE (col1, col2, col3))

http://www.sqlite.org/lang_createtable.html

person Cade Roux    schedule 13.09.2011

Если три столбца действительно являются первичным ключом, вы можете создать составной первичный ключ:

create table t (
    a text not null,
    b text not null,
    c text not null,
    -- and whatever other columns you have...
    primary key (a, b, c)
)

Если какой-либо из ваших трех столбцов может быть NULL, тогда вместо этого вы захотите получить уникальное ограничение Cade.

person mu is too short    schedule 13.09.2011