As relações entre as tabelas são a característica principal dos bancos de dados relacionais, que estão sendo representados por chaves estrangeiras e primárias. Neste artigo, explicaremos as chaves estrangeiras e o trabalho deles no SQLite.
O que são chaves estrangeiras?
As chaves estrangeiras são os valores em uma tabela que indicam a chave primária de outra tabela. Para entender isso, vamos considerar duas tabelas, a Tabela A e a Tabela B:
Tabela a | ||
ID do aluno (primário_key) | Nome do aluno | ID do professor (forign_key) |
---|---|---|
1 | John | 123 |
2 | Paulo | 453 |
Tabela b | ||
ID do professor (primário_key) | Nomes de professores | Assuntos permitidos |
---|---|---|
123 | Alex | Matemática, Física |
453 | Juana | Química, botânica |
Agora, na Tabela A, Identidade estudantil é a chave primária dessa tabela, e ID do professor é a chave estrangeira, mas na tabela B, ID do professor é a chave primária. ID do professor, que é uma chave estrangeira, estabelece uma relação entre a Tabela A à Tabela B.
Como verificar o status da chave estrangeira no SQLite
O SQLite começa a apoiar a característica de uma chave estrangeira após o lançamento de sua versão 3.6.19, para verificar se a versão instalada do SQLite suporta a chave estrangeira ou não, execute o seguinte comando no ambiente SQLite:
PRAGMA FOREGN_KEYS;A saída pode ser "0" ou "1" e, se não exibir nenhuma saída, significa que não suporta as chaves estrangeiras.
Saída | Resultado |
---|---|
0 | As chaves estrangeiras estão desativadas |
1 | As chaves estrangeiras estão ativadas |
Como ativar/desativar as chaves estrangeiras em Sqlite
Para ativar as chaves estrangeiras em Sqlite, execute o seguinte:
PRAGMA FOREGN_KEYS = ON;Podemos desativar as chaves estrangeiras, apenas digitando em vez de no comando acima. Para confirmar que as chaves estrangeiras estão ativadas, execute o comando Pragma:
PRAGMA FOREGN_KEYS;A saída mostra 1, o que significa que as chaves estrangeiras estão sendo ativadas.
Qual é a sintaxe geral de usar a chave estrangeira
A sintaxe geral de usar uma chave estrangeira para criar uma tabela é:
Crie tabela Table_nameA explicação disso é:
Como uma chave estrangeira funciona no sqlite
Para entender o trabalho de chaves estrangeiras, vamos considerar um exemplo de serviço de correio e criar duas tabelas, Customer_Details e Shipment_Details, que estão tendo os seguintes dados:
Detalhes do cliente | ||
Identificação do Cliente | Nome do cliente | Shipment_id |
---|---|---|
1 | John | 5612 |
2 | Paulo | 3467 |
shipment_details | |||
Shipment_id | Status | De (cidade) | Para (cidade) |
---|---|---|---|
5612 | Entregue | Londres | Manchester |
3467 | Em processo | Bristol | Cardiff |
Na tabela, Customer_Details, Customer_Id é a chave primária e o envio_ID é uma chave estrangeira. E na tabela, envio_details, shipment_id é uma chave primária.
Como adicionar uma chave estrangeira no SQLite
Para criar uma tabela, Customer_Details executa o seguinte comando:
Criar tabela Customer_Details (Customer_ID Primária Chave Primária, Customer_name NÃO NULL, RESPONSÃO_ID NÃO NULL, CHAVE ESEGAL (SHEPment_ID) Referencia a entrega_details (shipment_id));No comando acima, mencionamos a chave estrangeira e a chave primária e também nos referimos à tabela onde a chave estrangeira estará disponível. Após a criação da tabela Customer_Details, criaremos a tabela de envio_details como:
Criar tabela envio_details (Shipment_id Integer Primary Key, Status Text, City_From Text, City_to Text);Agora, para inserir valores na tabela Customer_Details, use o seguinte comando:
Inserir nos valores do cliente_details (Customer_Id, Customer_Name, Shipment_Id) (1, 'John', 5612), (2, 'Paul', 3467);Podemos ver que gerou o erro de “Erro: restrição de chave estrangeira falhou”, Este erro é gerado porque estávamos se referindo à remessa_id da tabela, envio_details, que ainda não tem valor. Então, para remover esse erro, primeiro, temos que editar os dados em shipment_details, que estamos nos referindo à chave estrangeira. Para inserir dados na tabela shipment_details, execute o seguinte comando:
Inserir em shipment_details (shipment_id, status, city_from, city_to) valores (5612, 'entregue', 'Londres', 'manchester'), (3467, 'in_process', 'bristol', 'Cardiff');Para exibir a tabela, envio_details, execute o comando:
Selecione * FROM DESTRAÇÃO_DETAILS;Agora, execute novamente o comando para inserir valores em Customer_details usando a instrução:
Inserir nos valores do cliente_details (Customer_Id, Customer_Name, Shipment_Id) (1, 'John', 5612), (2, 'Paul', 3467);O comando foi executado com sucesso sem gerar o erro de “restrição de chave estrangeira”. Para exibir a tabela, execute o comando:
Selecione * de Customer_Details;Quais são as ações de restrições de chave estrangeira
Existem algumas ações que você pode executar na chave pai como resultado da qual a chave da criança responde. A sintaxe geral é:
Chave estrangeira (estranho_key_column)Uma explicação para esta sintaxe é:
O SQLite suporta as ações que são explicadas na tabela:
Ação | Descrição |
---|---|
Nulo | Quando a chave pai é excluída, a coluna da chave infantil definida para valores nulos |
Conjunto padrão | Funciona da mesma forma que a ação nula, mas em vez de definir valores nulos para a coluna da chave infantil, ele define um valor padrão |
Sem ação | Quando as alterações são feitas na chave pai do banco de dados pai, nenhuma alteração é realizada na chave da criança |
Restringir | Não permite que o usuário adicione ou exclua os valores de uma chave pai |
Cascata | Ele passa as mudanças que são feitas em uma tabela pai para a tabela infantil |
Conclusão
Os bancos de dados relacionais são populares por sua característica de fornecer as relações entre as tabelas, Sqlite, um dos bancos de dados relacionais, também suporta esse recurso. Os relacionamentos são estabelecidos com a ajuda de chaves, conhecidas como chaves estrangeiras e primárias. Em Sqlite, a chave estrangeira deve ser habilitada para usá -la. Neste artigo, aprendemos quais são as chaves estrangeiras no sqlite e como elas funcionam. Também discutimos as ações de restrição de chaves estrangeiras apoiadas pelo SQLITE.