Нет уникального ограничения, соответствующего заданным ключам для ссылочной таблицы в 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));

У меня есть три таблицы:

  1. Тест
  2. Студент
  3. Студенческая регистрация, это цель студента на курс.

Я получаю эту ошибку, когда компилирую третью таблицу:

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

Я понятия не имею, почему, любая помощь будет высоко оценена.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
342
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужен составной внешний ключ, а не два разных ключа:

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)
);

Зачем вам это нужно, так это потому, что таблица TEST as имеет составной уникальный ключ в этих двух столбцах:

UNIQUE(course_number,semester)

Таким образом, чтобы таблица STUDENT_REG однозначно ссылалась на строку в TEST, вам нужна комбинация обоих столбцов, что означает внешний ключ с двумя столбцами, а не два разных внешних ключа.

Другие вопросы по теме