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

    [mysql/php], ma le FOREIGN KEY sono obbligatorie ?

    Ciao a tutti.
    premesso che ho cercato abbastanza a lungo sul forum senza trovare una risposta definitiva al mio quesito... sto lavorando ad un gestionale particolarmente impegnativo (per me), basato su php/mysql-phpmyadmin etcc..

    Nella progettazione sono stato attento a come strutturare le tabelle, applicando tutte le regole per una buona normalizzazione, e applicando indici di vario tipo per ottimizzare le query.

    In php ho costruito query anche complicate (5-6 campi da visualizzare basati su 5 inner join+left join+where), ottenendo comunque performance direi buone, sempre sotto 0.004 sec. di elaborazione. Attraverso EXPLAIN SELECT mi sembra di vedere che gli indici vengano spremuti bene, quindi nel complesso credo di procedere bene.

    I dubbi riguardano le FOREIGN KEY, in particolare:

    - ho capito che danno la possibilità di eseguire delle operazioni in automatico (update/delete) fra due tabelle collegate da un indice dello stesso tipo, ma mi sembra un po' "pericoloso" e anche "rigido" automatizzare il tutto in questo modo ! Al momento il mio gestionale non prevede cancellazione di record da tabelle "padre" (ad esempio "cliente"), e anche le cancellazioni/modifiche di record delle tabelle figlie (ad esempio "ordini lavorazione") sono molto limitate in numero e comunque verrebbero fatte ad-hoc manualmente su phpmyadmin.In pratica non sarebbe permesso ad esempio cancellare un cliente, ma solo aggiungerne di nuovi
    Arriverei quindi alla conclusione di preferire singole query di update/delete separate tramite php, e non meccanismi automatizzati...

    - non ho capito se la "robustezza" e le performance del database possono migliorare se genero delle foreign key fra le tabelle o se in qualche modo "dico" a mysql che ci sono legami fra due colonne indicizzate che appartengono a tabelle diverse. Come scritto sopra la mia struttura ha una sua logica, che però è al momento esplicitata solo alivello cartaceo .

    Una buona programmazione in php può - in sintesi - evitare violazioni di integrità del database ?

    Grazie come sempre per qualsiasi contributo.



    Stefano

  2. #2

    Re: [mysql/php], ma le FOREIGN KEY sono obbligatorie ?

    Originariamente inviato da StefanoC
    Una buona programmazione in php può - in sintesi - evitare violazioni di integrità del database ?
    Se utilizzi il motore MyIsam per forza di cose devi implementare gli accorgimenti necessari per salvaguardare l'integrita' del database col php. Se utilizzi le InnoDB puoi sfruttare le foreign key, transazioni, ecc. messe a disposizione da mysql. Esistono pure i trigger, funzioni per eseguire determinati controlli.

    Tornando alla domanda ... certo che si.


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

  3. #3
    Ciao Piero.mac,

    grazie del feedback,
    in effetti ci speravo in una tua risposta, vedo che non manchi mai quando si parla di db !

    certamente sono in InnoDB, mi ero dimenticato di precisarlo.

    Riguardo al punto 1 che mi dici ?
    posso "sopperire" agli automatismi delle foreign con delle query a parte ? Oppure sbaglio io e le foreign sono usate dal 99% dei professionisti ?
    Non so perchè ma coi db preferisco tenere tutto sotto controllo, ovviamente è una mia fisima !
    Ci sono troppe query in ballo che richiamano tabelle su tabelle, e poi quando si parla di delete o update c'è sempre il solito esempio "classico" del database con autori e libri.. ormai lo sanno anche i muri di casa mia che se cancello l'autore, avrò i record dei libri orfani ...che pizza , non trovo mai nulla di un filo diverso o più complesso...

    Sul punto 2 invece ? hai qualche notizia o sono io nella fantascienza ?

    Grazie e ciao,
    Stefano

  4. #4
    Le foreign keys hanno anche la proprieta' ON DELETE NO ACTION
    La preoccupazione che hai tu avviene quando hai ON DELETE CASCADE


    Se utilizzi quella proprieta' dovresti avere il vantaggio delle foreign keys ed il comportamento che desideri.
    Nella vita c'e' sempre da imparare, c'e' chi impara a fare e chi impara ad aspettare.

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.