【问题标题】:SQLite - Multiple Foreign Keys Referencing the Same ColumnSQLite - 引用同一列的多个外键
【发布时间】:2019-11-15 19:25:15
【问题描述】:

是否可以创建一个具有多个外键约束的表到另一个表的同一列?

例子:

CREATE TABLE users (
  username TEXT NOT NULL UNIQUE,
  password VARCHAR(128),
  userID INTEGER PRIMARY KEY AUTOINCREMENT
);

CREATE TABLE friends (
  friend1 INTEGER REFERENCES users(userID),
  friend1 INTEGER REFERENCES users(userID),
  PRIMARY KEY(friend1, friend2)
);

是否有可能做这样的事情(有没有办法强制执行friend1 != friend2?),还是我需要完全不同的模式?

【问题讨论】:

    标签: sql sqlite foreign-keys


    【解决方案1】:

    是的,但它们需要有不同的名称:

    CREATE TABLE friends (
      friend1 INTEGER REFERENCES users(userID),
      friend2 INTEGER REFERENCES users(userID),
      PRIMARY KEY(friend1, friend2)
    );
    

    Here 是一个 dbfiddle。

    【讨论】:

      【解决方案2】:

      您可以定义外键和CHECK constraint 以确保两列不同,如下所示:

      CREATE TABLE friends (
        friend1 INTEGER NOT NULL,
        friend2 INTEGER NOT NULL CHECK(friend2 <> friend1),
        PRIMARY KEY(friend1, friend2),
        FOREIGN KEY (friend1) REFERENCES users(userID),
        FOREIGN KEY (friend2) REFERENCES users(userID)
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 2021-05-02
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多