Невозможно добавить внешние ключи в таблицы сопоставления - PullRequest
0 голосов
/ 29 января 2020

Я не могу создать внешние ключи в моей таблице сопоставления для am: n-Relations.

Моя проблема:

Я работаю с новейшей версией Shopware (Shopware 6) на тестовой машине и я хочу разработать плагин, который создает пользовательский объект. Процесс создания моего пользовательского объекта (имя таблицы: автомобиль) и процесс таблицы с миграцией магазина работают без проблем. На следующем шаге я создал таблицу сопоставления (имя: car_product), которая обрабатывает отношение m: n со стандартной таблицей «product» - «shopware».

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

Я полагаю, моя схема неверна или возникла проблема с таблицей продуктов.

CREATE TABLE IF NOT EXISTS car (
    `id_car` BINARY(16) NOT NULL,
  `hsn` VARCHAR(3) NOT NULL,
  `tsn` VARCHAR(4) NOT NULL,
  `manufacturer` VARCHAR(45) NULL,
  `model` VARCHAR(45) NULL,
  `year` INT NULL,
  `created_at` DATETIME(3) NOT NULL,
 `updated_at` DATETIME(3) NULL,
  PRIMARY KEY (`id_car`),
  UNIQUE (`hsn`, `tsn`));

CREATE TABLE IF NOT EXISTS car_product(
  `product_id` BINARY(16) NOT NULL,
  `product_version_id` BINARY(16) NOT NULL ,
  `id_car` binary(16) Not Null ,

  PRIMARY KEY (`product_id`, `product_version_id`, `id_car`),
  INDEX `fk_product_car_idx` (`id_car` ) ,
  INDEX `fk_product_car_product_idx` (`product_id` , `product_version_id`) );



CREATE TABLE product (
id  binary(16) , 
version_id  binary(16),
...
cars binary(16), 
)

Идентификатор, version_id Атрибуты внутри таблицы продукта являются первичными ключами

SQL -Просьба добавить внешние ключи:

 Alter Table `car_product` ADD FOREIGN KEY  (`product_id`,`product_version_id`) REFERENCES  `product` (`id`, `version_id`)  ON DELETE CASCADE ON UPDATE CASCADE ;

     Alter Table `car_product` ADD FOREIGN KEY (`id_car` ) REFERENCES `car` (`id_car`) ON DELETE CASCADE ON UPDATE CASCADE;

...