Chave estrangeira do SQL Server: como criar com exemplo

โšก Resumo Inteligente

Em SQL Server, uma chave estrangeira garante a integridade referencial ao vincular uma tabela filha a uma tabela pai. Cada valor de chave estrangeira deve jรก existir na chave primรกria referenciada da tabela pai.

  • ๐Ÿ”— O que รฉ uma chave estrangeira? Uma chave estrangeira vincula uma tabela filha a uma tabela pai e impรตe a integridade referencial entre elas.
  • ๐Ÿ‘ช Pai e filho: A tabela referenciada รฉ a tabela pai; a tabela que contรฉm a chave estrangeira รฉ a tabela filha, que aponta para a chave primรกria da tabela pai.
  • ๐Ÿ–ฑ๏ธ Dois mรฉtodos de criaรงรฃo: Tanto os relacionamentos do SQL Server Management Studio quanto a clรกusula T-SQL CREATE TABLE โ€ฆ FOREIGN KEY โ€ฆ REFERENCES definem uma chave estrangeira.
  • โž• Adicionar a uma tabela existente: ALTER TABLE โ€ฆ ADD CONSTRAINT โ€ฆ FOREIGN KEY adiciona o relacionamento a uma tabela que jรก existe.
  • ๐Ÿ”„ Aรงรตes referenciais: As clรกusulas ON DELETE e ON UPDATE controlam as linhas filhas com NO ACTION, CASCADE, SET NULL ou SET DEFAULT.
  • โœ… Integrity verificar: A inserรงรฃo de uma linha filha cuja chave nรฃo possui uma linha pai correspondente serรก rejeitada.ping Os dados sรฃo consistentes.

Chave estrangeira no SQL Server: como criar uma no SQL Server com um exemplo.

O que รฉ uma CHAVE ESTRANGEIRA?

Uma chave estrangeira fornece uma maneira de garantir a integridade referencial dentro de um sistema. SQL ServerEm termos simples, uma chave estrangeira garante que os valores presentes em uma tabela tambรฉm estejam presentes em outra tabela.

Regras para CHAVE ESTRANGEIRA

  • Valores NULL sรฃo permitidos em uma chave estrangeira SQL.
  • A tabela referenciada รฉ chamada de tabela pai.
  • A tabela que contรฉm a chave estrangeira รฉ chamada de tabela filha.
  • A chave estrangeira na tabela filha faz referรชncia a chave primรกria na tabela principal.
  • Essa relaรงรฃo entre pais e filhos reforรงa a regra conhecida como โ€œintegridade referencialโ€.

O diagrama abaixo resume todos os pontos acima referentes ร  chave estrangeira.

Diagrama de uma chave estrangeira que liga uma tabela filha ร  chave primรกria da tabela pai.

Como criar uma CHAVE ESTRANGEIRA em SQL

Vocรช pode criar uma chave estrangeira no SQL Server de duas maneiras:

SQL Server Management Studio

Tabela pai: Suponha que temos uma tabela pai existente chamada 'Curso'. Course_ID e Course_name sรฃo duas colunas, com Course_Id como chave primรกria.

Tabela pai Curso com chave primรกria Course_Id e colunas Course_name

Tabela filha: Precisamos criar a segunda tabela como uma tabela filha. 'Course_ID' e 'Course_Strength' sรฃo suas duas colunas. No entanto, 'Course_ID' serรก a chave estrangeira.

Passo 1) Clique com o botรฃo direito do mouse em Tabelas > Novo > Tabelaโ€ฆ

No SQL Server Management Studio, clique com o botรฃo direito do mouse em Tabelas, depois em Novo e, em seguida, em Tabela.

Passo 2) Insira os nomes das duas colunas: 'Course_ID' e 'Course_Strength'. Clique com o botรฃo direito do mouse na coluna 'Course_Id' e, em seguida, clique em Relacionamento.

Novas colunas Course_ID e Course_Strength na tabela filha com o menu de relacionamento.

Passo 3) Em 'Relaรงรตes de chave estrangeira', clique em 'Adicionar'.

Diรกlogo de Relaรงรตes de Chave Estrangeira com o botรฃo Adicionar

Passo 4) Em 'Especificaรงรฃo de tabelas e colunas', clique no รญcone 'โ€ฆ'.

Campo de especificaรงรฃo de tabelas e colunas com o botรฃo de reticรชncias

Passo 5) Selecione 'COURSE' como 'Tabela de Chave Primรกria' e 'Tabela de Chave Estrangeira' como a nova tabela que estรก sendo criada, a partir do menu suspenso.

Selecionando CURSO como a tabela de chave primรกria na caixa de diรกlogo de relacionamento.

Etapa 6) Para a 'Tabela de Chave Primรกria', selecione a coluna 'Course_Id' como a coluna da tabela de chave primรกria.

Na seรงรฃo 'Tabela de Chave Estrangeira', selecione a coluna 'Course_Id' como a coluna da tabela de chave estrangeira. Clique em OK.

Mapaping Course_Id como coluna de chave primรกria e chave estrangeira

Passo 7) Clique em Adicionar.

Clicando em Adicionar para confirmar a relaรงรฃo de chave estrangeira

Passo 8) Dรช o nome de 'Course_Strength' ร  tabela e clique em OK.

Nomeie a tabela filha como Course_Strength e clique em OK.

Resultado: Estabelecemos uma relaรงรฃo pai-filho entre 'Curso' e 'Forรงa_do_Curso'.

Estabelecida relaรงรฃo pai-filho entre Curso e Forรงa do Curso

T-SQL: Criar uma tabela pai-filho usando T-SQL

Tabela pai: Reconsidere que jรก temos uma tabela pai existente com o nome 'Curso'. Course_ID e Course_name sรฃo duas colunas, sendo Course_Id a chave primรกria.

Tabela pai existente chamada Curso, com Course_Id como chave primรกria.

Tabela filha: Precisamos criar a segunda tabela como tabela filha com o nome 'Course_Strength_TSQL'. 'Course_ID' e 'Course_Strength' serรฃo suas duas colunas. No entanto, 'Course_ID' serรก a chave estrangeira.

A seguir estรก a sintaxe para criar uma mesa com uma CHAVE ESTRANGEIRA.

Sintaxe:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

Aqui estรก uma descriรงรฃo dos parรขmetros acima:

  • childTable รฉ o nome da tabela que serรก criada.
  • As colunas column_1 e column_2 devem ser adicionadas ร  tabela.
  • fkey_name รฉ o nome da restriรงรฃo de chave estrangeira a ser criada.
  • child_column1, child_column2 โ€ฆ child_column_n sรฃo as colunas da tabela filha que fazem referรชncia ร  chave primรกria na tabela pai.
  • `parentTable` รฉ o nome da tabela pai cuja chave รฉ referenciada na tabela filha.
  • parent_column1, parent_column2 โ€ฆ parent_column_n sรฃo as colunas que compรตem a chave primรกria da tabela pai.
  • ON DELETE รฉ um parรขmetro opcional que especifica o que acontece com os dados filhos apรณs a exclusรฃo dos dados pais. Os valores incluem NO ACTION, SET NULL, CASCADE ou SET DEFAULT.
  • O parรขmetro opcional ON UPDATE especifica o que acontece com os dados filhos apรณs a atualizaรงรฃo dos dados pais. Os valores incluem NO ACTION, SET NULL, CASCADE ou SET DEFAULT.
  • NENHUMA Aร‡รƒO significa que nada acontece com os dados filhos depois que os dados pais sรฃo atualizados ou excluรญdos.
  • CASCADE significa que os dados filhos sรฃo excluรญdos ou atualizados apรณs os dados pais terem sido excluรญdos ou atualizados.
  • SET NULL significa que os dados filhos sรฃo definidos como nulos apรณs os dados pais serem atualizados ou excluรญdos.
  • DEFINIR PADRรƒO significa que os dados filhos sรฃo definidos com seu valor padrรฃo apรณs uma atualizaรงรฃo ou exclusรฃo nos dados pais.

Vejamos um exemplo de chave estrangeira que cria uma tabela com uma coluna como chave estrangeira, usando um tipo de dados para cada coluna.

Exemplo de chave estrangeira em SQL

Inquรฉrito:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Passo 1) Execute a consulta clicando em Executar.

Executando a consulta CREATE TABLE que define a chave estrangeira Course_ID.

Resultado: Estabelecemos uma relaรงรฃo pai-filho entre 'Curso' e 'Forรงa_do_Curso_TSQL'.

Criada uma relaรงรฃo pai-filho entre Course e Course_Strength_TSQL.

Usando ALTER TABLE

Agora vamos aprender como adicionar uma chave estrangeira em uma tabela jรก existente no SQL Server usando a instruรงรฃo ALTER TABLE. Usaremos a sintaxe abaixo:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Aqui estรก uma descriรงรฃo dos parรขmetros usados โ€‹โ€‹acima:

  • childTable รฉ o nome da tabela que serรก criada.
  • As colunas column_1 e column_2 devem ser adicionadas ร  tabela.
  • fkey_name รฉ o nome da restriรงรฃo de chave estrangeira a ser criada.
  • child_column1, child_column2 โ€ฆ child_column_n sรฃo as colunas da tabela filha que fazem referรชncia ร  chave primรกria na tabela pai.
  • `parentTable` รฉ o nome da tabela pai cuja chave รฉ referenciada na tabela filha.
  • parent_column1, parent_column2 โ€ฆ parent_column_n sรฃo as colunas que compรตem a chave primรกria da tabela pai.

Exemplo de ALTER TABLE para adicionar chave estrangeira:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Criamos uma chave estrangeira chamada fkey_student_admission na tabela de departamento. Esta chave estrangeira faz referรชncia ร  coluna de admissรฃo da tabela de alunos.

Exemplo de consulta FOREIGN KEY

Primeiro, vamos analisar os dados da nossa tabela principal, CURSO.

Inquรฉrito:

SELECT * from COURSE;

Resultado da consulta SELECT mostrando os dados da tabela pai COURSE.

Agora vamos inserir algumas linhas na tabela filha 'Course_Strength_TSQL'. Tentaremos inserir dois tipos de linhas:

  • O primeiro tipo, para o qual Course_Id na tabela filha existe em Course_Id da tabela pai, ou seja, Course_Id = 1 e 2.
  • O segundo tipo, para o qual Course_Id na tabela filha nรฃo existe em Course_Id na tabela pai, ou seja, Course_Id = 5.

Inquรฉrito:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Inserindo linhas filhas, incluindo Course_ID 5 que nรฃo possui linha pai correspondente.

Resultado: Vamos executar a consulta juntos para ver nossas tabelas pai e filha.

As linhas com Course_ID 1 e 2 existem na tabela Course_Strength. O Course_ID 5, no entanto, รฉ uma exceรงรฃo, pois nรฃo possui uma linha correspondente na tabela principal.

Tabelas pai e filho comparadas; Course_ID 5 viola a integridade referencial.

Perguntas Frequentes

Uma chave primรกria identifica exclusivamente cada linha dentro de sua prรณpria tabela e nรฃo pode ser nula. Uma chave estrangeira referencia essa chave primรกria de outra tabela para garantir a integridade referencial. chave primรกria versus chave estrangeira A comparaรงรฃo explica todas as distinรงรตes.

Sim. Uma chave estrangeira pode referenciar tanto uma chave primรกria quanto qualquer coluna que possua uma restriรงรฃo UNIQUE na tabela pai. A coluna referenciada deve conter valores รบnicos para que cada linha filha corresponda exatamente a uma linha pai.

ON DELETE CASCADE exclui automaticamente as linhas filhas correspondentes sempre que a linha pai for excluรญda, mantendoping As tabelas sรฃo consistentes. As alternativas sรฃo SET NULL, que limpa a chave estrangeira filha, e NO ACTION, que bloqueia a exclusรฃo.

Sim. Uma chave estrangeira autorreferencial aponta para uma chave primรกria na mesma tabela, o que modela hierarquias como uma linha de funcionรกrio referenciando seu gerente. Para autorreferรชncias, o SQL Server recomenda o uso de ON DELETE NO ACTION para evitar ciclos em cascata.

Sim, a menos que a coluna seja declarada como NOT NULL. Uma chave estrangeira NULL significa que a linha filha ainda nรฃo estรก vinculada a nenhuma linha pai e o SQL Server ignora a verificaรงรฃo referencial para esse valor NULL.

Execute o comando ALTER TABLE child_table DROP CONSTRAINT fkey_name. Vocรช deve fornecer o nome da restriรงรฃo, que pode ser encontrado em sys.foreign_keys. Remova a tabela.ping A chave estrangeira remove o relacionamento, mas deixa ambas as tabelas e seus dados inalterados.

Sim. Travas deslizantes portรกteis Copiloto do GitHub ร‰ possรญvel escrever restriรงรตes de chave estrangeira (Foreign Key) dentro de instruรงรตes CREATE TABLE ou ALTER TABLE a partir de um prompt em linguagem natural e sugerir a tabela pai e a coluna referenciada. Sempre revise as chaves, as aรงรตes referenciais e os tipos de dados antes de executar o script.

Ferramentas de IA e aprendizado de mรกquina examinam dados de amostra e padrรตes de consulta para sugerir quais colunas devem se tornar chaves estrangeiras, detectar relacionamentos ausentes ou รณrfรฃos e recomendar aรงรตes adequadas ao excluir eventos (ON DELETE). O desenvolvedor revisa cada sugestรฃo antes de aplicรก-la.

Resuma esta postagem com: