- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema MYSQL e vincoli di integrità referenziali
-
Problema MYSQL e vincoli di integrità referenziali
Salve, 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