Questo articolo ti insegnerà la differenza tra una chiave primaria e una chiave esterna. Questo articolo ti insegnerà anche perché entrambe queste chiavi sono importanti quando si tratta del mantenimento di una struttura di database relazionale.
Tutti gli esempi di questa lezione sono basati su Microsoft SQL Server Management Studio e il database AdventureWorks2012. È possibile iniziare a utilizzare questi strumenti gratuiti utilizzando la mia guida Per iniziare a utilizzare SQL Server.
Qual è la differenza tra una chiave primaria e una chiave esterna?,
Prima di poter scavare nella differenza, esploriamo prima le caratteristiche chiave primarie ed esterne. Iniziamo imparando a conoscere le chiavi primarie.
Chiavi primarie
Affinché una tabella si qualifichi come tabella relazionale, deve avere una chiave primaria.
La chiave primaria consiste in una o più colonne i cui dati contenuti all’interno vengono utilizzati per identificare in modo univoco ogni riga della tabella. Si può pensare a loro come un indirizzo. Se le righe di una tabella erano cassette postali, la chiave primaria sarebbe l’elenco degli indirizzi stradali.,
Quando una chiave primaria è composta da più colonne, i dati di ciascuna colonna vengono utilizzati per determinare se una riga è univoca.
Per essere una chiave primaria, diverse condizioni devono essere vere. Innanzitutto, come abbiamo detto, le colonne devono essere uniche. Per chiarire, ci riferiamo ai dati all’interno delle righe, non ai nomi delle colonne stesse. Inoltre, nessun valore nelle colonne può essere vuoto o NULLO.
Quando si definisce una tabella si specifica la chiave primaria. Una tabella ha solo una chiave primaria e la sua definizione è obbligatoria.
La chiave primaria per ogni tabella è memorizzata in un indice., L’indice viene utilizzato per applicare il requisito di unicità. Inoltre, rende facile per i valori delle chiavi esterne fare riferimento ai corrispondenti valori della chiave primaria, come apprenderemo nella sezione seguente.
Chiavi esterne
Una chiave esterna è un insieme di una o più colonne in una tabella che fa riferimento alla chiave primaria in un’altra tabella. Non ci sono codici speciali, configurazioni o definizioni di tabelle che è necessario inserire per “designare” ufficialmente una chiave esterna.
Nel diagramma seguente guarda la tabella SalesOrderHeader. La colonna SalesOrderHeader.,CurrencyRateID è una chiave esterna poiché è correlata a CurrencyRate.CurrencyRateID. Questa colonna CurrencyRate.CurrencyRateID è la chiave primaria della tabella CurrencyRate.
Chiavi esterne come parte dei primari
Guarda il seguente diagramma. Quale colonna è la chiave esterna?
Se hai detto che era PersonPhone.,BusinessEntityID allora hai ragione. Il motivo per cui è una chiave esterna è che si riferisce a una chiave primaria, Person.BusinessEntityID, sull’altro tavolo.
Per coincidenza, PersonPhone.BusinessEntityID non è solo una chiave esterna, ma è anche parte della chiave primaria di PersonPhone. La chiave primaria della tabella PersonPhone è la combinazione di BusinessEntityID, PhoneNumber e PhoneNumberTypeID.
Sono d’accordo che questo è confuso, ma è permesso e non una cattiva pratica.
A differenza delle chiavi primarie, le chiavi esterne possono contenere valori duplicati. Inoltre, è ok per loro contenere valori NULL.,
Gli indici non vengono creati automaticamente per le chiavi esterne; tuttavia, come DBA, è possibile definirli.
Una tabella può contenere più di una chiave esterna. Nella tabella PersonPhone puoi trovare l’altra chiave esterna (vedi la risposta alla fine dell’articolo)?
Trovare chiavi primarie ed esterne in Object Explorer
Quando si utilizza SSMS troverete tutti i tipi di informazioni utili in object explorer. Non devi scavare in profondità per trovare le chiavi primarie. Quando si mostrano le colonne di una tabella, ma si fa clic sulla cartella Colonne, le colonne della chiave primaria hanno chiavi d’oro accanto a loro.,
Inoltre, se le chiavi esterne sono definiti in vincoli di chiave esterna, che vedremo nel paragrafo successivo, quindi le colonne hanno FK dopo di loro. Questi sono cerchiati in verde nel diagramma sopra.
Vincoli di chiavi esterne
Alcuni sistemi di gestione di database, come SQL Server, consentono di impostare vincoli di chiavi esterne. Questi aiutano a far rispettare l’integrità referenziale., Nella loro forma più semplice, un vincolo di chiave esterna impedisce di immettere valori che non si trovano nella chiave primaria della tabella correlata.
Utilizzando il primo diagramma come esempio, non è possibile immettere SalesOrderHeader.CurrencyRateID se non esiste già nella tabella CurrencyRate.
Questi vincoli entrano in vigore in diversi modi:
- Ti impediscono di cambiare il valore della chiave esterna in uno che non esiste come valore nella chiave primaria della tabella correlata.
- Ti impediscono di eliminare una riga dalla tabella delle chiavi primarie. Questo ti impedisce di creare record orfani., I record orfani sono descritti come ” record di bambini senza genitori.”
- Ti impediscono di aggiungere un valore di chiave esterna che non esiste nella chiave primaria.
In sintesi, i vincoli impongono la relazione tra le tabelle delle chiavi primarie e esterne.
Confronto tra chiavi primarie e chiavi esterne
Per riassumere ecco un confronto tra chiavi primarie e esterne
Risposta alla domanda: In precedenza abbiamo chiesto di identificare l’altra chiave esterna nella tabella PersonPhone. La risposta corretta è PhoneNumberTypeID.
Lascia un commento