Отношения один-к-одному и один-ко-многим
Используя 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);