Hallo Community,
ich habe ein komisches Problem was ich nicht wirklich verstehe:
Also ich möchte eine Datenbank modellieren für ein Hotelmanagementsystem. Dies ist meine Modelierung:
Jetzt bekomme ich aber den folgenden Fehler:
Wenn nun allerdings in der Entität Zimmer das Attribut Zimmertyp auch ein Primary Key ist, funktioniert alles. Das möchte ich aber eigentlich nicht da dies einfach nicht bestandteil des Zimmertyps ist.
Weis einer wieso der Fehler auftritt?
Ich poste nochmal mein ERM-Model
Uploaded with ImageShack.us
ich habe ein komisches Problem was ich nicht wirklich verstehe:
Also ich möchte eine Datenbank modellieren für ein Hotelmanagementsystem. Dies ist meine Modelierung:
Code:
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Hotelkette`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Hotelkette` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Hotelkette` (
`Hotelketten-Nr` INT NOT NULL AUTO_INCREMENT ,
`Hotelkette` VARCHAR(45) NULL ,
PRIMARY KEY (`Hotelketten-Nr`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Zahlungsarten`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Zahlungsarten` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Zahlungsarten` (
`Zahlungsnummer` INT NOT NULL ,
`Rechnung` TINYINT(1) NULL ,
`Lastschrift` TINYINT(1) NULL ,
`Barzahlung` TINYINT(1) NULL ,
`Kreditkarte` TINYINT(1) NULL ,
PRIMARY KEY (`Zahlungsnummer`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Hotel`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Hotel` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Hotel` (
`Hotel-Nr` INT NOT NULL AUTO_INCREMENT ,
`HotelName` VARCHAR(45) NULL ,
`Ort` VARCHAR(45) NULL ,
`PLZ` VARCHAR(10) NULL ,
`Strasse` VARCHAR(45) NULL ,
`Telefon` INT NULL ,
`Hotelart` VARCHAR(45) NULL ,
`Hotellage` VARCHAR(45) NULL ,
`Hotelkategorie` ENUM('1','2','3','4','5') NOT NULL ,
`Email` VARCHAR(45) NULL ,
`Hotelketten-Nr` INT NULL DEFAULT NULL ,
`Zahlungsarten` INT NOT NULL ,
PRIMARY KEY (`Hotel-Nr`) ,
INDEX `fk_Hotel_Hotelkette1` (`Hotelketten-Nr` ASC) ,
INDEX `fk_Hotel_Zahlungsarten1` (`Zahlungsarten` ASC) ,
CONSTRAINT `fk_Hotel_Hotelkette1`
FOREIGN KEY (`Hotelketten-Nr` )
REFERENCES `mydb`.`Hotelkette` (`Hotelketten-Nr` )
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT `fk_Hotel_Zahlungsarten1`
FOREIGN KEY (`Zahlungsarten` )
REFERENCES `mydb`.`Zahlungsarten` (`Zahlungsnummer` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Hotelinformation`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Hotelinformation` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Hotelinformation` (
`Hotel-Nr` INT NOT NULL ,
`Beschreibung` LONGTEXT NULL ,
`Frühster CheckIn` TIME NULL ,
`Spätester CheckOut` TIME NULL ,
`Rezeption` VARCHAR(45) NULL ,
PRIMARY KEY (`Hotel-Nr`) ,
CONSTRAINT `fk_Hotelinformation_Hotel1`
FOREIGN KEY (`Hotel-Nr` )
REFERENCES `mydb`.`Hotel` (`Hotel-Nr` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Zimmertyp`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Zimmertyp` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Zimmertyp` (
`Hotel-Nr` INT NOT NULL ,
`Beschreibung` VARCHAR(45) NOT NULL ,
`Preis` VARCHAR(45) NULL ,
PRIMARY KEY (`Hotel-Nr`, `Beschreibung`) ,
INDEX `fk_Zimmertyp_Hotel1` (`Hotel-Nr` ASC) ,
CONSTRAINT `fk_Zimmertyp_Hotel1`
FOREIGN KEY (`Hotel-Nr` )
REFERENCES `mydb`.`Hotel` (`Hotel-Nr` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Zimmer`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Zimmer` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Zimmer` (
`HotelNr` INT NOT NULL ,
`Zimmer-Nr` INT NOT NULL ,
`Zimmertyp` VARCHAR(45) NOT NULL ,
`Zimmerlage` VARCHAR(45) NULL ,
`Belegt` VARCHAR(45) NULL ,
`Doppelzimmer` TINYINT(1) NOT NULL ,
PRIMARY KEY (`HotelNr`, `Zimmer-Nr`) ,
INDEX `fk_Zimmer_Zimmertyp1` (`HotelNr` ASC, `Zimmertyp` ASC) ,
CONSTRAINT `fk_Zimmer_Zimmertyp1`
FOREIGN KEY (`HotelNr` , `Zimmertyp` )
REFERENCES `mydb`.`Zimmertyp` (`Hotel-Nr` , `Beschreibung` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Zimmerausstattung`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Zimmerausstattung` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Zimmerausstattung` (
`Hotel-Nr` INT NOT NULL ,
`Zimmertyp` VARCHAR(45) NOT NULL ,
`Dusche` TINYINT(1) NOT NULL ,
`TV` TINYINT(1) NOT NULL ,
`Badezimmer` TINYINT(1) NOT NULL ,
`Lärmschutzfenster` TINYINT(1) NOT NULL ,
`Haartrockner` TINYINT(1) NOT NULL ,
`Nichtraucher` TINYINT(1) NOT NULL ,
`Telefon` TINYINT(1) NOT NULL ,
`DSL` TINYINT(1) NOT NULL ,
`WLan` TINYINT(1) NOT NULL ,
PRIMARY KEY (`Hotel-Nr`, `Zimmertyp`) ,
CONSTRAINT `fk_Zimmerausstattung_Zimmertyp1`
FOREIGN KEY (`Hotel-Nr` , `Zimmertyp` )
REFERENCES `mydb`.`Zimmertyp` (`Hotel-Nr` , `Beschreibung` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Hotelausstattung`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Hotelausstattung` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Hotelausstattung` (
`Hotel-Nr` INT NOT NULL ,
`Fahrstuhl` INT NULL ,
`PArkplatz` VARCHAR(45) NULL ,
`Fitnessraum` VARCHAR(45) NULL ,
`Hotelbar` VARCHAR(45) NULL ,
`Klimaanlage` VARCHAR(45) NULL ,
`Restaurant` VARCHAR(45) NULL ,
PRIMARY KEY (`Hotel-Nr`) ,
CONSTRAINT `fk_Hotelausstattung_Hotel1`
FOREIGN KEY (`Hotel-Nr` )
REFERENCES `mydb`.`Hotel` (`Hotel-Nr` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Kunde`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Kunde` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Kunde` (
`Kunden-Nr` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(45) NULL ,
`Vorname` VARCHAR(45) NULL ,
`Adresse` VARCHAR(45) NULL ,
`PLZ` VARCHAR(45) NULL ,
`Ort` VARCHAR(45) NULL ,
`Telefonnnumer` VARCHAR(45) NULL ,
`Email` VARCHAR(45) NULL ,
PRIMARY KEY (`Kunden-Nr`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Reservierungen`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Reservierungen` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Reservierungen` (
`Reservierungs-Nr` INT NOT NULL ,
`Anreise` VARCHAR(45) NULL ,
`Abreise` VARCHAR(45) NULL ,
`Personen Anzahl` VARCHAR(45) NULL ,
`Gesamtpreis` VARCHAR(45) NULL ,
`Verpflegung` VARCHAR(45) NULL ,
`Reservierungsdatum` VARCHAR(45) NULL ,
`Zimmer_HotelNr` INT NOT NULL ,
`Zimmer_Zimmer-Nr` INT NOT NULL ,
`Zimmertyp` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`Reservierungs-Nr`) ,
INDEX `fk_Reservierungen_Zimmer1` (`Zimmer_HotelNr` ASC, `Zimmer_Zimmer-Nr` ASC, `Zimmertyp` ASC) ,
CONSTRAINT `fk_Reservierungen_Zimmer1`
FOREIGN KEY (`Zimmer_HotelNr` , `Zimmer_Zimmer-Nr` , `Zimmertyp` )
REFERENCES `mydb`.`Zimmer` (`HotelNr` , `Zimmer-Nr` , `Zimmertyp` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Kunde_has_Reservierungen`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Kunde_has_Reservierungen` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Kunde_has_Reservierungen` (
`Kunde_Kunden-Nr` INT NOT NULL ,
`Reservierungen_Reservierungs-Nr` INT NOT NULL ,
PRIMARY KEY (`Kunde_Kunden-Nr`, `Reservierungen_Reservierungs-Nr`) ,
INDEX `fk_Kunde_has_Reservierungen_Reservierungen1` (`Reservierungen_Reservierungs-Nr` ASC) ,
CONSTRAINT `fk_Kunde_has_Reservierungen_Kunde1`
FOREIGN KEY (`Kunde_Kunden-Nr` )
REFERENCES `mydb`.`Kunde` (`Kunden-Nr` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Kunde_has_Reservierungen_Reservierungen1`
FOREIGN KEY (`Reservierungen_Reservierungs-Nr` )
REFERENCES `mydb`.`Reservierungen` (`Reservierungs-Nr` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Code:
Executing SQL script in server
ERROR: Error 1005: Can't create table 'mydb.reservierungen' (errno: 150)
CREATE TABLE IF NOT EXISTS `mydb`.`Reservierungen` (
`Reservierungs-Nr` INT NOT NULL ,
`Anreise` VARCHAR(45) NULL ,
`Abreise` VARCHAR(45) NULL ,
`Personen Anzahl` VARCHAR(45) NULL ,
`Gesamtpreis` VARCHAR(45) NULL ,
`Verpflegung` VARCHAR(45) NULL ,
`Reservierungsdatum` VARCHAR(45) NULL ,
`Zimmer_HotelNr` INT NOT NULL ,
`Zimmer_Zimmer-Nr` INT NOT NULL ,
`Zimmertyp` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`Reservierungs-Nr`) ,
INDEX `fk_Reservierungen_Zimmer1` (`Zimmer_HotelNr` ASC, `Zimmer_Zimmer-Nr` ASC, `Zimmertyp` ASC) ,
CONSTRAINT `fk_Reservierungen_Zimmer1`
FOREIGN KEY (`Zimmer_HotelNr` , `Zimmer_Zimmer-Nr` , `Zimmertyp` )
REFERENCES `mydb`.`Zimmer` (`HotelNr` , `Zimmer-Nr` , `Zimmertyp` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
SQL script execution finished: statements: 25 succeeded, 1 failed
Weis einer wieso der Fehler auftritt?
Ich poste nochmal mein ERM-Model
Uploaded with ImageShack.us