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: