Создание таблицы с 2 первичными ключами и двумя внешними ключами, ссылающимися на 2 разные таблицы с одинаковым именем ограничения - PullRequest
0 голосов
/ 24 января 2020

Для этой конкретной схемы:

This is the schema

Я создал таблицы студентов и преподавателей кафедры, и сейчас возникает проблема с созданием таблицы оценок.

Указано, что есть 2 первичных ключа и 2 внешних ключа, но, как видно из заголовка, создание 2 внешних ключей, ссылающихся на 2 разные таблицы с одинаковым именем ограничения, кажется невозможным, как я понимаю, с помощью поиска по inte rnet и читая несколько веток здесь.

Есть ли способ сделать это? Я хочу, чтобы оба имени ограничения внешнего ключа были "fk".

Этот код появляется с ошибкой идентификатора:

create table mark(
    value number,
    subject_id number,
    student_id number,
    constraint pk primary key(subject_id,student_id),
    constraint fk foreign key(subject_id,student_id) references subject(subject_id,student_id));

Но даже если я создаю 2 ограничения с другим именем теста случаи терпят неудачу. Есть ли решение?

Это стол отдела

create table department(
    department_id number(2),
    department_name varchar(30),
    department_block_number number,
    constraint PK primary key(department_id));

Это стол ученика

create table student(
        student_id number,
        student_name varchar(30),
        address varchar(40),
        city varchar(30),
        department_id number,
        constraint pk primary key(student_id),
        constraint fk foreign key(department_id) references department(department_id));

Это стол персонала

create table staff(
    staff_id number,
    staff_name varchar(30),
    department_id number,
    constraint pk primary key(staff_id),
    constraint fk foreign key(department_id) references department(department_id));

1 Ответ

1 голос
/ 24 января 2020

У вас есть составной первичный ключ - в более чем одном столбце - это нормально; но у вас не может быть составного внешнего ключа, поскольку в таблице учеников нет столбца subject_id - следовательно, он дает вам ошибку недопустимого идентификатора.

Вам нужно two foreign ключи, что-то вроде:

create table mark(
    value number,
    subject_id number,
    student_id number,
    constraint mark_pk primary key(subject_id,student_id),
    constraint mark_fk_subject foreign key(subject_id) references subject(subject_id),
    constraint mark_fk_student foreign key(student_id) references student(student_id));

Имена ограничений должны быть уникальными как внутри, так и между таблицами в одной и той же схеме, и в любом случае было бы целесообразно что-то более описательное, чем 'pk' или 'fk'.

дБ <> скрипка

...