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:
- 测试
- 学生
- 学生注册,目的是让一个学生上一门课程。
编译第三个时出现这个错误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 TEST
和 compound 这两列上的唯一键一样:
UNIQUE(course_number,semester)
因此 table STUDENT_REG
明确引用 TEST
中的一行,您需要两列的组合,这意味着一个 2 列外键而不是两个不同的外键外键。
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:
- 测试
- 学生
- 学生注册,目的是让一个学生上一门课程。
编译第三个时出现这个错误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 TEST
和 compound 这两列上的唯一键一样:
UNIQUE(course_number,semester)
因此 table STUDENT_REG
明确引用 TEST
中的一行,您需要两列的组合,这意味着一个 2 列外键而不是两个不同的外键外键。