Chave estrangeira PostgreSql

Chave estrangeira PostgreSql
Uma chave estrangeira é uma ou mais colunas com valores que dependem da chave primária. Esta restrição é usada para se juntar a duas mesas. No PostgreSQL, uma chave estrangeira ajuda a gerar um relacionamento entre as tabelas, tornando uma mesa uma tabela pai e a outra criança. A chave estrangeira pode ser criada usando:
  • Crie consulta de tabela
  • Atualizar/alterar consulta

Sintaxe

[Nome da restrição] Chave estrangeira (colunas)
Referências parent_table (colunas)
[On Exclue Action]
[Na Atualização Ação]

A tabela de referência é a tabela pai. E a coluna para a chave estrangeira é a chave primária do pai.

Chave estrangeira introduzindo na declaração de criação

Quanto às restrições de chave estrangeira, precisamos de duas tabelas para ilustrar o conceito. Vamos começar com a definição de uma tabela "designer" e a segunda é "categoria". Ambas as tabelas são criadas usando uma instrução CREATE.

>> Crie designer de tabela (designer_id int gerado sempre como identidade, designer_name varchar (50) não nulo, chave primária (designer_id));

Na tabela “Designer”, o designer_id é definido como uma chave primária. Agora crie a segunda tabela.

>> Criar categoria de tabela (categoria_id int gerada sempre como identidade, designer_id int, category_id int, category_name varchar (200) não nulo, chave primária (category_id), restrição fk_designer Key estranho (designer_id) referencia (designer_id));

Nesta tabela, category_id é definido como uma chave primária. Como essas duas tabelas devem se juntar à restrição de chave estrangeira. Fazemos o "designer_id" a chave estrangeira nesta tabela. A tabela de referência é mencionada na tabela para que a consulta possa ser facilmente executada pesquisando a tabela.

Restrição fk_designer
Chave estrangeira (designer_id)
REFERÊNCIAS Designer (designer_id));

A tabela de designer é a tabela pai, enquanto a tabela de "categoria" é a tabela infantil. Cada designer trabalha em categorias de zero ou mais vestidos, e um ou mais designers consideram cada categoria de vestido.

OBSERVAÇÃO: Para fazer uma chave estrangeira do ID de uma tabela na segunda tabela, é importante tornar esse ID específico como uma chave primária em sua tabela. Caso contrário, não formará uma chave estrangeira na outra tabela. Um erro ocorrerá ao criar a chave estrangeira.

Sem ação

Após a criação de tabelas, usamos para inserir valores nele por "inserir" comando.

>> Inserir no Designer (Designer_name) valores ('Ahmad Shah'), ('Sajjad Hassan');

Da mesma forma no caso da segunda tabela, insira os valores.

>> Inserir na categoria (designer_id, category_name) valores (1, 'vestido'), (1, 'vestido'), (2, 'traje'), (2, 'nit-1');

Na tabela de "categoria", os valores serão inseridos em duas colunas, incluindo category_name e designer_id. Adicionamos o mesmo número para o ID e o mesmo nome para o category_name aqui para cumprir a condição. Agora aplique o comando Delete para provar o tipo "sem ação" da chave estrangeira. Neste comando, fornecemos um número de identificação para excluir a linha específica da tabela.

>> Exclua do designer onde designer_id = 1;

Esta consulta não será executada com sucesso. Ele mostrará uma mensagem de erro conforme exibido no Snap, como mencionado acima. Este erro é por causa de "sem exclusão sem ação". PostgreSQL mostra a violação de restrição porque o designer_id = 1 é para duas linhas atualmente presentes na tabela.

Defina nulo como opção na cláusula de exclusão

Crie uma tabela chamada "funcionário" tendo emp_id como uma chave primária.

>> Crie funcionário da tabela (emo_id gerado sempre como identidade, emp_name varchar (50) não nulo, chave primária (EMP_ID));

Quando executamos a consulta, é exibida uma mensagem que mostra que nossa consulta é executada com sucesso. Depois de criar a tabela de funcionários, crie sua tabela infantil "Info" usando "EMP_ID" como a chave estrangeira.

>> Crie informações da tabela (info_id int gerado sempre como identidade, info_id int, emp_id int, info_name varchar (200) não nulo, chave primária (info_id), restrição fk_employee estrangeiro (emp_id) refere -se a funcionário (EMP_ID) no Delete Set Null) ;

Execute a consulta e você verá que a tabela é criada. Como a declaração da tabela "Criar" usada antes, esta é a mesma. Aqui adicionamos propriedades.

““ON DELETE SET NULL”. Esta ação é aplicada na cláusula ON DELETE. Agora temos que encher as mesas com os valores.

>> Insira nos valores do funcionário (EMP_NAME) ('Sophia Smith'), ('Rubi Williams'), ('Victoria Gomex'); >> Inserir em informações (emp_id, info_name) valores (1, 'funcionário'), (1, 'gerente'), (2, 'gerente'), (3, 'funcionário');

O comando delete consiste na cláusula "where" para identificar o ID a ser excluído da linha no funcionário da tabela.

>> Exclua do funcionário onde emp_id = 2;

Os dados relevantes serão excluídos na execução da consulta. Veremos a tabela resultante deixada após essa consulta.

>> selecione * da informação;

As linhas com a referência específica na tabela infantil 'Info' são definidas como NULL porque usamos o conjunto de exclusão de exclusão nula no comando na criação da tabela.

Usando um comando de tabela alterada

Nos exemplos anteriores, vimos como aplicar as restrições no momento da criação das tabelas. E se você criou as tabelas com restrições FK (Chave Estrangeira) e, mais tarde, você deseja adicionar restrições? Aqui está uma solução para esta pergunta. Em primeiro lugar, criaremos duas mesas. Mas no momento da criação da mesa, não há necessidade de identificar a chave estrangeira na segunda tabela para torná -la quando criança.

>> Crie enfermeiro de mesa (enfermeiro_id não nulo, enfermeiro_name varchar (55) não nulo, enfermeiro_location varchar (55) não nulo, chave primária (enfermeiro_id)); >> Crie clínica de tabela Clinic_id Int, Enfermeiro_ID INT, Clinic_details varchar (50) não nulo, clinic_type varchar (50) não nulo);

Esta tabela não contém as restrições e referências de chave estrangeira, etc. Após a inserção, agora atualizaremos a tabela, permitindo as restrições.

>> ALTER TABLE Clínica Adicionar restrição FK_NURSE CHAVE ESTRAGENS (Clinic_ID) Referências Enfermeiro (Enfermeiro_ID) Na Cascade Excluir na Atualização RESTRITAÇÃO;

A tabela terá a chave estrangeira agora após a alteração.

Remova as restrições da tabela

Para esse fim, usamos o comando alter. Este comando removerá apenas as restrições da tabela.

Isso é necessário para excluir a tabela inteira. Mas é impossível excluir ou soltar uma tabela que se junte à outra tabela na forma de uma chave estrangeira. Então, em primeiro lugar, removemos o FK_Constraint da tabela criada em primeiro lugar do segundo. Considere a tabela "Designer" e a tabela de crianças "categoria".

>> Alterar restrição de queda da categoria de tabela fk_designer;

Depois de ver que a consulta é executada. Agora aplique o comando DROP.

>> Tabela de soltar se existir designer;

Diagrama representa as chaves estrangeiras dentro das mesas. A partir da representação da ERD, tiramos um estalo para esclarecer a ambiguidade em relação às restrições da imagem; Você pode ver as junções nas mesas que criamos neste artigo.

Conclusão

"Foreign Key PostGresql" mostra a relação de união entre duas tabelas. Buscar o registro de uma tabela, causando uma mudança em outra, só pode ser feita através dessa restrição. A relação pai-filho está interutada compartilhando as chaves. Esta chave pode ser introduzida na criação ou atualização da tabela. Ambos os métodos são explicados neste guia. Esses exemplos descrevem a importância das chaves em todas as tabelas usadas em qualquer banco de dados.