0

MySQL WorkbenchEins-zu-eins und eins-zu-viele Beziehungen

Mysql Workbench verwenden, fand ich, dass der SQL der Einzelunterricht Tabelle und ONE_TO_MANY Tabelle ähnlich ist. Beide verwenden einen nicht eindeutigen Fremdschlüssel, um ihre Beziehungen zu implementieren.

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 

Folglich kann ich Zeilen in der Einzelunterricht Tabelle einzufügen, die die gleiche Zeile in der übergeordneten Tabelle ebenso wie die ONE_TO_MANY Tabelle verweisen.

Ist das nicht ein Verstoß gegen die Eins-zu-eins-Beziehung? Oder sollte ich die Eins-zu-Eins-Beziehungen mit einem eindeutigen Fremdschlüssel definieren?

+1

Ja, wenn Ihre Absicht ist, die parent_id nie mehr als 1 Mal in der Tabelle one_to_one einzugeben, sollte es auch eine eindeutige Einschränkung sein, genau wie die PK. Ich bin mir nicht sicher, warum es auch eine zusammengesetzte PK macht. Du solltest das nur in vielen zu vielen brauchen. – topshot

Antwort

1

Die Fremdschlüsseleinschränkung überprüft nur, ob ein Wert der Spalte parent_id in der Tabelle one_to_one in der übergeordneten Tabelle vorhanden ist oder nicht. Sie können das Problem umgehen, indem Sie einen eindeutigen Index für parent_id in one_to_one-Tabelle hinzufügen.