Hi,
also ich habe ein simples Beispiel gemacht. Dieses habe ich mit dem EER von MySQL Workbrench erstellt.
Hier das fertige Bild erst einmal
Der SQL Code (um die Keys zu sehen)
CREATE TABLE IF NOT EXISTS `mydb`.`stadt` (
`idstadt` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(45) NULL ,
PRIMARY KEY (`idstadt`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`bezirk`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`bezirk` (
`idbezirk` INT NOT NULL AUTO_INCREMENT ,
`stadt_idstadt` INT NOT NULL ,
`bName` VARCHAR(45) NULL ,
PRIMARY KEY (`idbezirk`, `stadt_idstadt`) ,
CONSTRAINT `fk_bezirk_stadt`
FOREIGN KEY (`stadt_idstadt` )
REFERENCES `mydb`.`stadt` (`idstadt` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
CREATE INDEX `fk_bezirk_stadt` ON `mydb`.`bezirk` (`stadt_idstadt` ASC) ;
-- -----------------------------------------------------
-- Table `mydb`.`parkhaeuser`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`parkhaeuser` (
`bezirk_idbezirk` INT NOT NULL ,
`bezirk_stadt_idstadt` INT NOT NULL ,
`Strasse` VARCHAR(45) NULL ,
PRIMARY KEY (`bezirk_idbezirk`, `bezirk_stadt_idstadt`) ,
CONSTRAINT `fk_parkhaeuser_bezirk1`
FOREIGN KEY (`bezirk_idbezirk` , `bezirk_stadt_idstadt` )
REFERENCES `mydb`.`bezirk` (`idbezirk` , `stadt_idstadt` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`parkhaeuser2`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`parkhaeuser2` (
`bezirk_idbezirk` INT NOT NULL ,
PRIMARY KEY (`bezirk_idbezirk`) ,
CONSTRAINT `fk_bezirk`
FOREIGN KEY (`bezirk_idbezirk` )
REFERENCES `mydb`.`bezirk` (`idbezirk` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE INDEX `fk_bezirk` ON `mydb`.`parkhaeuser2` (`bezirk_idbezirk` ASC) ;
Nun zu meiner Frage, mich wundert das Workbrench bei "parkhaeuser" beide Schlüssel als Primary key benutzt. Ich Persönlich würde es so wie bei "parkhaeuser2" (von mir per Hand erstellt) machen. Denn die idbezirk ist doch eh schon eindeutig, wozu dann noch die ID von Stadt mit reinnehmen ?