2014-01-24 2 views
0

Я пытаюсь создать связь между полем 'fldEmpID' в моей таблице Employees с внешним составным ключом, который состоит из fldEmpID и fldEventID, но не позволяет установить отношение к быть создан. Я не понимаю, почему это отношение не будет работать, мне удалось создать аналогичную связь между fldEventID от события к составному ключу. Оба поля fldEmpID в каждой таблице являются int (11). Что я могу сделать, чтобы создать это отношение?Создание отношения между первичным ключом и составным ключом - phpMyAdmin

Ниже приведены две таблицы ... (Я хотел бы сохранить составной ключ на столе справа, как это помогает предотвратить дубликаты и хорошо работает)

enter image description here

+0

При создании внешнего ключа, обе стороны отношений должны иметь одинаковое число столбцов и типов данных должен совпадать. Без исключений. Вы можете создать отношения, используя fldEmpID в обеих таблицах. –

+0

Можете ли вы показать нам свою структуру для обеих таблиц и кратко описать, как вы пытаетесь создать отношения? –

+0

@ IsaacBennetch извините, я только что понял, но я редактировал свой пост, чтобы включить таблицы. Я по существу поднял phpMyAdmin и использовал диаграмму визуальных связей и попытался установить fldEmpID слева как ссылочный ключ, а затем fldEmpID справа в качестве внешнего ключа. – codingManiac

ответ

1

кажется, работайте, как ожидалось для меня. Я создал таблицы и использовал вкладку «Дизайнер» для создания отношения (выбрав значок «Создать связь», затем щелкнув fldEmpId в таблице a и, наконец, выбрав fldEmpID в таблице b).

Для справки, я вставил ниже структуру моего стола (который включает в себя ключи и ограничения)

 
CREATE TABLE IF NOT EXISTS `a` (
    `fldEmpId` int(11) NOT NULL, 
    `fldEmpName` varchar(50) NOT NULL, 
    `fldEmail` varchar(50) NOT NULL, 
    `fldPassHash` varchar(50) NOT NULL, 
    `fldPassSalt` varchar(50) NOT NULL, 
    `fldAdmin` enum('1','2') NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `b` (
    `fldEmpID` int(11) NOT NULL, 
    `fldEventID` bigint(20) unsigned NOT NULL, 
    `fldDTAdded` datetime NOT NULL, 
    `fldDTRemoved` datetime NOT NULL, 
    `fldPosition` enum('0','1','2','3','4','5') NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `a` 
ADD PRIMARY KEY (`fldEmpId`); 

ALTER TABLE `b` 
ADD PRIMARY KEY (`fldEmpID`), ADD UNIQUE KEY `fldEventID` (`fldEventID`); 

ALTER TABLE `a` 
MODIFY `fldEmpId` int(11) NOT NULL AUTO_INCREMENT; 

ALTER TABLE `b` 
ADD CONSTRAINT `fk` FOREIGN KEY (`fldEmpID`) REFERENCES `a` (`fldEmpId`); 
Смежные вопросы