Использование двух внешних ключей в качестве первичного ключа – MySQL

Я новичок в MySQL (нужно было изучить его для uni). Мне нужно создать базу данных и веб-интерфейс для назначения.

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

Это код до сих пор:

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

Весь синтаксис таблицы соответствует предоставленному словарю данных.

Когда я запускаю это в командной строке mysql, я получаю сообщение об ошибке в выделенном выше выделенном разделе (таблица «AuthorRole»), говоря, что он «не может добавить ограничение внешнего ключа».

Я попытался отладить его, и это похоже на:

 FOREIGN KEY(roleid) REFERENCES Role(id) 

Внешний ключ, вызывающий проблему (если я его удалю, все работает хорошо, и если я оставлю его и удалю другой внешний ключ, он даст ошибку).

Если бы кто-то мог объяснить, где я ошибаюсь, я был бы очень благодарен.

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

благодаря

Приветствие Кори

Сначала создайте таблицу «Роль», затем таблицу «AuthorRole», и все будет хорошо

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

А при создании первичных ключей лучше использовать id INT(11) NOT NULL AUTO_INCREMENT

Это просто потому, что вы имеете в виду первичный ключ таблицы, который не создается в момент, когда вы ссылаетесь на него, попробуйте следующий sql-скрипт:

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

Сначала создайте роль таблицы, а затем AuthorRole.

попробуйте изменить

  roleid varchar(255) NOT NULL, 

в

  roleid int(11) NOT NULL, 

поскольку поле и ваше ключевое поле имеют разные типы