Introdução à chave estrangeira no SQL

Chave estrangeira é uma restrição no SQL. É usado para relacionar as duas tabelas. Uma chave estrangeira em uma tabela aponta para uma chave primária em outra tabela. Uma chave estrangeira pode ser usada para garantir que a linha em uma tabela tenha linhas / linhas correspondentes em outra tabela. A tabela referenciada é chamada de tabela pai e a tabela com a chave estrangeira é conhecida como tabela filho. Esse relacionamento pai-filho reforça a regra conhecida como Integridade Referencial. A integridade referencial é uma propriedade dos dados que afirmam que todas as suas referências são válidas.

Portanto, se você tiver relações de um para muitos ou muitos para muitos no banco de dados, as chaves estrangeiras serão muito úteis. Ele atua como uma referência cruzada entre duas tabelas (tabela pai e tabela filho) porque faz referência à chave primária de outra tabela. Portanto, ele estabelece um link entre parent_table e child_table.

Sintaxe

Criar uma nova tabela com uma chave estrangeira requer a permissão CREATE TABLE no banco de dados

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (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 ) ) );

  • Child_Table é o nome da tabela que criaremos
  • column_1, column_2 - as colunas a serem adicionadas à tabela.
  • F_key - Esta é uma restrição de chave estrangeira.
  • child_column1, child_column2… child_column_n- É o nome das colunas child_Table para referenciar a chave primária na tabela pai.
  • Parent_Table - Este é o nome da tabela parent. A chave primária de parent_table é referenciada em child_table
  • ON DELETE - Este parâmetro executa uma ação nos dados filho após a exclusão dos dados pai. SET NULL, NO ACTION, CASCADE, SET DEFAULT são alguns dos valores desse parâmetro.
  • ON UPDATE - Este é um parâmetro opcional que executa uma ação nos dados filho após a atualização nos dados pai. SET NULL, NO ACTION, CASCADE, SET DEFAULT são alguns dos valores desse parâmetro.
  • CASCADE- Podemos usar isso junto com ON DELETE e ON UPDATE. Após a exclusão ou atualização dos dados pai Os dados filho serão excluídos ou atualizados.

Criar uma chave estrangeira em uma tabela existente requer permissão ALTER na tabela.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Regras

  1. Chaves estrangeiras não são aplicáveis ​​a tabelas temporárias.
  2. A restrição de chave estrangeira não precisa ser vinculada apenas à chave primária de outra tabela; também pode ser vinculada à restrição UNIQUE de outra tabela.
  3. As restrições FOREIGN KEY podem referenciar outra coluna na mesma tabela. Isso é chamado de auto-referência.
  4. As restrições de chave estrangeira podem se referir às tabelas no mesmo banco de dados.
  5. Também podemos inserir valores NULL na tabela filho.
  6. Quando inserimos outro valor que não o NULL na restrição de chave estrangeira, o valor deve existir na coluna referenciada, caso contrário ocorreu uma mensagem de violação.
  7. O valor das chaves exclusivas do pai não pode ser alterado se a regra de atualização for RESTRICT e houver uma ou mais linhas dependentes. No entanto, se a regra de atualização for SEM AÇÃO, as chaves exclusivas pai poderão ser atualizadas desde que cada filho possua uma chave pai no momento em que a instrução de atualização for concluída.

Exemplos

Digamos que temos duas tabelas Clientes e Pedidos. A tabela Customers possui todos os dados relacionados ao cliente e a tabela Orders possui dados relacionados ao pedido do cliente.

clientes

Cust_idChave primária
Cust_name
Localização

Encomendas

Order_idChave primária
Data do pedido
Qtde
Cust_idChave estrangeira
Valor total

No exemplo acima, a coluna Cust_id na tabela ORDERS é uma chave estrangeira que aponta para a coluna Cust_id na tabela CUSTOMERS.

Vamos supor que essas tabelas tenham os seguintes valores

clientes

1001AlexNOS
1002CareyNOS
1003SidReino Unido
1004TomAUS
1005KapilIND

Encomendas

7820-10-2018510021200
7910-12-201741001800
8020-11-201621005369
8110/09/201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8501-02-201621002260

Para cust_id 1001, existem três pedidos na tabela de pedidos.

Para cust_id 1003, não há pedido.

Portanto, se tivermos dados específicos (Say id 1003) na tabela pai, não será necessário ter esses dados na tabela filho, mas vice-versa não será verdadeiro.

Não podemos ter nenhum dado na tabela Filho (Tabela Pedidos) que não exista na tabela pai (Clientes).

Por exemplo, não podemos inserir um novo registro, digamos para cust_id 1006 na tabela Pedidos, porque cust_id 1006 não existe na tabela Customers.

Então, abaixo estão os exemplos que violam a integridade referencial desse relacionamento:

  1. Inserir uma linha na tabela ORDERS em que Cust_ID não aparece na coluna Cust_ID na tabela CUSTOMERS.
  2. A exclusão de uma linha da tabela CUSTOMERS em que o Cust_ID da linha a ser excluída ainda está presente na coluna Cust_ID da tabela ORDERS.

Quando um registro específico é excluído da tabela principal, há duas maneiras de manter a integridade dos dados na tabela filho. Quando duas tabelas são conectadas à chave estrangeira e determinados dados na tabela principal são excluídos, para os quais o registro também existe na tabela filho, temos um mecanismo para salvar a integridade dos dados na tabela filho

  • On Delete Cascade : Isso removerá o registro da tabela filha se esse valor da chave estrangeira for excluído da tabela principal.
  • On Delete NULL: Isso definirá todos os valores desse registro da tabela filho como NULL, para os quais o valor da chave estrangeira é excluído da tabela principal.

Conclusão - Chave estrangeira no SQL

Portanto, é aconselhável usar a chave estrangeira no banco de dados que tenha um para um ou um para muitos relacionamentos. A principal vantagem do uso de restrições de chave estrangeira é que ela melhora o desempenho. Os desenvolvedores podem identificar facilmente a estrutura do banco de dados. Também podemos examinar como a consulta recuperará os dados.

Artigos recomendados

Este é um guia para Chave estrangeira no SQL. Aqui discutimos as regras e exemplos de chave estrangeira no SQL com a sintaxe. Você também pode consultar os seguintes artigos para saber mais -

  1. Exibições SQL
  2. Tipos de junções no SQL Server
  3. O que é PL / SQL?
  4. Restrições do SQL Server
  5. Os 6 principais tipos de junções no MySQL com exemplos