Un altro vincolo da tenere in considerazione è il VINCOLO DI CHIAVE ESTERNA. Immaginiamo di avere due tabelle: Dipendenti e AnagraficaDipendenti. Nella tabella Nomi elenchiamo tutti i dipendenti della nostra azienda. DIPENDENTE Mario Rossi Carlo Verdi Giorgio Blui Carlo Rossi Mentre nella tabella Anagrafica inseriamo, per ciascun dipendente, le informazioni personali come data di nascita, residenza, e così via. PERSONA ETA INDIRIZZO Mario Rossi 34 via Rossi, 3 Carlo Verdi 71 via Verdi, 21 Giorgio Blui 45 via Blui, 83 Carlo Rossi 22 via Rossi, 23 E' chiaro che la logica di queste due tabelle si perderebbe nel nulla se nella tabella AnagraficaDipendenti potessimo inserire anche i dati anagrafici di altre persone che non siano dipendenti dell'azienda. Ecco quindi che ci viene in aiuto il vincolo di chiave esterna col quale possiamo dire che la tabella AnagraficaDipendenti accetta soltanto membri della tabella Dipendenti. Nella progettazione tabella premiamo quindi il pulsante Relazioni per aprire la finestra che ci permette di inserire nuovi vincoli di chiave primaria. Premiamo il pulsante aggiungi e clicchiamo il pulsante in corrispondenza alla riga "Specifica tabelle e colonne". Ci si apre così un'ulteriore finestra nella quale possiamo indicare la tabella di chiave primaria con il relativo campo di chiave primaria e la tabella di chiave esterna con il relativo campo di chiave esterna. I vincoli di chiave esterna avranno tutti prefisso FK, ossia Foreign Key. Vediamo come per le chiavi primarie come fare per aggiungere una chiave esterna tramite script: La sintassi che dovremo usare è la seguente: ALTER TABLE nometabella1 ADD CONSTRAINT FK_nometabella1_nometabella2 FOREIGN KEY (campo_nometabella1) REFERENCES nometabella2 (campo_nometabella2) ; dove nometabella1 è la tabella nel quale verrà costruito il vincolo di chiave esterna, e nometabella2 è la tabella che contiene le chiavi primarie che possono essere inserite nel campo della prima tabella. ALTER TABLE Dipendenti ADD CONSTRAINT FK_Dipendenti_DipendentiAnagrafica FOREIGN KEY ( CodiceDipendente ) REFERENCES DipendentiAnagrafica( Dipendente ) Un vincolo di chiave esterna può fare riferimento alle colonne di tabelle differenti all'interno dello stesso database, così come abbiamo potuto vedere finora, oppure a colonne della stessa tabella. Tali tabelle sono denominate tabelle autoreferenziali. Un vincolo di chiave esterna assicura anche che non sia possibile apportare modifiche alla tabella della chiave primaria, se tali modifiche annullano il collegamento ai dati della tabella della chiave esterna. Se si tenta di eliminare la riga in una tabella della chiave primaria oppure di modificare un valore della chiave primaria, l'azione avrà esito negativo se il valore della chiave primaria eliminato o modificato corrisponde a un valore nel vincolo FOREIGN KEY di un'altra tabella. Per modificare o eliminare correttamente una riga in un vincolo FOREIGN KEY, è necessario innanzitutto modificare o eliminare i dati della chiave esterna nella tabella della chiave esterna e collegare quindi la chiave esterna ad altri dati della chiave primaria.
In questo video vedremo un'altra interessante vincolo di Sql Server 2008, chiamato vincolo di chiave esterna. Immaginiamo ad esempio di avere due tabelle: una tabella dipendenti una tabella dipendenti anagrafica per prima tabella avremo l'elenco di tutti dipendenti della nostra azienda mentre nella tabella dipendenti anagrafica avremo l'anagrafica di ciascun dipendente, intesa quindi come il nome della persona l'età e l'indirizzo di residenza e chiaro che la logica di relazione di queste due tabelle si perderebbe nel nulla se nella tabella anagrafica dipendenti potessimo inserire anche delle persone che non fanno parte della tabella dipendenti ecco che quindi ci viene in aiuto il vincolo di chiave esterna col quale possiamo dire che nell'anagrafica dipendenti possono rientrare soltanto quelle persone che fanno parte della tabella dei dipendenti.
Vediamo quindi come inserire un nuovo vincolo di chiave esterna. Andiamo in progettazione di della tabella dipendenti anagrafica e clicchiamo sul pulsante relazione ci si apre la finestra relazioni chiave esterna e aggiungiamo una nuova relazione premendo pulsante aggiungi.
Entriamo nella riga specifica tabelle colonne che si permette di specificare quali saranno le tabelle e quali saranno le colonne che interverranno nel nostro vincolo di chiave esterna vediamo quelli di legare le tabelle dipendenti e dipendenti anagrafica la tabella dipendenti utilizzerà campo dipendente che sarà allegato al campo persona della tabella dipendenti anagrafica notiamo che anche nome della relazione cambiato FK e il acronimo di FOREIGN KEY, di chiave esterna viene riportato nel nome il nome della prima tabella ed il nome della seconda tabella che formano la relazione premiamo quindi il pulsante ok e il pulsante} bella relazione questo vedere che riaprendolo ci compare relazione che abbiamo appena costruito adesso volessimo replicare il tramite uno script che abbiamo fatto manualmente c'è la creazione di un nuovo vincolo di chiave esterna dovremo andare a comporre una nuova corrieri utilizzando la seguente sintassi c'è altero te debole il nome della tabella nella quale andremo a costruire il vincolo di chiave esterna e il vincolo il nome del vincolo dovesse K. ricordiamo e il acronimo di fuori in chi dice chiave esterna nome della prima tabella nome della seconda tabella che il tipo di vincolo il campo della prima tabella il nome della seconda tabella e del campo della seconda tabella proviamo ad applicare questo scritte alle nostre due tabelle per cui la tabella nella quale costruire la nostra nostro vincolo di chiave esterna sarà dipendenti anagrafica il nome della chiave esterna sarà FK Anderson or nome della prima tabella cioè. Dipendenti anagrafica il nome della seconda tabella cioè dipendenti il campo o della prima tabella sarà persona il nome della seconda tabella sarà dipendenti il nome del campo della seconda tabella sarà dipendente per cui questo punto si andiamo a cancellare il vincolo che abbiamo creato manualmente e tentiamo di ricostruirlo lanciando questo scritte andiamo a lanciare questo scritte verifichiamo che se tutto appostolo lanciamo andiamo a verificare aggiornando la tabella che effettivamente stato creato nuovo vincolo di chiave esterna proviamo a vedere anche in progettazione ecco qua che stato creato il vincolo di chiave esterna un vincolo di chiave esterna può fare riferimento alle colonne di tabelle differenti all'interno dello stesso database con proprio come abbiamo visto in quest'ultimo esempio è oppure colonne della stessa tabella questa tabella sono denominate tabelle autoreferenziali su un esempio pratico giungiamo questa tabella il campo
di tipo marciar di 50 per cui inseriremo in questo campo
per ciascuna persona il proprio
e caratteristica di questo campo conterrà valori inclusi soltanto nel campo persona per cui una persona potrà essere il campo di un'altra persona salviamo la tabella facciamo un esempio pratico andiamo di inserire nella colonna
ad esempio questi valori torniamo in progettazione e vediamo di inserire una nuova relazione di chiave esterna specifichiamo che R. ella chiave primaria la colonna persona e per la chiave esterna
salviamo ed effettivamente il salvataggio è stato effettuato correttamente se provassimo a modificare uno di questi valori in modo da non rispecchiare i valori elencati nel campo persona otterremo un errore d'esempio proviamo a modificare questo valore a cambiare riga e vediamo che effettivamente si compare un errore nel senso che c'è un conflitto con il vincolo di chiave esterna vincolo di chiave esterna assicura anche che non sia possibile apportare delle modifiche alla tabella contiene una chiave primaria se questo modifiche annullano collegamento tra la chiave primaria e la chiave esterna ad esempio nel primo caso di abbiamo visto nella relazione dipendenti e dipendenti anagrafica se la relazione ancora valida allora non sarà possibile eliminare un record di dipendenti si questo è utilizzato ancora in dipendenti anagrafica