- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema MYSQL e vincoli di integrità referenziali
- 
							
							
							
							
							Problema MYSQL e vincoli di integrità referenzialiSalve, spero che qulacuno possa aiutarmi con il mio problema. 
 Ho creato 2 tabelle con vincoli referenziali il cui codice posto qui sotto:DROP TABLE IF EXISTS materials_submitted;
 CREATE TABLEmaterials_submitted(
 idtinyint(4) unsigned NOT NULL auto_increment,
 codevarchar(4) NOT NULL default '',
 namevarchar(60) NOT NULL default '',
 journalvarchar(60) default NULL,
 volumevarchar(20) default NULL,
 numbervarchar(20) default NULL,
 pagesvarchar(20) default '0',
 authorsvarchar(60) NOT NULL default '',
 publishervarchar(50) default NULL,
 index_termstinytext NOT NULL,
 book_seriesvarchar(90) default NULL,
 abstracttinytext,
 filevarchar(255) default NULL,
 linkvarchar(255) default NULL,
 PRIMARY KEY (id),
 INDEX IdNameIndex (authors),
 INDEX IdNameJMIndex (name)
 ) ENGINE=INNODB;DROP TABLE IF EXISTS authors_temp;
 CREATE TABLEauthors_temp(
 id_temp tinyint(4) unsigned NOT NULL auto_increment,
 name_authors varchar(60) NOT NULL default '',
 name_JM varchar(60) NOT NULL default '',
 affiliation varchar(120),
 contact varchar(120),
 PRIMARY KEY (id_temp,name_JM,name_authors),
 INDEX IdNameIndex (name_authors),
 INDEX IdNameJMIndex (name_JM),
 FOREIGN KEY(name_authors) REFERENCES materials_submitted(authors) ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(name_JM) REFERENCES materials_submitted(name) ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE = INNODB ;Il mio problema è il seguente:dovrei poter inserire nella tabella materials_submitted vari record anche con il campo authors uguale. 
 Quando inserisco 2 o piu record con campo authors sempre diverso, non ci sono problemi, i vincoli referenziali funzionano perfettamente anche quando rinomino il campo name_authors (della tabella authors_temp) con valori uguali.
 Il problema lo ho quando inserisco per esempio due o piu record con il campo authors uguale ,per esempio è sempre authors="pippo".Quando poi esempio effettuo l'update di un record con il campo authors="pippo", mi aggiorna anche il campo authors di tutti ir ecord che hanno authors="pippo".
 IO invece voglio che solo il campo authors del record selezionati da me sia ggiorni.
 Non so se sono stato abbastanza chiaro.Qualcuno sa cosa posso fare per risolvere il problema???
 Grazie
 
- 
							
							
							
							
							
Oltre ad author hai bisogno di un'altra informazione che leghi l'autore ad uno o più materiali inviati. Devi inserire un nuovo campo in authors_temp dove memorizzare anche il "gruppo" di invio, che server a legare a quel particolare record 1 o più righe di materiali. Lo stesso campo va creato in materials_submitted. Ora la chiave non è più solo author, ma diventà author + gruppo. In questo modo cambiando l'author di un gruppo specifico il sistema aggiornerà solo le righe collegate presenti in materials_submitted. Di conseguenza dovrai cambiare: 
 FOREIGN KEY(name_authors) REFERENCES materials_submitted(authors) ON DELETE CASCADE ON UPDATE CASCADEin FOREIGN KEY(name_authors, group_authors) REFERENCES materials_submitted(authors,groups) ON DELETE CASCADE ON UPDATE CASCADE
 
- 
							
							
							
							
							Ma a me serve il contrario, cioè quando cambio l'author di materials_submitted deve aggiornare solo le righe o la riga presente in author_temp. 
 é lo stesso?
 E poi non ho ben capito il nuovo campo group cosa dovrebbe contenere?
 I
 
- 
							
							
							
							
							Rettifico; 
 Ma a me serve il contrario, cioè quando cambio l'author di materials_submitted deve aggiornare la riga(solo la riga) presente in author_temp.
 é lo stesso?
 
- 
							
							
							
							
							Problema ,risolto.In realtà il campo group che tu mi hai consigliato di aggiungere celo avevo già, è il campo id. 
 Ora tutto funziona.Grazie e ciao