一对一和一对多关系
one-to-one and one-to-many relationships
使用MysqlWorkbench,我发现one_to_onetable和one_to_manytable的sql是相似的。两者都使用非唯一外键来实现它们的关系。
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 table 中插入引用父 table 中同一行的行,就像 one_to_many table 中一样。
这不是违反了一对一关系吗?或者我应该用唯一的外键定义一对一关系吗?
外键约束仅检查 table one_to_one 中的 parent_id 列的值是否存在于父 table 中。
您可以通过在 one_to_one table.
中为 parent_id 添加唯一索引来处理此问题
ALTER TABLE `mydb`.`one_to_one`
ADD UNIQUE INDEX `parent_id_UNIQUE` (`parent_id` ASC);
使用MysqlWorkbench,我发现one_to_onetable和one_to_manytable的sql是相似的。两者都使用非唯一外键来实现它们的关系。
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 table 中插入引用父 table 中同一行的行,就像 one_to_many table 中一样。
这不是违反了一对一关系吗?或者我应该用唯一的外键定义一对一关系吗?
外键约束仅检查 table one_to_one 中的 parent_id 列的值是否存在于父 table 中。 您可以通过在 one_to_one table.
中为 parent_id 添加唯一索引来处理此问题ALTER TABLE `mydb`.`one_to_one`
ADD UNIQUE INDEX `parent_id_UNIQUE` (`parent_id` ASC);