2014-05-06 16 views
6

Ich bin ziemlich neu in MySQL (musste es für uni lernen). Ich muss eine Datenbank und Web-Interface für eine Aufgabe erstellen.Verwenden von zwei Fremdschlüsseln als Primärschlüssel - MySQL

Auf einer der Tabellen habe ich zwei Spalten, von denen beide Fremdschlüssel sind, und ich muss sie beide als Primärschlüssel verwenden.

Dies ist der Code so weit:

drop database if exists testJoke; 
create database testJoke; 
use testJoke; 

CREATE TABLE Author 
(
    id   int(11) NOT NULL , 
    name   varchar(255) NULL , 
    cust_email varchar(255) NULL, 
    password char(32) null, 

    PRIMARY KEY (id) 


); 


**CREATE TABLE AuthorRole 
(
    authorid int(11) NOT NULL , 
    roleid varchar(255) NOT NULL, 
    PRIMARY KEY (authorid, roleid), 
    FOREIGN KEY(authorid) REFERENCES Author(id), 
    FOREIGN KEY(roleid) REFERENCES Role(id) 

);** 



CREATE TABLE Category 
(
    id int(11)  NOT NULL , 
    name varchar(255) NULL, 
    PRIMARY KEY (id) 
); 


CREATE TABLE Joke 
(
    id int(11)  NOT NULL , 
    joketext text NULL , 
    jokedate date NOT NULL , 
    authorid int(11) NULL, 
    PRIMARY KEY (id), 
    FOREIGN KEY(authorid) REFERENCES Author(id) 

); 


CREATE TABLE JokeCategory 
(
    jokeid int(11)  NOT NULL , 
    categoryid int(11) NOT NULL , 
    PRIMARY KEY (jokeid, categoryid), 
    FOREIGN KEY(jokeid) REFERENCES Joke(id), 
    FOREIGN KEY(categoryid) REFERENCES Category(id)** 


); 

CREATE TABLE Role 
(
    id varchar(255)  NOT NULL , 
    description varchar(255) NULL , 
    PRIMARY KEY (id) 
); 

Alle der Tabelle Syntax in Zeile, die mit einem Datenwörterbuch ist.

Wenn ich dies in der mysql-Befehlszeile ausführen, erhalte ich einen Fehler in dem fett hervorgehobenen Abschnitt (Tabelle "AuthorRole"), dass es "keine Fremdschlüsseleinschränkung hinzufügen kann".

Ich habe einen Versuch zu debuggen es hatte, und es scheint die zu sein:

FOREIGN KEY(roleid) REFERENCES Role(id) 

Fremdschlüssel, die das Problem verursacht (wenn ich es entfernen, funktioniert alles gut, und wenn ich überlasse es in und entfernen Sie den anderen Fremdschlüssel, es gibt einen Fehler).

Wenn jemand bitte erklären könnte, wo ich falsch liege, wäre ich sehr dankbar.

Ich habe versucht, dies zu googeln, aber konnte nichts finden (wahrscheinlich, weil ich die falschen Schlüsselwörter verwendete).

Dank

Prost Corey

Antwort

0

Zuerst die Tabelle „Rolle“ zu erstellen, dann die Tabelle „AuthorRole“ und es wird ok

CREATE TABLE Role 
(
    id varchar(255)  NOT NULL , 
    description varchar(255) NULL , 
    PRIMARY KEY (id) 
); 

CREATE TABLE AuthorRole 
(
    authorid int(11) NOT NULL , 
    roleid varchar(255) NOT NULL, 
    PRIMARY KEY (authorid, roleid), 
    FOREIGN KEY(authorid) REFERENCES Author(id), 
    FOREIGN KEY(roleid) REFERENCES Role(id) 
); 

Und wenn Primärschlüssel zu schaffen, es ist besser id INT(11) NOT NULL AUTO_INCREMENT

+0

Hallo, das hat funktioniert! Vielen Dank für Ihre Hilfe. Ich werde versuchen, was Sie für Primärschlüssel gesagt haben. Danke noch einmal. Prost, Corey – Fishingfon

0

versuchen

roleid varchar(255) NOT NULL, 

zu

roleid int(11) NOT NULL, 

als das Feld und Ihre Schlüsselfeld changeing sind von verschiedenen Arten

+0

Hallo, ich habe versucht, was du gesagt hast, aber ich bekomme immer noch den gleichen Fehler. Ich habe es in den Tabellen "Role" und "AuthorRole" in "int (11)" geändert. Danke, Corey – Fishingfon

+0

Andere beantworteten Ihre Frage, ich vermisste die Tatsache, dass die Reihenfolge, in der Sie Tabellen erstellen, falsch ist –

3

Es ist zu verwenden, nur weil Sie sind Bezugnahme auf einen Primärschlüssel der Tabelle, die zu der Zeit Sie es erstellt verweisen nicht, versuchen Sie den folgenden sQL-Skript:

drop database if exists testJoke; 
create database testJoke; 
use testJoke; 

CREATE TABLE Author 
(
    id   int(11) NOT NULL , 
    name   varchar(255) NULL , 
    cust_email varchar(255) NULL, 
    password char(32) null, 

    PRIMARY KEY (id) 


); 

CREATE TABLE Role 
(
    id varchar(255)  NOT NULL , 
    description varchar(255) NULL , 
    PRIMARY KEY (id) 
); 


CREATE TABLE AuthorRole 
(
    authorid int(11) NOT NULL , 
    roleid varchar(255) NOT NULL, 
    PRIMARY KEY (authorid, roleid), 
    FOREIGN KEY(authorid) REFERENCES Author(id), 
    FOREIGN KEY(roleid) REFERENCES Role(id) 

); 



CREATE TABLE Category 
(
    id int(11)  NOT NULL , 
    name varchar(255) NULL, 
    PRIMARY KEY (id) 
); 


CREATE TABLE Joke 
(
    id int(11)  NOT NULL , 
    joketext text NULL , 
    jokedate date NOT NULL , 
    authorid int(11) NULL, 
    PRIMARY KEY (id), 
    FOREIGN KEY(authorid) REFERENCES Author(id) 

); 


CREATE TABLE JokeCategory 
(
    jokeid int(11)  NOT NULL , 
    categoryid int(11) NOT NULL , 
    PRIMARY KEY (jokeid, categoryid), 
    FOREIGN KEY(jokeid) REFERENCES Joke(id), 
    FOREIGN KEY(categoryid) REFERENCES Category(id) 


); 

Tabelle Rolle erstellen AuthorRole und dann.

+0

dieses Skript sollte wie Charme funktionieren ... Hoffe, das hilft –

+0

Hallo, das hat perfekt funktioniert! Tausend Dank! – Fishingfon

Verwandte Themen