Generowanie bazy, Error 1005:, MySql Workbench

0

Witam,
używam MySQL Workbench do wygenerowania bazy danych. Niestety co rusz trafiam na jakieś problemy, kilka już rozwiązałem a dalej jakoś nie mogę sobie poradzić. Wklejam więc polecenie wygenerowane przez ww. program a następnie SysLog.

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';



ALTER TABLE `xxx`.`inwestycja` DROP FOREIGN KEY `fk_Inwestycja_Firmy` ;



ALTER TABLE `xxx`.`inwestycja` CHANGE COLUMN `Firmy_idFirmy` `Firmy_idFirmy` INT(11) NULL DEFAULT NULL  , 

  ADD CONSTRAINT `fk_Inwestycja_Firmy`

  FOREIGN KEY (`Firmy_idFirmy` )

  REFERENCES `xxx`.`firmy` (`idFirmy` )

  ON DELETE NO ACTION

  ON UPDATE NO ACTION

, DROP INDEX `fk_Inwestycja_Firmy` 

, ADD INDEX `fk_Inwestycja_Firmy` (`Firmy_idFirmy` ASC) ;



CREATE  TABLE IF NOT EXISTS `xxx`.`obszary` (

  `idObszary` INT(11) NOT NULL AUTO_INCREMENT ,

  `nazwa` VARCHAR(45) NOT NULL ,

  `ptaki` TINYINT(1) NOT NULL ,

  `nietoperze` TINYINT(1) NULL DEFAULT NULL ,

  `Inwestycja_Nazwa` VARCHAR(45) NULL DEFAULT NULL ,

  `Pracownicy_idPracownicy` INT(11) NULL DEFAULT NULL ,

  `punkty_idpunkty` INT(11) NULL DEFAULT NULL ,

  PRIMARY KEY (`idObszary`, `Inwestycja_Nazwa`) ,

  INDEX `fk_Obszary_Inwestycja` (`Inwestycja_Nazwa` ASC) ,

  INDEX `fk_Obszary_Pracownicy` (`Pracownicy_idPracownicy` ASC) ,

  INDEX `fk_Obszary_punkty1` (`punkty_idpunkty` ASC) ,

  CONSTRAINT `fk_Obszary_Inwestycja`

    FOREIGN KEY (`Inwestycja_Nazwa` )

    REFERENCES `xxx'.`inwestycja` (`Nazwa` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Obszary_Pracownicy`

    FOREIGN KEY (`Pracownicy_idPracownicy` )

    REFERENCES `xxx`.`pracownicy` (`idPracownicy` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Obszary_punkty1`

    FOREIGN KEY (`punkty_idpunkty` )

    REFERENCES `xxx`.`punkty` (`idpunkty` )

    ON DELETE CASCADE

    ON UPDATE CASCADE)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`wyjscia` (

  `idWyjścia` INT(11) NOT NULL AUTO_INCREMENT ,

  `data` DATE NOT NULL ,

  `ptaki` TINYINT(1) NOT NULL ,

  `nietoperze` TINYINT(1) NOT NULL ,

  `naleznosc` INT(11) NOT NULL ,

  `komentarz` TEXT NULL DEFAULT NULL ,

  `Obszary_idObszary` INT(11) NOT NULL DEFAULT NULL ,

  `Pracownicy_idPracownicy` INT(11) NOT NULL DEFAULT NULL ,

  `typWyjscia_idtypWyjscia` INT(11) NOT NULL ,

  `godzinaStartu` TIME NULL DEFAULT NULL ,

  `godzinaKonca` TIME NULL DEFAULT NULL ,

  PRIMARY KEY (`idWyjścia`, `Obszary_idObszary`, `typWyjscia_idtypWyjscia`, `Pracownicy_idPracownicy`) ,

  INDEX `fk_Wyjścia_Obszary` (`Obszary_idObszary` ASC) ,

  INDEX `fk_Wyjścia_Pracownicy` (`Pracownicy_idPracownicy` ASC) ,

  INDEX `fk_Wyjścia_typWyjscia1` (`typWyjscia_idtypWyjscia` ASC) ,

  CONSTRAINT `fk_Wyjścia_Obszary`

    FOREIGN KEY (`Obszary_idObszary` )

    REFERENCES `xxx`.`obszary` (`idObszary` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Wyjścia_Pracownicy`

    FOREIGN KEY (`Pracownicy_idPracownicy` )

    REFERENCES `xxx`.`pracownicy` (`idPracownicy` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Wyjścia_typWyjscia1`

    FOREIGN KEY (`typWyjscia_idtypWyjscia` )

    REFERENCES `xxx`.`typWyjscia` (`idtypWyjscia` )

    ON DELETE CASCADE

    ON UPDATE CASCADE)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`sprzet` (

  `idSprzęt` INT(11) NOT NULL AUTO_INCREMENT ,

  `typ` VARCHAR(45) NOT NULL ,

  `numer` VARCHAR(45) NOT NULL ,

  `Komentarz` TEXT NULL DEFAULT NULL ,

  PRIMARY KEY (`idSprzęt`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`zwierz` (

  `idZwierz` INT(11) NOT NULL AUTO_INCREMENT ,

  `gatunek` VARCHAR(45) NOT NULL ,

  `wsp_x` FLOAT NOT NULL ,

  `wsp_y` FLOAT NOT NULL ,

  `Wyjścia_idWyjścia` INT(11) NOT NULL DEFAULT NULL ,

  `liczba` INT(11) NULL DEFAULT NULL ,

  `płeć` TINYINT(1) NULL DEFAULT NULL ,

  `wiek` TINYINT(4) NULL DEFAULT NULL ,

  `zachowanie` TEXT NULL DEFAULT NULL ,

  `wysokosc` FLOAT NULL DEFAULT NULL ,

  `kierunek` VARCHAR(2) NULL DEFAULT NULL ,

  `grupa` VARCHAR(10) NULL DEFAULT NULL ,

  `uwagi` TEXT NULL DEFAULT NULL ,

  PRIMARY KEY (`idZwierz`, `Wyjścia_idWyjścia`) ,

  INDEX `fk_Zwierz_Wyjścia` (`Wyjścia_idWyjścia` ASC) ,

  CONSTRAINT `fk_Zwierz_Wyjścia`

    FOREIGN KEY (`Wyjścia_idWyjścia` )

    REFERENCES `xxx`.`wyjscia` (`idWyjścia` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`pogoda` (

  `idPogoda` INT(11) NOT NULL AUTO_INCREMENT ,

  `godzina` VARCHAR(45) NULL DEFAULT NULL ,

  `zachmurzenie` VARCHAR(45) NULL DEFAULT NULL ,

  `temperatura` VARCHAR(45) NULL DEFAULT NULL ,

  `opad` VARCHAR(45) NULL DEFAULT NULL ,

  `Wyjścia_idWyjścia` INT(11) NOT NULL DEFAULT NULL ,

  PRIMARY KEY (`idPogoda`, `Wyjścia_idWyjścia`) ,

  INDEX `fk_Pogoda_Wyjścia` (`Wyjścia_idWyjścia` ASC) ,

  CONSTRAINT `fk_Pogoda_Wyjścia`

    FOREIGN KEY (`Wyjścia_idWyjścia` )

    REFERENCES `xxx`.`wyjscia` (`idWyjścia` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`czasPracy` (

  `idCzasPracy` INT(11) NOT NULL AUTO_INCREMENT ,

  `godzinaPrzyjscia` TIME NOT NULL ,

  `godzinaWyjscia` TIME NOT NULL ,

  `data` DATE NOT NULL ,

  `pracownicy_idPracownicy` INT(11) NOT NULL DEFAULT NULL ,

  `powodNieobecnosci_idpowodNieobecnosci` INT(11) NOT NULL ,

  PRIMARY KEY (`idCzasPracy`, `pracownicy_idPracownicy`) ,

  INDEX `fk_CzasPracy_Pracownicy` (`pracownicy_idPracownicy` ASC) ,

  INDEX `fk_czasPracy_powodNieobecnosci1` (`powodNieobecnosci_idpowodNieobecnosci` ASC) ,

  CONSTRAINT `fk_CzasPracy_Pracownicy`

    FOREIGN KEY (`pracownicy_idPracownicy` )

    REFERENCES `xxx`.`pracownicy` (`idPracownicy` )

    ON DELETE NO ACTION

    ON UPDATE CASCADE,

  CONSTRAINT `fk_czasPracy_powodNieobecnosci1`

    FOREIGN KEY (`powodNieobecnosci_idpowodNieobecnosci` )

    REFERENCES `xxx`.`typNieobecnosci` (`idpowodNieobecnosci` )

    ON DELETE CASCADE

    ON UPDATE CASCADE)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`sprzet_has_wyjscia` (

  `Sprzęt_idSprzęt` INT(11) NOT NULL ,

  `Wyjścia_idWyjścia` INT(11) NOT NULL ,

  PRIMARY KEY (`Sprzęt_idSprzęt`, `Wyjścia_idWyjścia`) ,

  INDEX `fk_Sprzęt_has_Wyjścia_Sprzęt` (`Sprzęt_idSprzęt` ASC) ,

  INDEX `fk_Sprzęt_has_Wyjścia_Wyjścia` (`Wyjścia_idWyjścia` ASC) ,

  CONSTRAINT `fk_Sprzęt_has_Wyjścia_Sprzęt`

    FOREIGN KEY (`Sprzęt_idSprzęt` )

    REFERENCES `xxx`.`sprzet` (`idSprzęt` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Sprzęt_has_Wyjścia_Wyjścia`

    FOREIGN KEY (`Wyjścia_idWyjścia` )

    REFERENCES `xxx`.`wyjscia` (`idWyjścia` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`uslugi` (

  `iduslugi` INT(11) NOT NULL AUTO_INCREMENT ,

  `nazwa` VARCHAR(100) NOT NULL ,

  `cena` FLOAT NOT NULL ,

  `vat` INT(11) NOT NULL ,

  PRIMARY KEY (`iduslugi`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`faktury` (

  `idfaktury` INT(11) NOT NULL AUTO_INCREMENT ,

  `dataSprzedarzy` DATE NULL DEFAULT NULL ,

  `dataWysstawienia` DATE NULL DEFAULT NULL ,

  `sposobZaplaty` VARCHAR(45) NULL DEFAULT NULL ,

  `nrFaktury` VARCHAR(45) NULL DEFAULT NULL ,

  `stan` VARCHAR(45) NULL DEFAULT NULL ,

  `odestki` VARCHAR(45) NULL DEFAULT NULL ,

  `terminPlatnosci` DATE NULL DEFAULT NULL ,

  `Firmy_idFirmy` INT(11) NOT NULL ,

  PRIMARY KEY (`idfaktury`) ,

  INDEX `fk_faktury_Firmy1` (`Firmy_idFirmy` ASC) ,

  CONSTRAINT `fk_faktury_Firmy1`

    FOREIGN KEY (`Firmy_idFirmy` )

    REFERENCES `xxx`.`firmy` (`idFirmy` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`faktury_has_uslugi` (

  `faktury_idfaktury` INT(11) NOT NULL ,

  `uslugi_iduslugi` INT(11) NOT NULL ,

  PRIMARY KEY (`faktury_idfaktury`, `uslugi_iduslugi`) ,

  INDEX `fk_faktury_has_uslugi_uslugi1` (`uslugi_iduslugi` ASC) ,

  CONSTRAINT `fk_faktury_has_uslugi_faktury1`

    FOREIGN KEY (`faktury_idfaktury` )

    REFERENCES `xxx`.`faktury` (`idfaktury` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_faktury_has_uslugi_uslugi1`

    FOREIGN KEY (`uslugi_iduslugi` )

    REFERENCES `xxx`.`uslugi` (`iduslugi` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`typNieobecnosci` (

  `idpowodNieobecnosci` INT(11) NOT NULL AUTO_INCREMENT ,

  `powod` VARCHAR(45) NULL DEFAULT NULL ,

  PRIMARY KEY (`idpowodNieobecnosci`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`typWyjscia` (

  `idtypWyjscia` INT(11) NOT NULL AUTO_INCREMENT ,

  `typ` VARCHAR(45) NOT NULL ,

  PRIMARY KEY (`idtypWyjscia`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`punkty` (

  `idpunkty` INT(11) NOT NULL AUTO_INCREMENT ,

  `typ` VARCHAR(45) NULL DEFAULT NULL ,

  `wspX` FLOAT NULL DEFAULT NULL ,

  `wspY` FLOAT NULL DEFAULT NULL ,

  `typPunktu_idtypPunktu` INT(11) NOT NULL ,

  PRIMARY KEY (`idpunkty`) ,

  INDEX `fk_punkty_typPunktu1` (`typPunktu_idtypPunktu` ASC) ,

  CONSTRAINT `fk_punkty_typPunktu1`

    FOREIGN KEY (`typPunktu_idtypPunktu` )

    REFERENCES `xxx`.`typPunktu` (`idtypPunktu` )

    ON DELETE CASCADE

    ON UPDATE CASCADE)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;



CREATE  TABLE IF NOT EXISTS `xxx`.`typPunktu` (

  `idtypPunktu` INT(11) NOT NULL AUTO_INCREMENT ,

  `typ` VARCHAR(45) NULL DEFAULT NULL ,

  `opis` TEXT NULL DEFAULT NULL ,

  PRIMARY KEY (`idtypPunktu`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;





SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Starting thread...

Thread started

15009 INFO Connecting to SSH server at 192.168.0.150:22...

New client connection

client connection established

15009 INFO Tunnel now open ('127.0.0.1', 1421) -> ('192.168.0.150', 22) -> ('localhost', 3306)

Executing SQL script in server

ERROR: Error 1005: Can't create table './xxx/obszary.frm' (errno: 150)





CREATE  TABLE IF NOT EXISTS `xxx`.`obszary` (

  `idObszary` INT(11) NOT NULL AUTO_INCREMENT ,

  `nazwa` VARCHAR(45) NOT NULL ,

  `ptaki` TINYINT(1) NOT NULL ,

  `nietoperze` TINYINT(1) NULL DEFAULT NULL ,

  `Inwestycja_Nazwa` VARCHAR(45) NULL DEFAULT NULL ,

  `Pracownicy_idPracownicy` INT(11) NULL DEFAULT NULL ,

  `punkty_idpunkty` INT(11) NULL DEFAULT NULL ,

  PRIMARY KEY (`idObszary`, `Inwestycja_Nazwa`) ,

  INDEX `fk_Obszary_Inwestycja` (`Inwestycja_Nazwa` ASC) ,

  INDEX `fk_Obszary_Pracownicy` (`Pracownicy_idPracownicy` ASC) ,

  INDEX `fk_Obszary_punkty1` (`punkty_idpunkty` ASC) ,

  CONSTRAINT `fk_Obszary_Inwestycja`

    FOREIGN KEY (`Inwestycja_Nazwa` )

    REFERENCES `xxx`.`inwestycja` (`Nazwa` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Obszary_Pracownicy`

    FOREIGN KEY (`Pracownicy_idPracownicy` )

    REFERENCES `xxx`.`pracownicy` (`idPracownicy` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Obszary_punkty1`

    FOREIGN KEY (`punkty_idpunkty` )

    REFERENCES `xxx`.`punkty` (`idpunkty` )

    ON DELETE CASCADE

    ON UPDATE CASCADE)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci



SQL script execution finished: statements: 5 succeeded, 1 failed

Sprawdziłem już i kolejność i referencje i dalej jakoś nie mogę znaleźć błędu.
Z błędu wynika, że nie może utworzyć referencji, wcześniej powodem był inny engine tabeli do ktorej się odnosiła ale teraz wszystkie są takie same.

0

ten blad sugeruje ze cos nie pasuje mu z kluczami etc.
zrob klucz glowny tylko na idObszary, skoro to pole jest autoincrement, to po co ci klucz glowny na 2 polach
i sprobuj bez dodatkowych indexow

0

Wiem że chodzi o relacje. Drugi klucz faktycznie jest zbędny, ale to kod wygenerowany przez aplikację. Tabel jest tak dużo, że całości już nie ogarniam.
Więc tak klucz skasowany.
I działa przy usunięciu zależności tzn takie polecenie

CREATE  TABLE IF NOT EXISTS `xxx`.`obszary` (

  `idObszary` INT(11) NOT NULL AUTO_INCREMENT ,

  `nazwa` VARCHAR(45) NOT NULL ,

  `ptaki` TINYINT(1) NOT NULL ,

  `nietoperze` TINYINT(1) NULL DEFAULT NULL ,

  `Pracownicy_idPracownicy` INT(11) NULL DEFAULT NULL ,

  PRIMARY KEY (`idObszary`) ,

  INDEX `fk_Obszary_Pracownicy` (`Pracownicy_idPracownicy` ASC) ,

  CONSTRAINT `fk_Obszary_Pracownicy`

    FOREIGN KEY (`Pracownicy_idPracownicy` )

    REFERENCES `xxx`.`pracownicy` (`idPracownicy` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;

Zależność do punktu jak było wcześniej nie ma znaczenia ale do inwestycji jest kluczowa więc nawet tymczasowo nie mogę z niej zrezygnować. Wklejam polecenie generujące tą tabelę bo to chyba w niej jest gdzieś błąd.

CREATE  TABLE IF NOT EXISTS `ansee`.`inwestycja` (

  `Nazwa` VARCHAR(45) NOT NULL ,

  `czasRozpoczecia` DATE NULL DEFAULT NULL ,

  `czasZakonczenia` DATE NULL DEFAULT NULL ,

  `Firmy_idFirmy` INT(11) NULL DEFAULT NULL ,

  `idInwestycja` INT(11) NOT NULL AUTO_INCREMENT ,

  INDEX `fk_Inwestycja_Firmy` (`Firmy_idFirmy` ASC) ,

  PRIMARY KEY (`idInwestycja`) ,

  CONSTRAINT `fk_Inwestycja_Firmy`

    FOREIGN KEY (`Firmy_idFirmy` )

    REFERENCES `ansee`.`firmy` (`idFirmy` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_polish_ci;
0

SOLVED

Program ustawia czasem dla kolumny która jest referencją(która jest kluczem) wartość NULL co być nie może.
No i mój błąd ustawiłem primary key zamiast unique index :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1