Отношения один-к-одному и один-ко-многим

MySQL Workbench

Используя Mysql Workbench, я обнаружил, что sql таблиц one_to_one и one_to_many похожи. Оба используют неуникальный внешний ключ для реализации своих отношений.

    CREATE TABLE IF NOT EXISTS `mydb`.`one_to_one` (
      `id` INT NOT NULL,
      `parent_id` INT NOT NULL,
      PRIMARY KEY (`id`, `parent_id`),
      INDEX `fk_one_to_one_parent1_idx` (`parent_id` ASC),
      CONSTRAINT `fk_one_to_one_parent1`
        FOREIGN KEY (`parent_id`)
        REFERENCES `mydb`.`parent` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB

Следовательно, я могу вставить строки в таблицу one_to_one, которые ссылаются на ту же строку в родительской таблице, что и таблица one_to_many.

Не является ли это нарушением отношений один-к-одному? Или я должен определить отношения один-к-одному с уникальным внешним ключом?

1 ответ

Решение

Ограничение внешнего ключа только проверяет, существует ли значение столбца parent_id в таблице one_to_one в родительской таблице или нет. Вы можете решить эту проблему, добавив уникальный индекс для parent_id в таблицу one_to_one.

ALTER TABLE `mydb`.`one_to_one` 
ADD UNIQUE INDEX `parent_id_UNIQUE` (`parent_id` ASC);
Другие вопросы по тегам