• User Newbie

    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 TABLE materials_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 TABLE authors_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


  • User Attivo

    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 CASCADE

    in

    FOREIGN KEY(name_authors, group_authors) REFERENCES materials_submitted(authors,groups)  ON DELETE CASCADE  ON UPDATE CASCADE

  • User Newbie

    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


  • User Newbie

    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?


  • User Newbie

    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