2014-09-23 4 views
0

Я пытаюсь создать 5 таблиц (не должно быть слишком сложно), но у меня возникают проблемы с назначением внешних ключей. PhpMyAdmin дает мне эту ошибку:Проблемы с добавлением CONSTRAINT FOREIGN KEY в PhpMyAdmin

Can't create table 'databasexx.gave' (errno: 150) 

В основном созданы все таблицы без внешних ключей.

DROP TABLE IF EXISTS oppbygging; 
CREATE TABLE oppbygging (
    gnr INT, 
    dnr INT, 
    ant INT, 
    CONSTRAINT dnr_grn_pk PRIMARY KEY (gnr, dnr) 
) ENGINE=InnoDB; 

DROP TABLE IF EXISTS onske; 
CREATE TABLE onske (
    onr INT, 
    pnr INT, 
    gnr INT, 
    prioriet INT, 
    ferdig INT, 
    CONSTRAINT pnr_gnr_pk PRIMARY KEY (pnr, gnr) 
) ENGINE=InnoDB; 

DROP TABLE IF EXISTS person; 
CREATE TABLE person (
    pnr INT, 
    fornavn VARCHAR(64), 
    etternavn VARCHAR(64), 
    fdato DATE, 
    CONSTRAINT pnr_pk PRIMARY KEY (pnr), 
    CONSTRAINT person_pnr_fk FOREIGN KEY (pnr) REFERENCES onske(pnr) 
) ENGINE=InnoDB; 

DROP TABLE IF EXISTS gave; 
CREATE TABLE gave 
(
    gnr int, 
    navn varchar (255) UNIQUE, 
    prod_tid int NOT NULL, 
    CONSTRAINT gnr_pk PRIMARY KEY (gnr), 
    CONSTRAINT gave_gnr_fk FOREIGN KEY (gnr) REFERENCES oppbygging(gnr), 
    CONSTRAINT gave_gnr_fk FOREIGN KEY (gnr) REFERENCES onske(gnr) 

) ENGINE=InnoDB; 

DROP TABLE IF EXISTS del; 
CREATE TABLE del (
    dnr INT, 
    navn VARCHAR(64), 
    lager_ant INT NOT NULL, 
    CONSTRAINT dnr_pk PRIMARY KEY (dnr), 
    CONSTRAINT del_dnr_fk FOREIGN KEY (dnr) REFERENCES oppbygging(dnr) 

) ENGINE=InnoDB; 

Уверен, что я делаю какую-то очевидную ошибку, но я просто не могу понять это. Любая помощь будет очень высоко ценится.

Вот вид отношения, игнорировать Eiendom таблицу:

enter image description here

+0

Внешний ключ ссылка на MUS * * полный первичный ключ. У вас не может быть ссылки на «частичный ПК». Поэтому 'person' должен содержать столбцы' pnr' ** и ** 'gnr' для ссылок' onske' –

+0

Спасибо за быстрый ответ! Вы правы, это была ошибка. Однако я все еще получаю это при попытке запустить код http://i.imgur.com/1gIHn2O.png Связанный код теперь выглядит следующим образом: http://i.imgur.com/wUZrOrb.png – Jogex

ответ

0

создать еще одну таблицу с иностранным KEY, внешний ключ SPECIFIED ДОЛЖЕН быть первичным ключом, по крайней мере одна таблица ЧТО УЖЕ СОЗДАЕТСЯ, EG

CREATE TABLE 1 с первичным ключом:

CREATE TABLE PERSONS(
PERSON_ID INT(10), 
FNAME VARCHAR(20)NOT NULL, 
LNAME VARCHAR(20), 
DOB DATETIME, 
AMOUNTPAID DECIMAL(15,2), 
PRIMARY KEY(PERSON_ID) 
); 

ТОГДА CREATE TABLE 2 с внешнего ключа:

CREATE TABLE COMMENTS(
COMMENTID INT AUTO_INCREMENT,  
COMMENTS VARCHAR(500), 
PERSON_ID INT(10), 
PRIMARY KEY(COMMENTID), 
FOREIGN KEY (PERSON_ID) REFERENCES PERSONS(PERSON_ID) 
);