Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [mysql] problema foreign key

    Salve,sono nuova del forum e non so se è il posto giusto per fare questo genere di domande..però ci provo

    Mi trovo a dover rappresentare la situazione in figura
    http://img12.imageshack.us/img12/479/catturakoc.png
    (ho già dei dubbi dull'identificatore di responsabile scelto per cui se ho sbagliato ditemelo per favore XD)

    ho due foreign key
    foreign key: Struttura [Nome] ⊆ Responsabile [Nome]
    foreign key: Responsabile[Nome] ⊆Struttura[Nome]

    sulla prima ho dei dubbi per cui se già quella è sbagliata i miei problemi sono risolti...

    ma se così fosse dovrei creare una transazione con una stored procedure(1) e un trigger per poter effettuare gli inserimenti a causa del doppio vincolo.

    La transazione in questione dovrebbe
    disattivare le foreign key
    inserire le tuple
    riattivare le foreign key.

    Il trigger invece si dovrebbe attivare nel momento in cui inserisco delle strutture ed andare a chiamare la stored procedure(1).
    Dato che il trigger è relativo alla tabella struttura per andare a ritrovare la matricola e gli altri dati del responsabile relativo devo creare una seconda stored procedure che li trovi in modo tale da poterle inserire come parametri alla prima stored procedure creato no? è così?
    Ho iniziato a studiare queste cose oggi quindi potrei aver detto un sacco di cavolate..perdonatemi

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    personalmente non mi è chiaro nè perchè ti serva (servirebbe) un trigger, nè tantomeno una stored.

    Entrambi, per inciso, sono meccanismi poco efficienti (il primo) e poco utili (il secondo) a cagione dell'estrema "leggerezza" delle connessioni client-server mysql.

    ---
    Mio modestissimo consiglio: togli tutte le FK dal database, non usare trigger se non strettamente indispensabile (meglio mai), non usare stored procedure su mysql (che non è sql server).
    Se puoi non usare neppure campi SER (autoincrementanti) come chiavi, o meglio mettile (tanto se non le metti le piazza da solo innodb, visto che indicizza direttamente gli indici secondari da lì).
    Sposta l' "intelligenza" nell'applicazione, questo ti renderà estremamente più semplice "migrare" l'applicazione verso un database diverso.

    E, in ogni caso, estremamente più semplice il backup-restore dei dati (nonchè eventualmente la replicazione).
    ---
    Le FK sono state introdotte "di malavoglia" in mysql, storicamente non esistevano, ed ancor oggi hanno un supporto minimale rispetto a tanti altri RDBMS, ovvero in sostanza ti puppi un sacco di difetti, con solo qualche beneficio in cambio.

    - sempre di mysql si sta parlando, eh? -

  3. #3
    in realtà è un progetto con linee piuttosto obbligate (per cui non ho molta scelta) ed in ogni caso ho la necesità che l'applicazione sia "migrabile" e non viceversa e non posso implementare i vincoli a livello applicativo.
    Scelte implementative a parte...ho detto una cavolata?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da abysmal88
    in realtà è un progetto con linee piuttosto obbligate (per cui non ho molta scelta) ed in ogni caso ho la necesità che l'applicazione sia "migrabile" e non viceversa e non posso implementare i vincoli a livello applicativo.

    Certo che puoi, chi o cosa te lo vieta?
    Scelte implementative a parte...ho detto una cavolata?
    non ne ho idea, francamente non ho capito un granchè di quello che vuoi fare, nè perchè, nè come

  5. #5
    Certo che puoi, chi o cosa te lo vieta?
    è un progetto per l'università ed è il fatto che voglio passare l'esame ad impedirmelo
    non ne ho idea, francamente non ho capito un granchè di quello che vuoi fare, nè perchè, nè come
    Ottimo XD Mi spiego meglio.
    Devo fare in modo che il vincolo sia gestito dal DBMS per fare ciò inserisco le foreign key semplicemente.
    Il problema è che qua il vincolo è ciclico quindi non posso inserire una struttura senza aver definito il responsabile e viceversa quindi ho bisogno di creare una transazione che verrà chiamata dal trigger che si attiva nel momento in cui si vuole inserire una nuova tupla.
    La transazione in questione dovrebbe
    disattivare le foreign key
    inserire le tuple
    riattivare le foreign key.
    Il trigger relativo alla tabella struttura dovrebbe :
    recuperare i dati di responsabile
    chiamare la procedura fornendoli come parametri

    ho appena realizzato che forse dovrei fare lo stesso procedimento per anche per responsabile uff

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da abysmal88
    è un progetto per l'università ed è il fatto che voglio passare l'esame ad impedirmelo
    Cambia professore
    Ottimo XD Mi spiego meglio.
    Devo fare in modo che il vincolo sia gestito dal DBMS per fare ciò inserisco le foreign key semplicemente.
    Il problema è che qua il vincolo è ciclico quindi non posso inserire una struttura senza aver definito il responsabile e viceversa quindi ho bisogno di creare una transazione che verrà chiamata dal trigger che si attiva nel momento in cui si vuole inserire una nuova tupla.
    Disattivare i vincoli di integrità è una di quelle cose per le quali non ti avrei bocciato, bensì bruciato il libretto davanti agli occhi

    Vabbè dai son curioso di vedere che soluzione t'inventerai

  7. #7
    Disattivare i vincoli di integrità è una di quelle cose per le quali non ti avrei bocciato, bensì bruciato il libretto davanti agli occhi
    hihihihi non dirmi così che mi vengono le crisi nervose
    vabbè ma li disattivo all'interno della transazione e li riattivo al termine, l'operazione rimane comunque atomica o sbaglio?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da abysmal88
    hihihihi non dirmi così che mi vengono le crisi nervose
    vabbè ma li disattivo all'interno della transazione e li riattivo al termine, l'operazione rimane comunque atomica o sbaglio?
    francamente non lo so, è un approccio talmente "dirty" che non mi è mai venuto in mente di metterlo in piedi.
    sto uscendo, se trovo tempo e voglia magari ci guardo.

    resta il fatto che è quanto di meno pulito mi venga in mente

  9. #9
    ho trovato qualcosa di simile a quello che volevo fare
    http://www.dis.uniroma1.it/~savo/ese...azione%203.pdf
    http://www.dis.uniroma1.it/~savo/ese...uzione_es3.sql
    il punto in questione è il 9...se per curiosità qualcuno voleva dargli un'occhiata

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    commento breve:

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