SQLite中字段的独特组合?

时间:2011-09-13 19:40:53

标签: python sqlite database-design unique-constraint

我正在尝试使用基于一组数据的行填充新的SQLite数据库,但是我在避免重复行方面遇到了麻烦。我可以在Python中实现这一点,但在SQLite中必定有一个设计选项来处理这个问题。

我需要每行只存在三个文本字段的唯一组合。如果我使用UNIQUE限制每个文本字段,则所有三个文本字段必须是唯一的。但我宁愿喜欢这三个字符串的独特组合。

换句话说,这些记录都应该存在: (a,a,a) (a,a,b) (a,b,b) (b,b,b)

如果我将所有三个字段设为UNIQUE并插入这些行,则仅插入(a,a,a)和(b,b,b)。我可以在Python中连接字段1-3并将其用作主键,但它似乎是额外的工作。

2 个答案:

答案 0 :(得分:22)

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

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

答案 1 :(得分:3)

如果三列确实是主键,那么您可以创建一个复合主键:

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的唯一约束。