Newsgroup: it.comp.software.database
Titolo: Ne capite di constraint?

Ho due tabelle
anagrafica
con i campi soliti + una campo id_azienda
azienda
con i campi soliti con il campo chiave id_azienda
sto cercando di aggiungere una constraint per evitare che vengano cancellati
i record di azienda quando già presenti in anagrafica, ma senza esito.
Mi aiutate?

Quale DB? :-)
-- 
---
Francesco Galli / Cinghiale Mannaro
Personal: 
http://cinghialemannaro.splinder.com
TMS project: 
http://tms.inera.it

 Quale DB? :-)
..a Francè ma che mi stai a pija per il c**o
Prima mi fai postare di qua e poi mi rispondi?
Cmq MYSQL

jasper ha scritto:

Che versione di MySQL? Deve essere > 3.23.44
Di che tipo sono le tabelle? Devono essere InnoDB.
Per la sintassi vedi il manuale alla voce _FOREIGN KEY Constraints_
-- 
L'ignoranza e' l'inizio del sapere, il sapere e' l'inizio della 
saggezza, la saggezza e' la consapevolezza dell'ignoranza.  {W. Rotsler}

 Cmq MYSQL
   Solo a partire da determinate versioni (se non erro il branch 4.x) e'
possibile creare constraints su mysql. Sul manuale, scaricabile liberamente
da 
www.mysql.com
, c'e' tutto. A memoria la sintassi non la so, purtroppo.
   hint: se puoi risolvere la cosa a modo applicativo forse forse e' meglio,
visto che ne tieni tu il controllo mentre gestire l'errore che ti arriva
dalla base dati e' piu' complicato.
FG

 dalla base dati e' piu' complicato.
Approccio sbagliato direi, allora tanto vale non usare un modello, ne un 
db engine, relazionale.
Basta ad esempio accedere alle al db con un qualsiasi client/applicativo 
che non sia quello "nativo" per combinare ogni possibile casino. Oltre 
al fatto che gestire la relazione ogni dove sia coinvolta potrebbe 
essere complesso e difficoltoso tenerne traccia.
Con la costraint basta invece un touch al db e poi devi gestire solo 
l'errore.

 l'errore.
   Non e' banale gestire quell'errore. Se lavori con un linguaggio ad alto
livello e/o con un protocollo ad alto livello come jdbc ti tocca stare a
decifrare il messaggio di errore e gestire l'interfacciamento all'utente per
non "spaventarlo" con qualcosa che lui non capisce come le violazioni di
constraint.
   Secondo me quello che dici tu acquista un senso quando le moli di dati e
la concorrenza di accesso oltrepassa una certa soglia, altrimenti è molto
più facile - e manutenibile - gestire tutto a livello applicativo, se si
scrive il codice con i dovuti crismi.
Cia'
    F

 scrive il codice con i dovuti crismi.
Si, vere entrambe le cose, ma spesso i clienti fanno i mastruzzi sui dati, e
non puoi sindacare su quello che fanno sul loro db.
Con le constraint proteggi i dati e l'applicativo. Ti eviti telefonate al
call center con cose del tipo: "mi è sparita l'azienda di appartenenza...."
Grazie al c...o rispondo io, il tuo admin ha deletato una riga, io cosa
c*ç°o c'entro? (dopo aver perso 1 ora a cercare il problema
nell'applicativo).

 nell'applicativo).
   Posso essere cattivo, cinico e bastardo?
   Io loggo ogni singola operazione sul database. Se quella azienda non c'e'
ma a me non risulta nei log applicativi la sua cancellazione, mi PAGHI
l'intervento in assistenza. :)
   Che diamine. Se dico al cliente che il DB non si tocca, vuol dire che non
si tocca. Ovvio, non posso impedirgli di toccarlo. Ma deve essere chiaro che
lo fa a suo rischio e pericolo.
Riprendendo un po' il tono :-) poi sono un fautore della portabilità. Se
delego alcune funzioni al DB non avrò piu' un cavolo di portabilità, perchè
significa che se devo cambiare db della mia applicazione devo riscriverne un
pezzo sostanziale...

 constraint.
E' una cosa che devi fare comunque. Non c'e' solo l'integrità 
referenziale che può far fallire uno statement DML, e l'utente si 
spaventa anche in quei casi...
-- 
Fabrizio "Hermooz" Ermini

 Per la sintassi vedi il manuale alla voce _FOREIGN KEY Constraints_
...alla fine di tutto l'ambaradan ho passato le tabelle ad InnoDB, ma nisba,
sembra non funzionare...

 sembra non funzionare...
Con quale versione di MySQL?
Hai usato per caso "NO ACTION" come conseguenza della constraint? Se si' 
e la versione del server e' inferiore a 4x (non ricordo) non 
funzionera'. Riguarda il manuale online ci dovrebbe essere indicata la 
versione esatta e qualche commento degli utenti al riguardo.
