Вы не создали «таблицу со столбцом с двумя первичными ключами», вы создали одну таблицу с одним составным первичным ключом.
И то, что вы делаете, действительно возможно, но не вкак вы это делаете.
Проблема в том, что у вас может быть две Parent
строки с одинаковыми Mother
и разными Father
.Но для связи с внешним ключом на Child_Mother
потребуется один экземпляр Mother
в таблице Parent
, в противном случае он не будет знать, к какой строке он относится.
Вы можетелибо в дочернем элементе есть объединенный столбец, который ссылается на объединенный первичный ключ, либо он может разделять строки Parent
.
Таким образом, я имею в виду, что в родительскую таблицу обычно не помещаются два человека.в одной строке обычно на одного человека приходится по одной строке, и ребенок просто ссылается на две отдельные строки в таблице Parent
, одну для матери и одну для отца.
В терминахиз ваших фактических таблиц:
create table Subject(
Subject_ID varchar(50) NOT NULL,
Subject_Description varchar(50) NOT NULL,
PRIMARY KEY(Subject_ID, Subject_Description),
Subject_SID int references Student(Student_ID),
Unit varchar(50) NOT NULL
)
Это на самом деле не нормализовано, поскольку описание субъекта почти неизменно, зависит от идентификатора субъекта.Я думаю, что первичный ключ, вероятно, должен быть только на предмете ID.Конечно, есть еще индекс в описании темы, но он не должен быть частью первичного ключа.
Я все еще не уверен, что вы понимаете, о чем я говорю, поэтому я 'попробую уточнить.Строка:
PRIMARY KEY(Subject_ID, Subject_Description)
делает не двумя первичными ключами, она составляет один первичный ключ, состоящий из двух столбцов (идентификатор и описание).По этой причине возможно иметь две строки с одинаковым идентификатором при условии, что описание отличается.
Таким образом, ссылка внешнего ключа на столбец идентификатора невозможна .Допустим, у вас было две строки:
ID Subject Other
-- ------- ---------
7 Maths blah blah
7 Physics yada yada
, а затем попытался добавить в таблицу расписаний строку с Schedule_SID
, установленным на 7. Это задохнется, потому что СУБД не будет знать , которая 7, на который вы ссылаетесь.Так что он даже не должен позволять вам устанавливать это ограничение внешнего ключа, потому что целевой столбец не уникален.