SQL 中引用的 table 的给定键没有唯一约束匹配

there is no unique constraint matching given keys for referenced table in SQL

CREATE TABLE TEST( course_number INTEGER NOT NULL,
                    semester INTEGER NOT NULL,
                    time INTEGER NOT NULL,
                    room INTEGER NOT NULL,
                    day INTEGER NOT NULL,
                    credit_points INTEGER NOT NULL,
                    UNIQUE(course_number,semester),
                    CHECK(course_number>0),
                    CHECK(credit_points>0),
                    CHECK(room>0));
                    
CREATE TABLE STUDENT (student_id INTEGER NOT NULL,
                    student_name text NOT NULL,
                    faculity text NOT NULL,
                    credit_points INTEGER NOT NULL,
                    UNIQUE(student_id),
                    CHECK(student_id>0),
                    CHECK(credit_points>=0));
                    
CREATE TABLE STUDENT_REG
                    (student_id INTEGER NOT NULL,
                    course_number INTEGER NOT NULL,
                    semester INTEGER NOT NULL, 
                    FOREIGN KEY (student_id) REFERENCES STUDENT(student_id),
                    FOREIGN KEY (course_number) REFERENCES TEST(course_number),
                    FOREIGN KEY (semester) REFERENCES TEST(semester));

我有三个table:

  1. 测试
  2. 学生
  3. 学生注册,目的是让一个学生上一门课程。

编译第三个时出现这个错误table:

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

我不知道为什么,任何帮助将不胜感激。

您需要一个 复合 外键而不是两个不同的键:

CREATE TABLE STUDENT_REG (
    student_id INTEGER NOT NULL,
    course_number INTEGER NOT NULL,
    semester INTEGER NOT NULL, 
    FOREIGN KEY (student_id) REFERENCES STUDENT(student_id),
    FOREIGN KEY (course_number semester) REFERENCES TEST(course_number, semester)
);

为什么需要它是因为 table TESTcompound 这两列上的唯一键一样:

UNIQUE(course_number,semester)

因此 table STUDENT_REG 明确引用 TEST 中的一行,您需要两列的组合,这意味着一个 2 列外键而不是两个不同的外键外键。