Ограничение внешнего ключа неправильно сформировано в таблице «Проблемы»

#mysql #sql #database-design #foreign-keys #create-table

#mysql #sql #база данных-дизайн #внешние ключи #create-table

Вопрос:

Это две таблицы, которые я создал, но я получаю ошибку в таблице issues :

введите описание изображения здесь

Я искал в Интернете, но не смог найти никакого решения. Не могли бы вы, пожалуйста, помочь мне в этом.

 CREATE TABLE Issues
(
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100),
    description TEXT,
    type VARCHAR(50),
    priority VARCHAR(50),
    status VARCHAR(50),
    assigned_to INT,
    created_by INT,
    created DATETIME,
    updated DATETIME,

    FOREIGN KEY (assigned_to, created_by) REFERENCES Users(id, id)
) ENGINE=InnoDB;

CREATE TABLE Users
(
    id INT AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30),
    lastname VARCHAR(30),
    password VARCHAR(30),
    email VARCHAR(30),
    date_joined DATETIME
) ENGINE=InnoDB;
 

Комментарии:

1. Скорее всего, вам просто нужно создать Users first — before Issues — чтобы можно было установить ограничение FK и ссылаться на существующую таблицу….

2. @marc_s, я тоже пробовал это … но все равно я получаю сообщение об ошибке: ОШИБКА 1822 (HY000) в строке 13: не удалось добавить ограничение внешнего ключа. Отсутствует индекс для ограничения ‘Issues_ibfk_1’ в таблице ссылок ‘Users’

3. Вы действительно хотите создать составной внешний ключ?? В … нет соответствующего составного первичного ключа Users . или вы хотели создать FK для assigned_to to Users.id и другое ограничение FK для created_by — снова Users.id — отдельно? ——> см. Ответ @GMB — он, должно быть, прочитал мои мысли и вставил их в ответ; -)

Ответ №1:

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

 -- parent table
create table users (
    id int auto_increment primary key,
    firstname varchar(30),
    lastname varchar(30),
    password varchar(30),
    email varchar(30),
    date_joined datetime
) engine=innodb;

-- child table
create table issues (
    id int auto_increment primary key,
    title varchar(100),
    description text,
    type varchar(50),
    priority varchar(50),
    status varchar(50),
    assigned_to int,
    created_by int,
    created datetime,
    updated datetime,
    foreign key (assigned_to) references users(id),  -- first FK
    foreign key (created_by)  references users(id)   -- second FK
) engine=innodb;
 

Комментарии:

1. Чтобы уточнить: чтобы создать внешний ключ в InnoDB, вам нужно ссылаться на индекс в том же порядке. У вас нет индекса (id, id) , у вас один индекс id , поэтому вам нужно использовать 2 отдельных FK для ссылки на это. Смотрите документ MySQL по FKs .