Enforce foreign key - significato

martedì 20 marzo 2012 - 10.18
Tag Elenco Tags  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server Express

andrestu Profilo | Expert

Salve a tutti,
volevo sapere il significato di "Enforce foreign key" nella maschera 'Relationship' all'interno del design di una tabella in Sql Server Management Studio.

Grazie

Andrea Restucci - Web Developer

MarKonE Profilo | Guru

Ciao,
serve per preservare la cosiddetta "Integrità referenziale" :
http://msdn.microsoft.com/it-it/library/aa292166(v=vs.71).aspx
http://msdn.microsoft.com/it-it/library/ms177465.aspx

In pratica evita che i record di una tabella "figlio" diventino orfani di "padre"

Ciao!

My Blog... http://blogs.dotnethell.it/Mark/

andrestu Profilo | Expert

scusa ma non mi è chiara la cosa, il comportamento di cui parli non si imposta già con le impostazioni che vengono subito dopo nella maschera in questione, e cioè:

Delete rule: No Action - Cascade - Set Null - Set Default
Update rule: No Action - Cascade - Set Null - Set Default

impostandoli a Cascade Evito che i record rimangano 'orfani'...

Andrea Restucci - Web Developer

MarKonE Profilo | Guru

Ciao,
purtroppo non conosco le impostazioni a cui fai riferimento. Quando ho avuto bisogno di garantire l' IR ho sempre impostato le "foreign keys".

Ciao!

My Blog... http://blogs.dotnethell.it/Mark/

alx_81 Profilo | Guru

>Delete rule: No Action - Cascade - Set Null - Set Default
>Update rule: No Action - Cascade - Set Null - Set Default
in realtà in base alle impostazioni decidi se prevedere orfani o meno
Se fai update o delete hai:

No Action
ti dà il normale errore se tenti di violare la FK (se cerchi di cancellare un padre, ad esempio)

Cascade
se aggiorno o cancello un padre, aggiorno o cancello il figlio sulla relazione

Set Null
metto null, se la tabella prevede che il campo è nullable

Set Default
metto il default se il campo prevede un valore di default

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

andrestu Profilo | Expert

a ok diciamo che puoi impostare il comportamento senza obbligatoriamente impostare su Yes 'Enforce foreign key'.
'Enforce foreign key' serve appunto ad evitare al sistema di effettuare l'operazione che renderebbe orfano il record.
In poche parole per l'integrità è opportuno lasciarlo su yes...

Andrea Restucci - Web Developer

alx_81 Profilo | Guru

>a ok diciamo che puoi impostare il comportamento senza obbligatoriamente
>impostare su Yes 'Enforce foreign key'.
>'Enforce foreign key' serve appunto ad evitare al sistema di
>effettuare l'operazione che renderebbe orfano il record.
>In poche parole per l'integrità è opportuno lasciarlo su yes...
Personalmente preferisco l'errore se cerco di eliminare un padre. L'eliminazione fisica non sempre è prevista in molti sistemi. Soprattutto per i dati storici o simili.
Preferisco fare soft delete, magari con un campo di stato, ma tenere quanto può sempre servirmi. E in caso di cancellazione fisica, preferisco l'errore per capire bene a cosa un'entità è legata, in modo da cambiare lo script di cancellazione sapendo quello che è stato eseguito.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5