Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-03-2007, 11:17   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
SQL Vincolo di integrità referenziale

ho due tabelle dove la prima, t1, possiede un ID definito come chiave primaria.
La seconda tabella, t2, possiede un attributo ID che è chiave esterna verso l'ID di t1.

Se ora inizio a popolare la mia base di dati, posso inserire valori nell'ID di t2 sse il medesimo valore è già presente in t1 però: se ad un tratto io decidessi di modificare un valore chiave di t1, vorrei che questo si propagasse alle restanti tabelle quindi, si devono aggiungere cose del tipo

ON UPDATE CASCADE etc......

Domanda: ma ON DELETE UPDATE vanno aggiunte solo alla tabella con la chiave esterna ?

Spero di essermi fatto capire
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 15-03-2007, 13:22   #2
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
faccio un esempio che è meglio

t1(ID, DESCRIZIONE)
t2(NOME, INDIRIZZO, ID)
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 15-03-2007, 17:56   #3
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da misterx Guarda i messaggi
faccio un esempio che è meglio

t1(ID, DESCRIZIONE)
t2(NOME, INDIRIZZO, ID)
t2 che attributi chiave ha? (attento alla normalità)
comunque se mi ricordo bene... sì il cascade va solo quando dichiari ID che referenzia l'altro ID (in t1) allora metti come propagare le modifiche.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 15-03-2007, 22:02   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
ho messo l'ID di t2 in italico per sottolineare che è chiave esterna di t1.

Ho fatto delle prove ed ho notato che di defaut ON UPDATE NO ACTION e similare viene aggiunto alla tabella referente e no a quella referenziata.

Il mio dubbio è nato in quanto, se ho una tabella t1 che fa per così dire da guida per la mia base di dati ed altre tabelle che contengono una chiave esterna verso la tabella t1, e ad un certo punto desidero modificare un valore di t1 che è chiave, non mi è consentito; invece volevo capire come sarebbe possibile ciò propagandolo poi anche a tutte le atre tabelle referenti.

Ultima modifica di misterx : 16-03-2007 alle 07:29.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 07:53   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
cmq, ho fatto diverse prove ed ho notato che se specifico n tabelle figlie con ON UPDATE CASCADE, modificando un valore chiave questo si propaga a tutte le figlie però, è sufficiente che una delle tabelle abbia la specifica NO ACTION per bloccare il CASCADE; che voi sappiate, c'è un motivo per tale comportamento bloccante ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 08:06   #6
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
no il vincolo on update cascade va messo su T1, e nn su t2. è il dbms che si arrangia a fare tutto
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 08:10   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
no il vincolo on update cascade va messo su T1, e nn su t2. è il dbms che si arrangia a fare tutto
è quello che pensavo anch'io, ma ad esempio Postgres di default i vincoli li aggiunge alle tabelle con la chiave esterna


Codice:
CREATE TABLE t1 (
    id integer PRIMARY KEY,
    corso character(20)
);


CREATE TABLE t2 (
    docente character(20),
    giorni character(20),
    id integer
    FOREIGN KEY (id) REFERENCES t1(id) ON UPDATE CASCADE;
);
questa frase è poco chiara, tratta dal link sotto

Le clausole ON DELETE e ON UPDATE indicano quale azione deve essere compiuta nel caso in cui una tupla nella tabella referenziata venga eliminata o aggiornata.


Ma la tabella referenziata è la tabella padre o figlia ?

http://database.html.it/guide/lezion...e-il-database/

Ultima modifica di misterx : 16-03-2007 alle 08:31.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 08:35   #8
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
ok ho detto una cazzata, scusami... ho appena controllato un vecchio progetto universitario e in effetti il vincolo va messo sul referente... in questo modo, credo, puoi associare a tabelle diverse azioni diverse se lo stesso dato riferito viene modificato...

spiegami un po' meglio la faccenda delle n tabelle con una sola impostata su no action
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 08:36   #9
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
referenziato = dato originario

referente = foreign key, dato il cui valore è preso da un dato di un'altra tabella
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 08:41   #10
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
spiegami un po' meglio la faccenda delle n tabelle con una sola impostata su no action
stavo pensando che se definisco 10 tabelle e tutte le collego con la FOREIGN KEY alla tabella padre, quella con la PRIMARY KEY, se solo una delle 10 tabelle ha specificato la clausola ON UPDATE NO ACTION, tale vincolo si propaga anche a tutte le altre 9 tabelle anche se hanno specificato ON UPDATE CASCADE. Mi chiedevo il motivo di tale comportamento conservativo.



edit
ho provato proprio ora con 3 tabelle ed è sufficiente che una abbia specificato ON UPDATE NO ACTION che viene bloccata la propagazione dell'aggiornamento.

Ultima modifica di misterx : 16-03-2007 alle 08:50.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 08:59   #11
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
vado nel campo delle ipotesi... la clausola no action significa "impedisci la modifica"... di cosa? della chiave riferita!!! quindi viene bloccato tutto l'iter a monte perchè il valore riferito non può essere modificato.

non potresti avere un comportamento del tipo che in una tabella referente non viene aggiornato il dato mentre nelle altre si, perchè romperesti la integrità referenziale
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 09:12   #12
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
ma non è strano che se su 10 tabelle una sola ha la clausola non action viene bloccato tutto ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 09:52   #13
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
non è strano... almeno finchè è coerente con la semantica del progetto e gli intenti del progettista... semplicemente stai dicendo che tutte le tabelle tranne una accettano un update, l'ultima no e quindi l'update è vietato, ed è vietato nella tabella riferita. essendo vietato nella tab riferita, è bloccato PER OGNI altra tabella referente... sta al progettista decidere se questa configurazione ha senso o meno, ma a livello logico, cioè per il dbms, questo è l'unico comportamento corretto
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 09:54   #14
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
non è strano... almeno finchè è coerente con la semantica del progetto e gli intenti del progettista... semplicemente stai dicendo che tutte le tabelle tranne una accettano un update, l'ultima no e quindi l'update è vietato, ed è vietato nella tabella riferita. essendo vietato nella tab riferita, è bloccato PER OGNI altra tabella referente... sta al progettista decidere se questa configurazione ha senso o meno, ma a livello logico, cioè per il dbms, questo è l'unico comportamento corretto
no, l'esatto contrario.
9 accettano l'update ed 1 no ed è sufficiente quell'unica tabella per evitare l'update su tutte le altre.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 09:55   #15
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
infatti, se tu hai
T1 -> dato originale, tabella riferita
T2 -> primo referente (cascade)
T3 -> secondo refernte (no action)

se modifichi il dato in T1 e potessi aggiornare in T2 e lasciare invece le cose come stanno in T3 perderesti l'integrità referenziale, perchè T3 avrebbe una tupla che potenzialmente riferisce un dato non più esistente (il vecchio valore)...
oppure, potresti cambiare in T2 poi passare in T3 e vedereil no action e bloccare tutto, ma il dato aggiornato in T2 che fine fa? di nuovo romperesti l'integrità referenziale
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 09:56   #16
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da misterx Guarda i messaggi
no, l'esatto contrario.
9 accettano l'update ed 1 no ed è sufficiente quell'unica tabella per evitare l'update su tutte le altre.
intendo che la config. è che 9 accettano e 1 no, e di conseguenza all'atto pratico, nessuna accetta
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 10:02   #17
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
è come dire, ci sono 10 persone che devono decidere se approvare una variazione... 9 dicono "per me è lo stesso", 1 dice "no, io non posso accettare" e quindi si decide per il no.

la semantica del cascade nn è "accetta e basta", ma è "se altrove nn ci sono divieti, accetta"
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 10:18   #18
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
intendo che la config. è che 9 accettano e 1 no, e di conseguenza all'atto pratico, nessuna accetta
infatti il DBMS accetta sse tutte le 10 tabelle sono di comune accordo.
Beh, è una caratteristica che al corso di basi di dati non era emersa.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 11:52   #19
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
beh neanche da me era emersa in effetti, ma da quanto abbiamo detto in precedenza penso nn possa che essere così... poi magari è una caratteristica del dbms, nn lo so, ma secondo me il comportamento non può che essere quello (nel caso di un no action)

Ultima modifica di mad_hhatter : 16-03-2007 alle 11:55.
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
24 offerte Amazon da non perdere, dalla ...
Apple starebbe progettando i propri cont...
Niente borsa per OpenAI prima del 2027: ...
Meta potrebbe aver mostrato in anticipo ...
Bicicletta elettrica L26 a 474,05€: e-bi...
NVIDIA RTX PRO 5500 Blackwell: 84 GB di ...
Sei alla ricerca di un buon gruppo di co...
Blizzard annuncia un nuovo StarCraft: la...
Ecobonus al 65%: il governo valuta il ri...
Biscotti fatti con bottiglie di plastica...
SIHOO B100 a 161€ e B100 Pro a 209€: sed...
ClickFix dilaga: un finto captcha e un c...
HP Envy 6520e a 63€: stampante multifunz...
Diablo diventa una serie animata Netflix...
iPhone Duo porterà Apple al 25% d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v