Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2016:creare una relazione

È possibile creare una relazione tra tabelle utilizzando la GUI o lo script SQL. Qui, mostro entrambi i metodi.

Nella progettazione di database relazionali, una relazione è dove due o più tabelle sono collegate tra loro perché contengono dati correlati. Ciò consente agli utenti di eseguire query per dati correlati su più tabelle.

Qui creeremo le seguenti relazioni.

Il metodo

Ecco come lo faremo:

  • Utilizzeremo SQL per creare gli Album tabella e una relazione.
  • Utilizzeremo la GUI per creare l'altra relazione.

In questo modo vedrai entrambi i metodi per creare una relazione.

Abbiamo solo bisogno di creare una tabella perché abbiamo già creato due di queste tabelle in precedenza in questo tutorial (gli Artisti tabella tramite la GUI e i Generi tabella utilizzando SQL).

Crea una relazione utilizzando SQL

Apri una nuova finestra di query in SSMS ed esegui il codice seguente:

CREATE TABLE Albums
 (
  AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AlbumName nvarchar(255) NOT NULL,
  ReleaseDate date NOT NULL,
  ArtistId int NOT NULL,
  GenreId int NOT NULL
  
  CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION    
);

La prima parte di tale istruzione crea la tabella.

L'ultima parte definisce la relazione. Questa parte:

CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION

Le prime due righe creano la relazione. Creano un vincolo di chiave esterna tra Albums.ArtistId e la colonna Artists.ArtistId colonna.

Le ultime due righe specificano cosa deve fare SQL Server se qualcuno tenta di eliminare o aggiornare un record padre a cui fa riferimento un record nella tabella figlio. In questo caso, NO ACTION significa che l'eliminazione/l'aggiornamento non andrà avanti. L'utente riceverà semplicemente un errore.

Puoi cambiarlo in ON DELETE CASCADE se vuoi essere in grado di eliminare il genitore e il figlio in una volta sola (ad es. l'eliminazione verrà eseguita a cascata dal genitore al figlio). La stessa logica vale per gli aggiornamenti, utilizzando ON UPDATE CASADE .

NO ACTION è il valore predefinito, quindi avremmo potuto fare a meno di quelle ultime due righe di codice. Tuttavia, l'ho incluso, perché è un fattore importante a cui pensare quando si creano vincoli di chiave esterna.

Cos'è un vincolo di chiave esterna?

Un vincolo di chiave esterna definisce una relazione tra questa tabella e un'altra tabella. Quando crei un vincolo di chiave esterna, lo crei su una colonna specifica nel figlio tabella, per fare riferimento a una colonna specifica in parent tabella.

Ciò rende la colonna nella tabella figlio una chiave esterna . Il vincolo garantisce che qualsiasi valore che entra in questa colonna (chiave esterna) corrisponda a un valore nella colonna della chiave primaria della tabella padre. Se qualcuno tenta di immettere un valore che non corrisponde a un valore nella colonna della chiave primaria della tabella padre, SQL Server genererà un errore.

Questo aiuta a rafforzare l'integrità referenziale. Ci impedisce di avere record orfani (record figlio che non hanno un genitore). O nel nostro esempio, album che non sono associati ad alcun artista.

Crea una relazione tramite la GUI

Ora creeremo l'altra relazione tramite la GUI di SQL Server Mangement Studio.

Sarebbe stato più facile includerlo nello script precedente, ma volevo dimostrare entrambi i metodi per creare una relazione.

  1. Apri la tabella figlio nel Designer tabelle

    Fare clic con il pulsante destro del mouse sulla tabella figlio (i nostri Album appena creati tabella) e seleziona Design dal menu contestuale.

    Se non riesci a vedere la tabella appena creata nel Visualizzatore oggetti, probabilmente dovrai aggiornare il Visualizzatore oggetti.

    Fare clic con il pulsante destro del mouse sulle Tabelle nodo e seleziona Aggiorna .

  2. Apri la finestra di dialogo Relazioni con la chiave esterna

    Seleziona Progettazione tabelle> Relazioni... dal menu in alto.

  3. Aggiungi la relazione

    La finestra di dialogo Relazioni chiave esterna ti mostrerà tutte le relazioni esistenti per la tabella. Possiamo vedere la relazione che abbiamo stabilito poco prima, quando abbiamo creato la tabella.

    Fai clic su Aggiungi per aggiungere un'altra relazione.

  4. Seleziona Specifiche tabelle e colonne

    Una nuova relazione appare sopra l'altra nella Relazione selezionata elenco con un nome di FK_Albums_Albums .

    Verificando che la nuova relazione sia selezionata, fai clic su Specifica tabelle e colonne nel riquadro di destra. A destra della proprietà viene visualizzata un'ellisse.

    Fai clic sui puntini di sospensione (... ) per avviare la finestra di dialogo Tabelle e colonne.

  5. Finestra di dialogo Tabelle e colonne

    Qui selezioni la tabella delle chiavi primarie nel riquadro di sinistra e la tabella delle chiavi esterne a destra.

    • Sotto Tabella delle chiavi primarie: seleziona Generi come la tabella e GenreId come colonna.
    • Sotto Tabella delle chiavi straniere: seleziona Album come la tabella e GenreId come colonna.

    Fare clic su OK .

    SQL Server suggerirà un nome per la relazione. Puoi modificarlo se lo desideri. Altrimenti lascialo così com'è.

  6. La relazione

    La tua relazione verrà ora visualizzata correttamente nella finestra di dialogo Relazioni chiave esterna.

    Fai clic su Chiudi .

  7. Salvare la relazione

    La tua relazione non verrà salvata finché non salvi la tabella. Quando salvi la tabella, probabilmente riceverai un avviso che verranno salvate due tabelle. Questo è prevedibile, poiché la relazione influisce su due tabelle.

    Fai clic su per salvare entrambe le tabelle.

    Se selezioni Progettazione tabelle> Relazioni... per la tabella padre, vedrai anche la relazione lì.