#sql
Вопрос:
CREATE TABLE Program(
name VARCHAR(64) NOT NULL,
abbreviation VARCHAR(16) NOT NULL,
PRIMARY KEY (name)
);
CREATE TABLE Student(
ssn INTEGER CHECK (ssn > 0) NOT NULL,
name VARCHAR(64) NOT NULL,
login VARCHAR(16) NOT NULL,
program VARCHAR(64) NOT NULL,
PRIMARY KEY (ssn),
FOREIGN KEY (program) REFERENCES Program(name),
UNIQUE (login),
UNIQUE (ssn, program)
);
CREATE TABLE Branch(
name VARCHAR(64) NOT NULL,
program VARCHAR(64) NOT NULL,
PRIMARY KEY (name),
FOREIGN KEY (program) REFERENCES Program(name)
);
CREATE TABLE BelongsTo(
student INTEGER NOT NULL,
branch VARCHAR(64) NOT NULL,
program VARCHAR(64) NOT NULL,
FOREIGN KEY (student, program) REFERENCES Student(ssn, program),
FOREIGN KEY (branch, program) REFERENCES Branch(name, program)
);
Программа, Студент, Филиал успешно созданы. Но при создании belongsTo sql бросает:
Не удалось добавить ограничение внешнего ключа. Отсутствует индекс ограничения «belongsto_ibfk_2» в указанной таблице «ветвь»
Кроме того, мне нужно разработать схему в соответствии с: http://www.cse.chalmers.se/edu/year/2018/course/TDA357/VT2018/lab/task1.txt
Пожалуйста, не стесняйтесь спрашивать меня о более подробной информации об этой проблеме, заранее спасибо.
Комментарии:
1. Я удалил несогласованные теги базы данных. Пожалуйста, отметьте базу данных, которую вы действительно используете.
2. ПК
Branch
естьname
, а неname, program
есть . Вероятно, вы можете добавить уникальный ключ, как вы также сделали дляstudent
Ответ №1:
Вам не нужен program
student
внешний ключ филиала или внешний ключ:
CREATE TABLE BelongsTo(
student INTEGER NOT NULL,
branch VARCHAR(64) NOT NULL,
program VARCHAR(64) NOT NULL,
FOREIGN KEY (student, program) REFERENCES Student(ssn),
FOREIGN KEY (branch) REFERENCES Branch(name)
);
Примечание: Определение student
внешнего ключа работает, потому что у вас есть избыточное уникальное ограничение student(ssn, program)
. Столбец ssn
уже уникален, потому что это первичный ключ, поэтому программа всегда уникальна и для каждого учащегося (потому что есть только один из них).
Комментарии:
1. пожалуйста, взгляните на ссылку , нас просят разработать схему в соответствии с приведенными инструкциями. Хотя ваш ответ кажется правильным. Спасибо.