Se você possui uma empresa, deve ter encontrado o valor e a necessidade de dados em seu negócio. Ter os meios para armazenar e manipular bancos de dados agrega mais valor ao negócio.
Os bancos de dados são organizados em uma convenção específica e permitem estruturar os dados em conexões, levando-nos aos bancos de dados relacionais, que foram adotados como uma forma de gerenciamento de dados desde a década de 1970. E no mercado atual, os bancos de dados relacionais são preferidos por suas capacidades de manipulação de dados.
Embora existam muitos bancos de dados relacionais disponíveis, o MySQL alcançou a liderança, classificando-se como o número dois do mundo, de acordo com a Statista, em janeiro de 2022.
No servidor SQL, as restrições são regras predefinidas e limitações impostas em uma ou várias colunas; eles estão vinculados aos valores na coluna e ajudam a manter a integridade, precisão e confiabilidade dos dados das colunas especificadas.
Simplificando, apenas os dados que atendem à regra de restrição são inseridos com sucesso na coluna. A operação de inserção é encerrada se os dados não atenderem aos critérios.
Esta postagem pressupõe que você encontrou bancos de dados relacionais, especificamente – MySQL, e deseja fortalecer seu conhecimento no domínio. Por fim, compartilharei algumas dicas para interagir com restrições de chave estrangeira.
últimas postagens
Restrições de chave primária – Uma recapitulação
Uma tabela em SQL envolve uma coluna ou várias contendo valores-chave que identificam com precisão cada linha nos sistemas. A coluna ou colunas denominadas chave primária (PK) da tabela tem a função de reforçar a integridade da entidade da tabela. As restrições de chave primária garantem dados exclusivos e geralmente são definidas em uma coluna de identidade.
Ao especificar as restrições de chave primária para sua tabela, o mecanismo de banco de dados impõe automaticamente a exclusividade dos dados gerando índices exclusivos para cada uma das colunas primárias. As chaves primárias oferecem uma vantagem extrema quando usadas em consultas, fornecendo acesso rápido aos dados.
Se as restrições de chave primária forem definidas em várias colunas, elas serão chamadas de chave primária composta ou composta. E, nesse caso, cada coluna de chave primária pode conter valores duplicados. No entanto, os valores combinados de todas as colunas na chave primária devem ser exclusivos.
Um bom exemplo é um caso em que você tem uma tabela com as colunas `id`, `names` e `age`. Quando você define sua restrição de chave primária na combinação de `id` e `names`, você pode ter instâncias duplicadas dos valores `id` ou `names`. Ainda assim, cada combinação deve ser única para evitar linhas duplicadas. Então, você pode ter registros com `id=1` e `name=Walter`, e `age-22” e `id=1`, `name=Henry` e `age=27`, mas você não pode ter outros registros com `id=1` e `name=Walter` porque a combinação não é única.
Aqui estão alguns aspectos essenciais a saber:
Restrições de chave estrangeira – um resumo
Uma chave estrangeira (FK) envolve uma coluna ou uma combinação de várias usadas para criar e vincular um link entre duas tabelas e gerencia os dados a serem armazenados em uma tabela de chave estrangeira.
Uma referência de chave estrangeira envolve a criação de um link entre duas tabelas; quando uma coluna ou colunas contendo a chave primária para outra tabela são referenciadas por uma coluna ou colunas em uma tabela diferente.
No cenário de referência de chave estrangeira, uma conexão é criada entre duas tabelas quando uma coluna ou colunas contendo chaves primárias em uma tabela são referenciadas por colunas em outra.
Em um caso de uso prático, você pode ter uma tabela, Sales.SalesOrderHeader, com uma chave estrangeira vinculada a outra tabela, Sales.Pessoa, porque há um relacionamento lógico entre vendedores e pedidos de vendas.
Aqui, o SalesPersonID na coluna SalesOrderHeader combina com a coluna de chave primária da tabela SalesPerson. A chave estrangeira da tabela SalesPerson é a coluna SalesPersonID no SalesOrderHeader.
Esse relacionamento define uma regra: um valor SalesPersonID não pode estar em sua tabela SalesOrderHeader se não existir na tabela SalesPerson.
Uma tabela pode fazer referência a até 253 outras colunas e tabelas como chaves estrangeiras, também chamadas de referências de saída. Desde 2016, o servidor SQL aumentou o número de tabelas e colunas que você pode referenciar em uma única tabela, também conhecidas como referências de entrada, de 253 para 10.000. No entanto, o aumento vem com algumas restrições:
Quais são os benefícios das chaves estrangeiras?
Conforme mencionado anteriormente, as restrições de chave estrangeira desempenham um papel essencial na proteção da integridade e consistência dos dados no banco de dados relacional. Aqui está uma análise das razões pelas quais as restrições de chave estrangeira são essenciais.
Índices de Restrições de Chave Estrangeira
As restrições de chave estrangeira não criam índices correspondentes automaticamente como o primário. Você pode criar índices manualmente para restrições de chave estrangeira; é benéfico pelas seguintes razões.
- As colunas de chave estrangeira geralmente são usadas nos critérios de junção ao combinar dados de tabelas relacionadas em consultas, combinando as colunas vinculadas à restrição. Os índices ajudam o banco de dados a encontrar dados associados em uma tabela estrangeira.
- Se você alterar as restrições de chave primária, elas serão verificadas com as estrangeiras nas tabelas relacionadas.
Não é obrigatório criar índices. Você ainda pode combinar dados de duas tabelas sem especificar as restrições de chave primária e estrangeira. No entanto, adicionar restrições de chave estrangeira otimiza as tabelas e as combina em uma consulta que atende aos critérios de uso das chaves. Se você alterar as restrições de chave primária, elas serão verificadas com as estrangeiras relacionadas.
Dicas para criar restrições de chave estrangeira em SQL
Você já gastou um tempo significativo na especulação; respondeu o porquê. Vamos mudar nosso foco e reduzi-lo às táticas para criar restrições de chave estrangeira; responda o como.
Um campo `Foreign Key` em uma tabela refere-se à `Primary Key` de outra. A tabela com a chave primária é sua tabela pai. E a tabela com a chave estrangeira é chamada de tabela filha. Vamos mergulhar.
Criando uma chave estrangeira ao criar uma tabela
Ao criar uma tabela, você também pode criar uma restrição de chave estrangeira para manter a integridade referencial. Veja como fazer:
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
O código acima cria uma tabela chamada ‘orders’ com a chave inteira primária ‘order_id’, outro inteiro ‘customer_id’ e a data ‘order_date’. Nesse caso, a restrição FOREIGN KEY é adicionada à coluna ‘customer_id’ e referencia o ‘customer_id’ em sua tabela ‘customers’.
Criando uma chave estrangeira após criar uma tabela
Suponha que você já tenha criado uma tabela e queira adicionar uma restrição de chave estrangeira; use a instrução `ALTER TABLE` em seu código. Observe o trecho de código abaixo.
ALTER TABLE orders ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
Nesse caso, você adicionou uma coluna ‘customer_id’ de restrição de chave estrangeira na tabela ‘orders’ para referenciar a coluna ‘customer_id’ na tabela ‘customers’.
Criando uma chave estrangeira sem verificar os dados existentes
Quando você adiciona uma restrição de chave estrangeira a uma tabela, o banco de dados verifica automaticamente os dados existentes para garantir a consistência com a restrição. No entanto, se você sabe que os dados são consistentes e deseja adicionar uma restrição sem a verificação de consistência, veja como fazer isso.
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(customer_id) NOT VALIDATE;
O comando NOT VALIDATE informa ao banco de dados para não verificar os dados existentes. Este caso particular é útil em casos específicos. Por exemplo, quando você tem dados massivos e deseja concluir o processo de validação.
Criando uma chave estrangeira via DELETE/UPDATE
Ao criar restrições de chave estrangeira, você pode direcionar a ação a ser executada nos casos em que a linha referenciada é atualizada ou excluída. Nesse caso, você está usando restrições de integridade referencial em cascata para ditar as ações a serem tomadas. Eles incluem:
#1. SEM AÇÃO
Como em muitos outros bancos de dados, a regra ‘NO ACTION’ é o comportamento padrão quando você cria uma restrição de chave estrangeira. Isso significa que nenhuma ação é executada quando a linha referenciada é excluída ou atualizada.
O Mecanismo de Banco de Dados gerará um erro se a restrição de chave estrangeira for violada. No entanto, isso não é recomendado porque pode levar a problemas de integridade referencial, pois a restrição de chave estrangeira precisa ser aplicada. Aqui está um exemplo de como fazer:
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE NO ACTION ON UPDATE NO ACTION;
#2. CASCATA
A regra ‘CASCADE’ é outra opção para as ações ‘ON DELETE’ e ‘ON UPDATE’ ao criar restrições de chave estrangeira. Quando implementado, significa que sempre que uma linha é atualizada ou excluída nas tabelas pai, as linhas referenciadas são atualizadas ou excluídas de acordo. Essa técnica é poderosa ao manter a integridade referencial. Aqui está um exemplo:
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE ON UPDATE CASCADE;
Você deve estar atento ao usar esta regra, pois ela pode causar consequências indesejáveis se não for usada com cuidado. Você deseja evitar a exclusão acidental de muitos dados ou a criação de referências circulares. Portanto, use esta opção apenas se necessário e com cautela.
Existem algumas regras sobre o uso do CASCADE:
- Você não pode especificar CASCADE se uma coluna de registro de data e hora fizer parte da chave estrangeira ou referenciada.
- Se sua tabela tiver um gatilho INSTEAD OF DELETE, você não poderá especificar ON DELETED CASCADE.
- Você não pode especificar ON UPDATE CASCADE se sua tabela tiver o gatilho INSTEAD OF UPDATE.
#3. DEFINIR NULO
Quando você exclui ou atualiza uma linha correspondente na tabela pai, todos os valores que compõem a chave estrangeira são definidos como nulos. Essa regra de restrição exige que as colunas de chave estrangeira sejam anuláveis para execução e não podem ser especificadas para tabelas com gatilhos INSTEAD OF UPDATE. Aqui está um exemplo de como fazê-lo.
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE SET NULL ON UPDATE SET NULL
Nesse caso, você definiu a coluna de chave estrangeira ‘customer_id’ na tabela “orders” como nula se a linha correspondente na tabela “customers” for excluída ou atualizada.
#4. CONJUNTO PADRÃO
Aqui, você está definindo todos os valores que tornam a chave estrangeira padrão, desde que a linha referenciada na tabela pai seja atualizada ou excluída.
Essa restrição será executada se todas as colunas de chave estrangeira tiverem definições padrão. Se uma coluna for anulável, seu valor padrão será definido como NULL. Observe que esta opção não pode ser especificada para tabelas com gatilhos INSTEAD OF UPDATE. Aqui está um exemplo:
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT;
No caso acima, você definiu o ‘customer_id’ na tabela “orders” para seu valor padrão, o que acontece quando a linha correspondente na tabela “customers” é excluída ou atualizada.
Palavras Finais
Neste guia, você recapitulou as restrições de chave primária e se aprofundou nas restrições de chave estrangeira. Você também encontrou várias técnicas para criar restrições de chave estrangeira. E embora existam muitas maneiras de criar restrições de chave estrangeira, esta postagem desvendou os métodos.
E esperando que você tenha aprendido novas técnicas; você não está limitado a combiná-los. Por exemplo, os métodos de restrição CASCADE, SET NULL, SET DEFAULT e NO ACTION podem ser combinados em tabelas com relações referenciais.
Se sua tabela encontrar NO ACTION, ela retornará para outras regras de restrição. Em outros casos, uma ação DELETE pode acionar uma combinação dessas regras e a regra NO ACTION será executada por último.
Em seguida, confira a folha de dicas do SQL.