ERROR: there is no unique constraint matching given keys for referenced table "inscription"

ERROR: there is no unique constraint matching given keys for referenced table "inscription"

这是我关于 Whosebug 的第一个问题,我希望你能帮助我,这真的很好:)

我正在尝试创建一些 table,但出现此错误:错误:没有唯一约束匹配给定键以供参考 table“题词”

这是我的查询:

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

问题是这样的:

FOREIGN KEY (annee) REFERENCES inscription (annee)

inscription table 你有:

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)