0

MySQL Workbench一個-to-one和一個一對多的關係

使用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

是的,如果你的目的是絕不允許在one_to_one表要輸入的PARENT_ID 1倍以上,也應該是唯一的約束,就像PK。我不確定爲什麼它會製作複合PK。你應該只需要這麼多。 – topshot

回答

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);