0

MySQL Workbench1対1と1対多の関係

の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_MANYテーブルのように、親テーブルの同じ行を参照one_to_oneテーブルに行を挿入することができます。

これは1対1の関係に違反していませんか?あるいは、固有の外部キーを使用して1対1の関係を定義する必要がありますか?

+1

あなたの意図は、PARENT_IDがone_to_oneテーブルに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);