Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Errore 1005

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    63

    Errore 1005

    Ciao a tutti sono nuovo di mysql..........................sto facendo un progetto e quindi sto creando delle tabelle solo che ricevo il seguente errore:

    1005 (HY000): Can't create table 'webutilities.Gruppi' (errno: 150)

    In precedenza avevo già creato delle tabelle e le avevo popolate:

    codice:
    CREATE TABLE IF NOT EXISTS UtentiR( 	
    	EmailR varchar(50) PRIMARY KEY,
    	Nome char(30),
    	Cognome char(30),
    	Data date,
    	Sesso char(1),
    	Password varchar(12) not null,
    	Ut varchar(2),
    	Administrator varchar(2)
    ) ENGINE=INNODB;
    
    
    CREATE TABLE IF NOT EXISTS Rubriche( 	
    	id_Num int not null AUTO_INCREMENT,	
    	UtenteR	varchar(50),
    	Rubrica varchar(20),	
    	EmailC varchar(50),	
    	Nome char(30),
    	Cognome char(30),
    	Telefono varchar(15),
    	Cellulare varchar(15),
    	Fax varchar(15),
    	Citta varchar(30),	
    	Indirizzo varchar(30),
    	SitoWeb varchar(100),
    	Visibilita char(15) not null,
    	UNIQUE(id_Num),	
    	PRIMARY KEY(UtenteR,Rubrica,EmailC),
    	INDEX Ind_Autore(UtenteR),
    	FOREIGN KEY(UtenteR) REFERENCES UtentiR(EmailR) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;
    adesso mi servirebe un altra tabella la seguente:

    codice:
    CREATE TABLE IF NOT EXISTS Gruppi(
    	
    	id_Contact int,
    	Rubrica varchar(20),
    	ut_associato varchar(50),
    	PRIMARY KEY(id_Contact, Rubrica, ut_associato),
    	FOREIGN KEY(id_Contact) REFERENCES Rubriche (id_Num),
    	FOREIGN KEY(Rubrica) REFERENCES Rubriche (Rubrica),	
    	FOREIGN KEY(ut_associato) REFERENCES UtentiR (EmailR) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;
    ma non mi permette di crearla mi mostra il messaggio citato sopra

    Qualcuno può darmi una spiegazione e se possibile una soluzione?

  2. #2
    hai notevoli incongruenze gia' nella creazione delle tabelle precedenti.

    definire chiave primaria un campo email non e' una buona idea. Quale ordinamento ti aspetteresti da una chiave simile? se ti serve che il campo sia unico usa l'indice UNIQUE.
    Inoltre un campo di tipo char/varchar non ottimizza di certo la chiave primaria.

    Lo stesso per la seconda tabella. L'auto increment deve essere chiave primaria. Creare una chiave primaria multicampo e con 150 caratteri ascii direi che sia un evento fantasioso.

    Diciamo che in linea di massima dovresti rivedere profondamente il tuo progetto.


    edit.... dimenticavo: e' inutile creare tre tabelle e duplicare tutti quei campi. Li devi mettere una sola volta e poi relazionare l'id alle altre tabelle (dove serve ovviamente)

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    63
    Per la 1 tabella:

    dovrei creare un indice unique oppure rendere email unique

    Per la 2 tabella:

    rendo l'indice id_Num chiave primaria

    Invece per la terza tabella non so come fare.........il progetto prevede che ogni utente possa definire un gruppo di contatti per il quale li viene ssegnato un un determinato numero di utenti che possono visualizzarlo.........come posso fare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    63
    Questa soluzione potrebbe andare:

    codice:
    
    CREATE TABLE IF NOT EXISTS Gruppo(
    	
    	EmailR varchar(50), 	
    	nomeGruppo varchar(50),
    	id_Gruppo int not null AUTO_INCREMENT,
    	UNIQUE(id_Gruppo),	
    	PRIMARY KEY(id_Gruppo),
    	FOREIGN KEY(EmailR) REFERENCES UtentiR(EmailR) ON DELETE CASCADE ON UPDATE CASCADE
    
    ) ENGINE=INNODB;
    
    
    CREATE TABLE IF NOT EXISTS ContattiGruppi(
    	
    	id_Gruppo int,
    	emailC varchar(50),
    	PRIMARY KEY(id_Gruppo,emailC),
    	FOREIGN KEY(emailC) REFERENCES Rubriche (emailC) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;
    
    
    CREATE TABLE IF NOT EXISTS UtenteAss(
    
    	EmailR varchar(50),
    	id_Gruppo int,
    	PRIMARY KEY(id_Gruppo,EmailR),
    	FOREIGN KEY(EmailR) REFERENCES UtentiR(EmailR) ON DELETE CASCADE ON UPDATE CASCADE,
    	FOREIGN KEY(id_Gruppo int) REFERENCES Gruppo (id_Gruppo) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    63
    Chi mi pùò aiutare.....Prima ho creato la tabella utenti registrati poi ho creato la tabella rubriche dove per ogni rubrica creo il corrispettivo contatto


    codice:
    
    CREATE TABLE IF NOT EXISTS UtentiR( 	
    	EmailR varchar(20) PRIMARY KEY,
    	Nome char(30),
    	Cognome char(30),
    	Data date,
    	Sesso char(1),
    	Password varchar(12) not null,
    	Ut varchar(2),
    	Administrator varchar(2)
    ) ENGINE=INNODB;
    
    
    CREATE TABLE IF NOT EXISTS Rubriche( 	
    	id_Num int not null AUTO_INCREMENT,	
    	UtenteR	varchar(50),
    	Rubrica varchar(20),	
    	EmailC varchar(50),	
    	Nome char(30),
    	Cognome char(30),
    	Telefono varchar(15),
    	Cellulare varchar(15),
    	Fax varchar(15),
    	Citta varchar(30),	
    	Indirizzo varchar(30),
    	SitoWeb varchar(100),
    	Visibilita char(15) not null,
    	UNIQUE(id_Num),	
    	PRIMARY KEY(id_Num),
    	INDEX Ind_Autore(UtenteR),
    	FOREIGN KEY(UtenteR) REFERENCES UtentiR(EmailR) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;
    Ora sto cercando di creare dei gruppi di utenti che possono visualizzare solo determinati contatti io ho pensato di fare così:

    codice:
    CREATE TABLE IF NOT EXISTS AssUtGr(
    	
    	EmailR varchar(50), 	
    	nomeGruppo varchar(50),
    	PRIMARY KEY(nomeGruppo),
    	FOREIGN KEY(EmailR) REFERENCES UtentiR(EmailR) ON DELETE CASCADE ON UPDATE CASCADE
    
    ) ENGINE=INNODB;
    
    CREATE TABLE IF NOT EXISTS AssGrCt(
    	
    	nomeGruppo varchar(50),
    	id_Num int,
    	PRIMARY KEY(nomeGruppo,id_Num),
    	FOREIGN KEY(nomeGruppo) REFERENCES AssUtGr (nomeGruppo) ON DELETE CASCADE ON UPDATE CASCADE,	
    	FOREIGN KEY(id_Num) REFERENCES Rubriche (id_Num) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;
    
    CREATE TABLE IF NOT EXISTS AssGrOtherUt(
    
    	EmailR varchar(50),	
    	nomeGruppo varchar(50),
    	PRIMARY KEY(EmailR,nomeGruppo),
    	FOREIGN KEY(EmailR) REFERENCES UtentiR(EmailR) ON DELETE CASCADE ON UPDATE CASCADE,
    	FOREIGN KEY(nomeGruppo) REFERENCES AssGrOtherUt (nomeGruppo) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB;
    Secondo voi sta bene?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.