Jestem całkiem nowym użytkownikiem MySQL (musiałem nauczyć się go dla uni). Muszę utworzyć bazę danych i interfejs WWW dla zadania.Używanie dwóch kluczy obcych jako klucza podstawowego - MySQL
Na jednej z tabel mam dwie kolumny, obie są obcymi kluczami, i muszę ich użyć jako klucza głównego.
Jest to kod do tej pory:
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)
);
Wszystkie składni tabeli jest zgodna ze słownikiem danych dostarczonych.
Kiedy uruchamiam to w wierszu poleceń mysql, pojawia się błąd w sekcji wyróżnionej pogrubioną czcionką (tabela "AuthorRole"), mówiąc, że "nie można dodać ograniczenia klucza obcego".
miałem szansę na debugowanie to, i to wydaje się być:
FOREIGN KEY(roleid) REFERENCES Role(id)
Klucz obcy, który jest przyczyną problemu (jeśli usunąć go, wszystko działa dobrze, a jeśli i zostawić go w i usunąć inny klucz obcy, daje błąd).
Jeśli ktoś mógłby wytłumaczyć, gdzie idę źle, byłbym bardzo wdzięczny.
Próbowałem googlować, ale nie mogłem niczego znaleźć (prawdopodobnie dlatego, że używałem niewłaściwych słów kluczowych).
Dzięki
Cheers Corey
Cześć, To zadziałało! Dzięki za stosy. Spróbuję tego, co powiedziałeś dla kluczy podstawowych. Dzięki jeszcze raz. Pozdrawiam, Corey – Fishingfon