Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
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


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
Xbox Game Pass cambia: nuovi piani e pre...
Intel produrrà chip per AMD? L'in...
Ecco il nuovo Amazon Luna: videogiochi p...
ISRO: prosegue lo sviluppo della navicel...
CoD Black Ops 7 offrirà la beta p...
Il telescopio spaziale James Webb sta ai...
Crucial spinge sui moduli LPCAMM2: fino ...
Imgur blocca gli utenti del Regno Unito:...
ROG Xbox Ally già in consegna: qu...
Ubisoft annuncia Vantage Studios: Assass...
Il solare diventa la prima fonte di elet...
Google Home si rinnova completamente: ar...
Dense Geometry Format (DGF): novit&agrav...
Gemini for Home arriva a ottobre sui dis...
Amazon Smart Air Quality Monitor: a soli...
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: 04:02.


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