Eins-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?
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