2014-09-23 114 views
0

我想创建5个表格(不应该太难),但我在分配外键时遇到了问题。 PhpMyAdmin给我这个错误:在PhpMyAdmin中添加CONSTRAINT FOREIGN KEY的问题

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

外键亩参考*完整*主键。你不能有一个“部分PK”的参考。所以'person'需要包含'pnr' **和**'gnr'列以便引用'onske' – 2014-09-23 10:35:57

+0

感谢您的快速回复!你是对的,那是一个错误。不过,当我试图运行代码时,我仍然得到这个http://i.imgur.com/1gIHn2O.png 相关代码现在看起来像这样 http://i.imgur.com/wUZrOrb.png – Jogex 2014-09-23 10:42:17

回答

0

创建另一个表的外键,外键 SPECIFIED必须至少一个表 的主键已经创建,EG

CREATE TABLE 1与主KEY:

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) 
); 

THEN 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) 
);