- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- 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
(
id
tinyint(4) unsigned NOT NULL auto_increment,
code
varchar(4) NOT NULL default '',
name
varchar(60) NOT NULL default '',
journal
varchar(60) default NULL,
volume
varchar(20) default NULL,
number
varchar(20) default NULL,
pages
varchar(20) default '0',
authors
varchar(60) NOT NULL default '',
publisher
varchar(50) default NULL,
index_terms
tinytext NOT NULL,
book_series
varchar(90) default NULL,
abstract
tinytext,
file
varchar(255) default NULL,
link
varchar(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