代码之家  ›  专栏  ›  技术社区  ›  Alfred Balle

Postgresql,对唯一约束的引用

  •  0
  • Alfred Balle  · 技术社区  · 6 年前

    我运行的是PostgreSQL 9.4,如下表所示:

    CREATE TABLE user_cars (
        user_id SERIAL REFERENCES users (id) ON DELETE CASCADE,
        car CHARACTER VARYING(255) NOT NULL,
        CONSTRAINT test UNIQUE (user_id, car)
    );
    

    该表允许用户拥有多辆车,但只使用一次车名。但其他用户可能有相同的汽车名称。

    我想要另一个引用唯一约束的表 test ,并尝试了以下内容:

    CREATE TABLE mappings (
        other_id CHARACTER(9) REFERENCES other (id) ON DELETE CASCADE,
        user_cars  REFERENCES user_cards (test) ON DELETE CASCADE
    );
    

    但这“显然”是失败的。我想确认一下 other_id 仅对 user_car 进入

    所以要解释一下,我怎样才能在表中 mappings 参考 测验 来自表 user_cars 。 这是当前失败的原因:

        user_cars  REFERENCES user_cards (test) ON DELETE CASCADE
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    如果可以避免,请不要使用复合外键引用。只需将唯一id添加到表中:

    CREATE TABLE user_cars (
        user_car_id serial primary key,
        user_id int REFERENCES users (id) ON DELETE CASCADE,
        car CHARACTER VARYING(255) NOT NULL,
        CONSTRAINT test UNIQUE (user_id, car)
    );
    

    那么映射就是:

    CREATE TABLE mappings (
        mapping_id serial primary key,
        user_car_id int references user_cars(user_car_id) on delete cascade,
        other_id CHARACTER(9) REFERENCES other (id) ON DELETE CASCADE,
    );
    
        2
  •  0
  •   Rahul Jain    6 年前

    如果 car 应唯一,添加 UNIQUE 仅约束于 汽车 柱 如果 user 应唯一,添加 唯一的 仅约束于 使用者

    如果您添加 唯一的 约束组合,则表中会有重复的值。

    更新时间: 可以在单个列上添加多个约束。具有 Foreign key 添加 唯一的 约束以及on user_cars 中的列 mapping 桌子