2015-10-05 4 views
0

При попытке создать внешний ключ MovieName в таблице jobinfo я получаю error code : 1215 Cannot add foreign key constraintКод ошибки 1215: Ошибка внешнего ключа: Почему я получаю это?

родительской таблицы (contentinfo)

CREATE TABLE `contentinfo` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Movie ID', 
`Name` varchar(25) DEFAULT NULL, 
`Original_Language` varchar(25) DEFAULT NULL, 
`Dubbed_Language` varchar(25) DEFAULT NULL, 
`InputType` varchar(25) DEFAULT NULL, 
`CreationTime` date DEFAULT NULL, 
`VidEncodingTemplatePath` varchar(255) DEFAULT NULL, 
`AudEncodingTemplatePath` varchar(255) DEFAULT NULL, 
`CCEncodingTemplatePath` varchar(255) DEFAULT NULL, 
`ContentType` varchar(10) DEFAULT NULL, 
`RefMovieID` int(11) DEFAULT NULL COMMENT 'For dubbed movie only', 
`NumberOfPartsInMovie` varchar(255) DEFAULT NULL, 
`Multilingual` tinyint(1) DEFAULT NULL, 
PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=11021 DEFAULT CHARSET=latin1 

Ошибка выкинут, когда я пытаюсь сделать таблицу jobinfo где существует 2 внешних ключей :

create table jobinfo(JobID int, ContainerID int, 
    MovieName varchar(25), FileName varchar(25), MediaType varchar(25), 
    ContentType varchar(25), ReelIndex int, 
    ReelType varchar(25), ProcessingUnitID int, 
    VidEncodingTemplate varchar(255), AudEncodingTemplate varchar(255), 
    CCEncodingTemplate varchar(255), StartIndex int, 
    EndIndex int, SplitIndex int, Duration int,FileSize int, Progress int, 
    JStatus varchar(25), QCStatus varchar(25), 
    QCComments varchar(255), ProcessStartTime datetime, ProcessEndTime datetime, 
    ProcessingStatus varchar(25), PackagingStatus varchar(30), 
    primary key(JobID), 
    foreign key (ContainerID) references contentinfo(id), 
    foreign key (MovieName) references contentinfo(Name)); 

ошибка выкинут из-за заявления, foreign key (MovieName) references contentinfo(Name) потому что, когда это утверждение я s удаленная команда работает нормально. Почему я получаю эту ошибку?

ответ

1

У вас не может быть 2 внешних ключа в той же таблице, что и внешний ключ, который определяет уникальную взаимосвязь между двумя таблицами. Кроме того, внешний ключ должен однозначно идентифицировать строку в другой таблице и, как таковой, всегда ссылаться на уникальное поле, будь то через уникальное ограничение или первичный ключ (что является неявным уникальным ограничением).

В вашем конкретном случае: что, если у вас было 2 фильма с идентификаторами 64 и 684, оба под названием «Бегущий человек», но один из from 1987 и one from 1963, ваша база данных была бы по сути коррумпирована из-за вашего определения.

Смежные вопросы