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

    Chiarimento su FOREIGN KEYS

    Sto affrontando le foreign keys e mi servirebbe un chiarimento

    allora io ho una tabella INNODB per gli articoli ed una tabella INNODB per gli autori

    la FOREIGN KEY l'ho impostata nella tabella articoli. In questo modo se io cancello l' autore di un articolo, anche l'articolo verrà cancellato in automatico ? oppure ho sbagliato la logica ?
    Un' altra cosa, se io ho la tabella COMMENTI posso impostargli la foreign key dell' autore inquesto modo verranno cancellati anche i commenti ?


    una volta impostato una foreign key non occorre allora definire un campo tabella con AUTORE_ID, giusto ?

    Grazie.

  2. #2
    nessuno sa darmi dei chiarimenti, oppure la domanda è talmente banale che non merita risposte ?

    :master:

  3. #3

    Re: Chiarimento su FOREIGN KEYS

    Originariamente inviato da lucker
    In questo modo se io cancello l' autore di un articolo, anche l'articolo verrà cancellato in automatico ? oppure ho sbagliato la logica ?
    Non è così che funziona.
    Sostanzialmente la chiave esterna nella tabella "articoli" ti garantisce che tutti gli articoli presenti in questa tabella presentano un valore di "autore" realmente esistente nella tabella "autore".

    Per effettuare l'operazione che desideri devi impostare un evento "ON DELETE" su quella chiave esterna che specifichi, appunto, che le tuple il cui autore viene cancellato dovranno essere anch'esse cancellate.

    Codice PHP:
    CREATE TABLE autore (
      
    idautore,
      
    nome,
      
    cognome,
      
    PRIMARY KEY (idautore)
    );

    CREATE TABLE articoli (
      
    idarticolo,
      
    idautore,
      
    titolo,
      
    FOREIGN KEY (idautoreREFERENCES autore(idautoreON DELETE CASCADE
    ); 
    per la sintatti precisa fai riferimento al manuale di MySQL, qui ho un po abbozzato
    Administrator of NAMDesign.Net

  4. #4
    sì, ma infatti sono impostate con ON DELETE CASCADE ETC....

    quello che chiedo è nella logica

    io ho 1 autore che scrive articoli al quale saranno poi associati eventuali commenti.

    Bene la logica dice

    se l' autore lo cancelli, i suoi articoli con i relativi commenti devono sparire oppure oscurati volendo.

    se cancello un articolo, anche i relativi commenti dovranno essere cancellati/oscurati

    bene, qualcosa mi dice che il modo migliore per mantenere l'integrità senza commettere errori è quello di utilizzare le foreign keys.

    Nella prima ipotesi la foreign si imposta nell' articolo così se cancello l' autore si dovrebbero cancellare i relativi articoli
    Nella seconda ipotesi la foreign la imposto nel commento, così se cancello l' articolo anche il commento verrà eliminato

    Quindi mi chiedo il mio ragionamento è giusto ? Oppure sono sballato..... ?

    tnx


    qualcuno mi dirà, prova e vedi che succede. giusto ! Ma siccome sono in fase di impostazione di tabelle, codice classi etc.... saperlo prima mi sarebbe un pò più d'aiuto.

  5. #5
    si, è giusto; a patto che questo per la tua applicazione vada bene.

    Cioè se cancellare dei dati, dei commenti, è per la tua applicazione lecito allora "no problem" è tutto corretto.

    Ti dico questo perchè ad esempio ci possono essere situazioni in cui il cancellare non è "lecito". Ad esempio se un cliente apre un ticket per un problema non è lecito cancellare il ticket aperto solo perchè si è scelto di cancellare quella categoria.

    Oppure in ambito bancario cancellare qualche transazione inerente qualche ambito...o in ambiti fiscali..etc etc.

    Quindi se nel comportamento della tua applicazione è lecito che questo possa succedere allora il modo in cui lo vuoi fare è corretto e manterrà l'integrità del tuo database.
    Administrator of NAMDesign.Net

  6. #6
    beh sì, l'ambito è quello informativo. §Quindi se un articolo non esiste più perché l'autore ha deciso di cancellarlo, allora non ha senso che i commenti ad esso continuino ad esistere.
    Per il discorso autore, magari non necessariamente con la cancellazione dell' autore poi si debbano perdere tutti gli articoli da lui scritti.......
    comunque mi interessava sapere se avevo capito la logica del ragionamento con le foreign

    tnx.

    ultima cosa, questa associazione poi è interrogabile oppure è fine a se stessa e serve solo al database engine ?

    Nel senso, se io ho l'articolo con la foreign autore, poi serve creare un campo nella tabella articolo AUTORE_ID ? per rintracciare l' autore di quell' articolo ?

  7. #7
    Originariamente inviato da lucker
    ultima cosa, questa associazione poi è interrogabile oppure è fine a se stessa e serve solo al database engine ?

    Nel senso, se io ho l'articolo con la foreign autore, poi serve creare un campo nella tabella articolo AUTORE_ID ? per rintracciare l' autore di quell' articolo ?
    una foreign key è sempre associata ad un attributo della tabella. quindi si, nella tabella articolo ci sarà un attributo (es. idautore) che sarà una chiave esterna di autore.


    Codice PHP:
    CREATE TABLE autore (
      
    id,
      
    nome,
      
    cognome,
      
    PRIMARY KEY (id)
    );

    CREATE TABLE articoli (
      
    id,
      
    autore_id,
      
    titolo,
      
    FOREIGN KEY (autore_idREFERENCES autore(idON DELETE CASCADE
    ); 
    Administrator of NAMDesign.Net

  8. #8
    sì, sì infatti ho fatto così....

    ma sono io che sono fuso ..

  9. #9
    umh.
    allora problemino ancora

    Mi è successo questo

    2 tabelle Autori e articoli

    Inizialmente avevo la foreign nella tabella articoli. Ma ho riscontrato un problema, in poche parole non mi faceva aggiungere più di un articolo perché c'era solo 1 autore. Allora ho invertito, ho definito la foreign nella tabella autore così ho potuto inserire tutti gli articoli che volevo, però aimé quando ho cancellato gli articoli mi ha cancellato anche l'autore. Avrebbe dovuto funzionare all' incontrario.......... quindi perché se definisco la foreign nella tabella articoli non mi faceva inserire più di 1 articolo ?


  10. #10
    ok, ora funziona tutto bene. Probabilmente la prima volta ho associato male le keys........

    sorry.

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.