Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Delete su relazioni: foreign key o query multiple?

    Salve a tutti

    Ho un database con diverse tabelle in relazione gerarchica tra loro:

    Gruppi
    - Sottoscrizioni
    - Offerte
    -- Opzioni offerte

    Ho bisogno che quanto un gruppo viene cancellato, vengano eliminate anche tutte le sottoscrizioni, le offerte e le opzioni legate a ciascuna offerta.

    Le relazioni tra le tabelle sono gestite tramite relativi id. Allo stato attuale su tutte le tabelle "figlie" sono impostate Foreign Key con ON DELETE CASCADE.

    Mi chiedevo se questo sistema è il migliore (in termini di affidabilità e prestazioni) o se è più consigliabile usare multiple query DELETE dentro transazioni.

    Grazie a tutti!

  2. #2
    Se l'impostazione delle foreign key e' corretta il controllo della integrita' referenziale viene fatta da se. O ti fidi oppure non usare le foreign key ma esegui tu manualmente il controllo referenziale come se lavorassi con le MyISAM.

    Se utilizzi il multidelete in caso di conflitto sulla cancellazione di qualche record ancora altrove referenziato (quindi non cancellabile) riceveresti un errore di query che dovresti gestire.

    Mi fiderei delle foreign key.

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

  3. #3
    Ciao Piero, grazie della risposta.

    In realtà non è che non mi fidi delle FK (tra l'altro ne ho poche, saranno una decina in tutto, facili da controllare). E' che non conoscendo bene i meccanismi software dietro MySQL, mi chiedevo se una FK sia più efficiente di una query diretta con WHERE.

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da scitrek
    mi chiedevo se una FK sia più efficiente di una query diretta con WHERE.
    Secondo me non è un problema di efficienza.

    Proprio la settimana scorsa un mio utente mi chiede:
    Il cliente Xxxxxx ha cambiato indirizzo,
    lo devo cancellare e rifare ????
    Chiaramente No
    e chiaramente NON aveva la cancellazione a catena attivata

    __________________________________________________ _____

    Diversamente avrebbe potuto in un sol colpo cancellare
    __ Cliente
    __ Ordini
    __ Preventivi
    __ Fatture
    ____ Eccetera


    __________________________________________________ __________

    E vero anche che se fai una query multipla di eliminazione il
    problema è identico

    Ma almeno sei al sicuro da utenti ( o anche da te stesso )
    che possono accedere direttamente al DB

    Saluti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.