【问题标题】:ERROR: there is no unique constraint matching given keys for referenced table "inscription"错误:没有唯一约束匹配引用表“inscription”的给定键
【发布时间】:2021-06-24 23:56:53
【问题描述】:

这是我在 Stackoverflow 上的第一个问题,我希望你能帮助我,这将是非常好的 :)

我正在尝试创建一些表,但出现此错误:错误:没有唯一约束匹配引用表“inscription”的给定键

这是我的查询:

CREATE TABLE ue 
(
    id_ue varchar(30) primary key,
    designation varchar(50) NOT NULL,
    ects int NOT NULL
);

CREATE TABLE auditeur 
(
    id_auditeur int primary key,
    nom varchar(30) NOT NULL,
    prenom varchar(30) NOT NULL,
    date_nais varchar(30) NOT NULL
);

CREATE TABLE tarif 
(
    id_tarif int primary key,
    tarif varchar(30) NOT NULL
);

CREATE TABLE inscription 
(
    annee int,
    id_auditeur int,
    id_tarif int,
    PRIMARY KEY (annee, id_auditeur),
    FOREIGN KEY (id_auditeur) REFERENCES auditeur (id_auditeur),
    FOREIGN KEY (id_tarif) REFERENCES tarif (id_tarif)
);

CREATE TABLE reglement 
(
    id_auditeur int,
    annee int,
    num_ordre int,
    montant int NOT NULL,
    primary key (id_auditeur, annee, num_ordre),
    FOREIGN KEY (id_auditeur) REFERENCES auditeur (id_auditeur),
    FOREIGN KEY (annee) REFERENCES inscription (annee)
);

CREATE TABLE inscrire 
(
    id_auditeur int,
    annee int,
    id_ue varchar(30),
    note1 int,
    note2 int,
    primary key (id_auditeur, annee, id_ue),
    FOREIGN KEY (id_auditeur) REFERENCES auditeur (id_auditeur),
    FOREIGN KEY (annee) REFERENCES inscription (annee),
    FOREIGN KEY (id_ue) REFERENCES ue (id_ue)
);

应该遵循这个逻辑模型:

Logic model

这也是数据库的关系模式:

Relational schema

我尝试过的:如果我执行查询直到创建铭文结束它可以工作,但是当我尝试执行最后两个创建时出现问题,因为它们引用了 annee。

我无法添加唯一约束,因为它是针对家庭作业的,我必须插入带有日期 (annee) 的脚本并且有不同的日期 (annee)。如果我这样做,PostgreSQL 会告诉我有问题约束是唯一的。通常如果 annee 是主键,就不需要添加唯一约束了吧?

我真的迷路了..非常感谢帮助我的人:D

【问题讨论】:

    标签: database postgresql reference constraints unique-constraint


    【解决方案1】:

    问题是这样的:

    FOREIGN KEY (annee) REFERENCES inscription (annee)

    inscription 表中,您有:

    PRIMARY KEY (annee, id_auditeur)

    这符合唯一约束条件,但您的 FOREIGN KEY REFERENCE 仅尝试匹配 inscription PRIMARY KEY 的一半。要使其工作,请尝试:

    更新

    FOREIGN KEY (annee, id_auditer) REFERENCES inscription (annee, id_auditer)

    那么你就可以摆脱:

    FOREIGN KEY (annee) REFERENCES inscription (annee)

    【讨论】:

    • 我用你告诉我的改变了它:CREATE TABLE reglement ( id_auditeur int, annee int, num_ordre int, montant int NOT NULL, 主键 (id_auditeur, annee, num_ordre), FOREIGN KEY ( id_auditeur) REFERENCES auditeur (id_auditeur), FOREIGN KEY (annee) REFERENCES inscription (annee, id_auditeur) );它不起作用,这次我得到这个错误:“错误:外键的引用和引用列数不同意 SQL 状态:42830”
    • 我的错误,请参阅更新后的答案。
    • 成功了!非常感谢,我不确定我的老师会接受答案,因为她真的希望我们以某种方式去做,我很确定她会有自己的方式,但现在它有效!真的非常感谢,它帮助了我很多,最重要的是感谢你,我今天学到了一些新东西,我以后不会犯同样的错误! :)
    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2012-08-11
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多