一对一和一对多的关系

时间:2016-08-05 14:41:47

标签: mysql database foreign-keys relational-database relationships

MySQL Workbench

使用Mysql Workbench,我发现one_to_one表和one_to_many表的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表中插入引用父表中同一行的行,就像one_to_many表一样。

这不是违反一对一的关系吗?或者我应该用唯一的外键定义一对一的关系吗?

1 个答案:

答案 0 :(得分:1)

外键约束仅检查表one_to_one中的parent_id列的值是否存在于父表中。 您可以通过在one_to_one表中为parent_id添加唯一索引来处理该问题。

ALTER TABLE `mydb`.`one_to_one` 
ADD UNIQUE INDEX `parent_id_UNIQUE` (`parent_id` ASC);