come da titolo, sto battagliando da diversi giorni con MySql Workbench (su Win xp Pro SP3, 32 bit); sto progettando un piccolo database locale che gestisce i miei contatti personali, con molti "metadati" a completamento delle informazioni; di seguito, intanto, posto lo screenshot del progetto (comprese le varie associazioni previste), giusto per aver un'idea, da parte vostra, se stia procedendo per il verso giusto:
Il problema nasce quando vado a verificare la correttezza del codice, per vedere se tutto è ok; e qui, ovviamente, i problemi; posto anche il relativo codice SQL, prodotto dal software:
- Codice: Seleziona tutto
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,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS `Contatti` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `Contatti` ;
-- -----------------------------------------------------
-- Table `Contatti`.`Professione`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Contatti`.`Professione` (
`idProfessione` INT NOT NULL AUTO_INCREMENT ,
`professione` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`idProfessione`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Contatti`.`Nazione`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Contatti`.`Nazione` (
`idNazione` INT NOT NULL AUTO_INCREMENT ,
`nazione` VARCHAR(20) NOT NULL ,
PRIMARY KEY (`idNazione`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Contatti`.`Comune`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Contatti`.`Comune` (
`idComune` INT NOT NULL AUTO_INCREMENT ,
`comune` VARCHAR(20) NOT NULL ,
`Nazione_idNazione` INT NOT NULL ,
PRIMARY KEY (`idComune`) ,
INDEX `fk_Comune_Nazione1_idx` (`Nazione_idNazione` ASC) ,
CONSTRAINT `fk_Comune_Nazione1`
FOREIGN KEY (`Nazione_idNazione` )
REFERENCES `Contatti`.`Nazione` (`idNazione` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Contatti`.`Contatto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Contatti`.`Contatto` (
`idContatto` INT NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR(30) NULL ,
`cognome` VARCHAR(30) NULL ,
`via` VARCHAR(45) NULL ,
`tel_casa` INT NULL ,
`fax` INT NULL ,
`cellulare` INT NULL ,
`cellulare2` INT NULL ,
`email` VARCHAR(25) NULL ,
`descrizione` TEXT NULL ,
`sito_web` VARCHAR(25) NULL ,
`Comune_idNazione` INT NOT NULL ,
`Professione_idProfessione` INT NOT NULL ,
`Comune_idComune` INT NOT NULL ,
PRIMARY KEY (`idContatto`) ,
INDEX `fk_Contatto_Professione1_idx` (`Professione_idProfessione` ASC) ,
INDEX `fk_Contatto_Comune1_idx` (`Comune_idComune` ASC) ,
CONSTRAINT `fk_Contatto_Professione1`
FOREIGN KEY (`Professione_idProfessione` )
REFERENCES `Contatti`.`Professione` (`idProfessione` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Contatto_Comune1`
FOREIGN KEY (`Comune_idComune` )
REFERENCES `Contatti`.`Comune` (`idComune` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Contatti`.`Sport`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Contatti`.`Sport` (
`idSport` INT NOT NULL AUTO_INCREMENT ,
`sport` VARCHAR(25) NOT NULL ,
PRIMARY KEY (`idSport`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Contatti`.`Contatto_Sport`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Contatti`.`Contatto_Sport` (
`Contatto_idContatto` INT NOT NULL ,
`Sport_idSport` INT NOT NULL ,
PRIMARY KEY (`Contatto_idContatto`, `Sport_idSport`) ,
INDEX `fk_Contatto_has_Sport_Sport1_idx` (`Sport_idSport` ASC) ,
INDEX `fk_Contatto_has_Sport_Contatto1_idx` (`Contatto_idContatto` ASC) ,
CONSTRAINT `fk_Contatto_has_Sport_Contatto1`
FOREIGN KEY (`Contatto_idContatto` )
REFERENCES `Contatti`.`Contatto` (`idContatto` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Contatto_has_Sport_Sport1`
FOREIGN KEY (`Sport_idSport` )
REFERENCES `Contatti`.`Sport` (`idSport` )
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;
-- -----------------------------------------------------
-- Data for table `Contatti`.`Professione`
-- -----------------------------------------------------
START TRANSACTION;
USE `Contatti`;
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (200, 'Architetto');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (201, 'Geometra');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (202, 'Ragioniere');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (203, 'Commercialista');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (204, 'Agente immobiliare');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (205, 'Agente di commercio');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (206, 'Informatico');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (207, 'Commerciante');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (208, 'Impiegato');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (209, 'Operaio');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (210, 'Elettricista');
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (211 , 'Studente');
COMMIT;
-- -----------------------------------------------------
-- Data for table `Contatti`.`Nazione`
-- -----------------------------------------------------
START TRANSACTION;
USE `Contatti`;
INSERT INTO `Contatti`.`Nazione` (`idNazione`, `nazione`) VALUES (30, 'Italia');
INSERT INTO `Contatti`.`Nazione` (`idNazione`, `nazione`) VALUES (31, 'Romania');
INSERT INTO `Contatti`.`Nazione` (`idNazione`, `nazione`) VALUES (32, 'Albania');
INSERT INTO `Contatti`.`Nazione` (`idNazione`, `nazione`) VALUES (33, 'Marocco');
COMMIT;
-- -----------------------------------------------------
-- Data for table `Contatti`.`Comune`
-- -----------------------------------------------------
START TRANSACTION;
USE `Contatti`;
INSERT INTO `Contatti`.`Comune` (`idComune`, `comune`, `Nazione_idNazione`) VALUES (10, 'Firenze', 30);
INSERT INTO `Contatti`.`Comune` (`idComune`, `comune`, `Nazione_idNazione`) VALUES (11, 'Prato', 30);
INSERT INTO `Contatti`.`Comune` (`idComune`, `comune`, `Nazione_idNazione`) VALUES (12, 'Pistoia', 30);
INSERT INTO `Contatti`.`Comune` (`idComune`, `comune`, `Nazione_idNazione`) VALUES (13, 'Empoli', 30);
INSERT INTO `Contatti`.`Comune` (`idComune`, `comune`, `Nazione_idNazione`) VALUES (14, 'Quarrata ', 30);
INSERT INTO `Contatti`.`Comune` (`idComune`, `comune`, `Nazione_idNazione`) VALUES (15, 'Scandicci', 30);
COMMIT;
-- -----------------------------------------------------
-- Data for table `Contatti`.`Contatto`
-- -----------------------------------------------------
START TRANSACTION;
USE `Contatti`;
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1000, 'Alessandro', 'Tabani', NULL, 0573.717202, NULL, 339.5037585, NULL, 'a.tabani1976@libero.it', 'Ex allievo Krav Maga, compagno di Elena Fabbri', NULL, 30, 210, 14);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1001, 'Alessandro', 'Turi', NULL, 0573.72037, NULL, 331.9900690, NULL, 'alex.t.92@hotmail.it', 'Ex allievo Krav Maga, studente per Geometra, volontario Misericordia Pistoia', 'www.sealt.it', 30, 211, 14);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1002, 'Alessandro', 'Paolercio', NULL, NULL, NULL, 389.6854007, NULL, 'bubugnigni@hotmail.it', 'Ex allievo Krav Maga, flashato per ciò che riguarda l\'ambito militare', NULL, 30, 209, 14);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1003, 'Ahmid ', 'Tali', NULL, NULL, NULL, 338.1057456, NULL, NULL, 'Ex assistente istruttore Krav Maga, lavora a Coverciano, nel magazzino della A.C. Fiorentina', NULL, 34, 208, 10);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1004, 'Andrea ', 'Magni', NULL, NULL, NULL, 334.8988824, NULL, 'andre_smoking91_@hotmail.it', 'Ex allievo Krav Maga, mezzo tossico', NULL, 30, 211, 14);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1005, 'Antonio', 'Giacummo', NULL, NULL, NULL, 320.3070293, NULL, 'info@f2awebstudio.com', 'Ex allievo Krav Maga', NULL, 30, 206, 10);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1006, 'Camilla', 'Corezzi', NULL, NULL, NULL, 347.1836162, NULL, 'camicore@hotmail.it', 'Ex allieva Krav Maga', NULL, 30, 211, 10);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1007, 'Cinzia', 'Candia', 'Via Don Perosi 02', NULL, NULL, 328.2939787, 345.5677535, 'chicca89.c@hotmail.it', 'Ex allieva Krav Maga', NULL, 30, 211, 10);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1008, 'Claudio', 'Fucile', NULL, NULL, NULL, 340.5813774, NULL, 'claudio.fucile@gmail.com', 'Assistente istruttore Krav Maga, fumettista', NULL, 30, 207, 10);
INSERT INTO `Contatti`.`Contatto` (`idContatto`, `nome`, `cognome`, `via`, `tel_casa`, `fax`, `cellulare`, `cellulare2`, `email`, `descrizione`, `sito_web`, `Comune_idNazione`, `Professione_idProfessione`, `Comune_idComune`) VALUES (1009, 'Cristiano', 'Pecchioli', 'Via Crocetti 12', NULL, NULL, 339.2820783, 335.5370994, 'cripecch@tin.it', 'Istruttore Krav Maga', NULL, 30, 210, 10);
COMMIT;
-- -----------------------------------------------------
-- Data for table `Contatti`.`Sport`
-- -----------------------------------------------------
START TRANSACTION;
USE `Contatti`;
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (100, 'Karate');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (101, 'Krav Maga');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (102, 'Judo');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (103, 'Muay Thai');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (104, 'Kick Boxe');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (105, 'Boxe');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (106, 'MMA');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (107, 'Tiro con l\'arco');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (108, 'Pallavolo');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (109, 'Basket');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (110, 'Nuoto');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (111, 'Corsa');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (112, 'Bicicletta');
INSERT INTO `Contatti`.`Sport` (`idSport`, `sport`) VALUES (113 , 'Tiro in poligono');
COMMIT;
-- -----------------------------------------------------
-- Data for table `Contatti`.`Contatto_Sport`
-- -----------------------------------------------------
START TRANSACTION;
USE `Contatti`;
INSERT INTO `Contatti`.`Contatto_Sport` (`Contatto_idContatto`, `Sport_idSport`) VALUES (1008, 101);
INSERT INTO `Contatti`.`Contatto_Sport` (`Contatto_idContatto`, `Sport_idSport`) VALUES (1009, 101);
COMMIT;
Alla fine del completamento (Forward engineering), mi restituisce puntualmente un errore:
- Codice: Seleziona tutto
Executing SQL script in server
ERROR: Error 1062: Duplicate entry '200' for key 'PRIMARY'
INSERT INTO `Contatti`.`Professione` (`idProfessione`, `professione`) VALUES (200, 'Architetto')
SQL script execution finished: statements: 16 succeeded, 1 failed
Il problema è che quando vado a correggere il suddetto errore, me ne compare un altro identico (Duplicate key), ma con valori d'attributi e values differenti; tradotto: ne correggo uno, e ne spunta fuori un altro (della solita "razza").
Allora mi son messo a spulciare il diagramma, passo per passo, e sinceramente non vedo queste decine di duplicati che puntualmente si materializzano via via; a questo punto, mi rimetto a voi, altrimenti cancello tutto e ricomincio da capo, magari usando PhpMyadmin.
Ultima cosa: non c'è verso settare alcuna password, né tantomeno un utente, per accedere al database; mi da sempre credenziali non valide, o scemenze analoghe. Praticamente, devo ogni volta connettermi, usando i parametri di default: cioè root per l'utente e la password "automatica", generata dal sistema; altro bel problema.
grazie mille a tutti, spero che almeno questo post riceva risposta.
grazie .