【问题标题】:Combination of two columns unique constraint两列唯一约束的组合
【发布时间】:2012-05-17 02:26:54
【问题描述】:

我创建了表 t1t2,它连接表 t1t2,如下所示:

CREATE TABLE t1t2(
id integer primary key,
t1_id integer,
t2_id integer,
foreign key(t1_id) references t1(id),
foreign key(t2_id) references t2(id));

是否可以定义一个仅启用元组(t1_id,t2_id)的唯一值的约束(限制)?或者我应该在应用程序中检查这个?

【问题讨论】:

    标签: sqlite constraints unique-constraint


    【解决方案1】:

    您可以使用这些选项创建您的唯一主索引以保留您的主键和唯一约束SQL Lite New Index option

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    【解决方案2】:

    您可以将唯一约束添加到您的 create table 语句。 这不必是主键。

    UNIQUE(t1_id, t2_id),
    

    【讨论】:

      【解决方案3】:
       CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id)
      

      您可能需要在两列中的每一列的声明中添加 NOT NULL。

      或者,您可以选择放弃主键列(如果您使用它的只是唯一性)并在 t1_idt2_id 的组合上创建主键:

      CREATE TABLE t1t2(
      t1_id integer NOT NULL,
      t2_id integer NOT NULL,
      PRIMARY KEY (t1_id, t2_id),
      foreign key(t1_id) references t1(id),
      foreign key(t2_id) references t2(id));
      

      PRIMARY KEY 是 UNIQUE 索引的一种特殊情况。使用复合 PRIMARY KEY 可为您节省一列和一个索引,但要求您的应用程序同时知道 t1_idt2_id 才能从表中检索单行。

      【讨论】:

      • 这不仅是为了唯一性(我需要 t1t2.id 列),而且我对替代方法感兴趣。你能展示一下桌子吗?我会等待一段时间才能确定这是正确的,谢谢。
      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 2017-04-23
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      相关资源
      最近更新 更多