ВСТАВКА Составного внешнего ключа

#mysql #phpmyadmin #foreign-keys

#mysql #phpmyadmin #внешние ключи

Вопрос:

У меня есть 3 таблицы: company , case и report .

Компания:

 CREATE TABLE IF NOT EXISTS `db`.`company` (
  `name` VARCHAR(50) NOT NULL,
  `password` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`name`))
ENGINE = InnoDB;
  

кейс:

 CREATE TABLE IF NOT EXISTS `db`.`case` (
  `id` VARCHAR(50) NOT NULL,
  `image` VARCHAR(255) NULL,
  `title` VARCHAR(100) NULL,
  `description` VARCHAR(255) NULL,
  `address` VARCHAR(255) NULL,
  `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `company_name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`company_name`, `id`),
  CONSTRAINT `fk_case_company`
    FOREIGN KEY (`company_name`)
    REFERENCES `db`.`company` (`name`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
  

Сообщить:

 CREATE TABLE IF NOT EXISTS `db`.`report` (
  `type` VARCHAR(50) NULL,
  `image` VARCHAR(255) NULL,
  `description` VARCHAR(255) NULL,
  `approval` BINARY NULL DEFAULT 0,
  `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `id` INT NOT NULL AUTO_INCREMENT,
  `case_company_name` VARCHAR(50) NOT NULL,
  `case_id` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`, `case_company_name`, `case_id`),
  INDEX `fk_report_case1_idx` (`case_company_name` ASC, `case_id` ASC),
  CONSTRAINT `fk_report_case1`
    FOREIGN KEY (`case_company_name` , `case_id`)
    REFERENCES `db`.`case` (`company_name` , `id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
  

Когда я вставляю строку в case таблицу с помощью phpMyAdmin :

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

Итак, внешний ключ работает так, как я себе представлял. Но когда я пытаюсь вставить строку в report таблицу, в которой используется составной внешний ключ, состоящий из 2 столбцов, это выглядит следующим образом:

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

Почему это? Для меня это выглядит так, как будто соединение не установлено между двумя таблицами, и это case_company_name и case_id просто обычные столбцы.

Ответ №1:

Скорее всего, это означает только то, что phpmyadmin не работает с составными ссылками таким образом. Вы можете легко проверить существующие ограничения, используя SHOW CREATE TABLE report