Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
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: 3736
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: 3736
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: 3736
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: 3736
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: 3736
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: 3736
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: 3736
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: 3736
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: 3736
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


Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Disagi al traffico aereo europeo: le ind...
Intel in crisi chiama Apple: un riavvici...
Snapdragon X2 Elite Extreme, il cuore de...
Snapdragon 8 Elite Gen 5 è il nuovo rife...
Bombe Apple su Amazon: iPhone di scorsa ...
Micron: memoria HBM4 a 11 Gbps e patto d...
NVIDIA rende Audio2Face open source: ecc...
Logitech Signature Slim Solar K980+: 10 ...
Disney Plus aumenta i prezzi: si parte d...
Intel XeSS con Multi Frame Generation: u...
iPhone 16 a soli 700€ su Amazon: stile e...
Signature Slim Solar+ K980, la nuova tas...
Logitech MX Master 3S, il mouse perfetto...
Borderlands 4 per Switch 2 rinviato a te...
Reddit studia con Google una partnership...
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: 05:34.


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