A integridade referencial é discutida neste tutorial no contexto do banco de dados relacional. A integridade referencial é uma propriedade de dados, afirmando que todas as suas referências são válidas. Duas mesas estão preocupadas aqui. Um é chamado de tabela referenciada ou pai. Esta tabela referenciada tem uma chave primária, que pode ser composta por uma ou mais colunas. A outra tabela tem uma chave estrangeira cujos valores são os mesmos que os da chave primária da tabela referenciada. A outra tabela é chamada de tabela infantil para a tabela pai.
O número de colunas que compõem a chave estrangeira na tabela infantil é a mesma daquelas que compõem a chave primária na tabela (pai) referenciada (pai). Todos os valores de chave estrangeira são encontrados na coluna da chave primária. No entanto, os valores na coluna de chave estrangeira podem repetir na tabela infantil.
A tabela infantil tem sua própria chave primária que é diferente da coluna de chave estrangeira que possui. A tabela infantil também é chamada de tabela de referência.
“Todas as suas referências são válidas” significa que uma chave estrangeira na tabela criança aponta para uma linha na tabela referenciada. Essa chave estrangeira na tabela infantil e a chave primária na tabela referenciada (pai) são o mesmo valor. Mais de uma chave estrangeira na tabela infantil pode apontar para apenas uma linha na tabela referenciada.
Este artigo explica as restrições que estão naturalmente associadas à chave estranha da tabela infantil e à mesma chave primária da tabela referenciada. Se as restrições forem respeitadas, os dados (linhas correspondentes) em ambas as tabelas formam integridade, sem erros, tudo sendo igual; daí o termo integridade referencial.”
Ilustração com duas mesas
A notação da tabela das duas tabelas pode ser:
Vendas (SaleId, Datesold, CustomerID, funcionário)
e
Clientes (CustomerID, Nome Customername, Telefone, Endereço, Cidade, Região, Código Postal, País)
CustomerId na tabela de vendas é uma chave estrangeira com um traço sublinhado. CustomerID na tabela de clientes é uma chave primária com um único sublinhado. A chave primária para a tabela de vendas é SaleId, com um único sublinhado. SaleId na tabela de vendas depende do ClusterID, bem como depende do atributo de Datas e do atributo do funcionário (coluna).
As tabelas com dados são as seguintes:
Tabela de vendas
SaleId | datas | Identificação do Cliente | funcionário |
1 | 06/06/23 | 1 | John Jones |
2 | 07/07/23 | 2 | Barbara Baker |
3 | 07/07/23 | 2 | Peter Lewis |
4 | 07/08/23 | 1 | John Jones |
5 | 07/09/23 | 3 | Barbara Baker |
6 | 07/10/23 | 1 | Barbara Baker |
7 | 07/11/23 | 1 | Barbara Baker |
8 | 07/12/23 | 1 | John Jones |
9 | 13/07/23 | 2 | Peter Lewis |
Tabela de clientes
Para ambas as tabelas, os clientes (indivíduos) vão a uma loja e compram produtos diferentes em dias diferentes. Os produtos comprados não são mostrados. A tabela de clientes tem os endereços dos clientes na mesma cidade. A tabela de vendas tem os nomes dos funcionários que serviram aos clientes individuais e têm outros dados.
Na tabela de vendas, CustomerID é uma chave estrangeira. Na tabela de clientes, CustomerID é uma chave primária. Cada chave estrangeira na tabela de vendas ocorre na tabela de clientes uma vez. Ou seja, toda chave estrangeira na tabela de vendas faz referência a uma chave primária e, portanto, referencia uma linha distinta na tabela de clientes. Os dados (referenciais) a integridade falham se esse não for o caso.
Valor nulo e chaves estrangeiras
Uma chave estrangeira na tabela criança deve fazer referência a uma linha, através da chave primária, da tabela pai. Todas as chaves primárias da tabela pai são únicas. As chaves estrangeiras na coluna de chave estrangeira na tabela infantil, todas encontradas na tabela pai, não precisam ser únicas. Repetições de chaves estrangeiras devem ser esperadas lá. Acima, a tabela de vendas é uma tabela infantil e a tabela de clientes é uma tabela pai. Considere essas duas tabelas como pertencentes ao banco de dados de uma loja de conveniência. Os clientes são indivíduos que compram da loja.
Imagine que o cliente do ClusterID 2 o ofendeu, o proprietário da loja; Por exemplo, ele tentou roubar, e você o proibiu de sempre comprar em sua loja novamente. Isso significa que o nome dele deve ser removido da sua lista de clientes. Sua compra na mesa de vendas está no passado, aconteceu sem nenhum problema e, portanto, tem que permanecer.
Nesse caso, todo o CustomerId de 2 na tabela de vendas deve ser substituído por NULL (nada), o que significa que nenhuma referência à tabela de clientes de uma linha que foi excluída. Para a tabela de clientes acima, duas linhas permanecerão depois que sua fila (CustomerID e o restante de suas credenciais) foram excluídas.
Existem duas maneiras de anular a linha na tabela de clientes, pelo computador (sistema de gerenciamento de banco de dados) da seguinte forma:
Qualquer que seja escolhido, o valor nulo permanece na tabela de vendas como a chave estrangeira para o cliente excluído linhas correspondentes. O NULL Value Referências (aponta) nenhuma linha na tabela de clientes.
Portanto, por tais razões, uma chave estrangeira pode ter um valor nulo. Isto tem a ver com integridade referencial!
Atualizando as mesas de crianças e pais
Atualizar significa modificar. Modificar qualquer célula na tabela de crianças (vendas) (mesmo o SaleId), exceto a chave estrangeira, não causa nenhum dano à tabela infantil ou aos pais (clientes) correspondências da tabela. Por exemplo, se a data foi digitada incorretamente por engano, a data correta deve ser digitada.
Modificar qualquer célula na tabela dos pais (clientes), exceto a chave primária, não causa nenhum dano à tabela dos pais (clientes) ou à tabela de crianças (vendas) correspondências. Por exemplo, se o cliente mudou de rua, mas ainda está no bairro, mudar seu endereço na tabela de clientes não causa nenhum dano às correspondências da tabela de crianças e pais.
No entanto, alterar o valor da chave estrangeira na tabela criança significa que todos os mesmos valores de chave estrangeira na tabela filho devem ser alterados para esse valor específico, e o valor de chave primária correspondente na tabela pai também deve ser alterado , para o mesmo valor também. Isso é cascata.
Um valor nulo pode ser alterado? - Bem, sim: se o cliente acima mencionado voltar após seis meses e pedir desculpas, e você, o proprietário, perdoe-o, e se apenas suas linhas na mesa de vendas tivessem valores nulos, então seu nome e credenciais serão inseridos no Tabela de clientes, na parte inferior, com um novo ClienteID; e todos os valores nulos como chaves estrangeiras na tabela de crianças (vendas) serão substituídas por este novo clienteIDID. No entanto, se houvesse outras linhas na tabela infantil com valores nulos que não pertencem a ele, todos os valores nulos, incluindo o dele, permanecerão; E todas as suas novas vendas serão inseridas na mesa de vendas novamente, na parte inferior da mesa de vendas.
Excluindo nas mesas de crianças e pais
Não faz sentido excluir qualquer valor da célula da coluna na tabela criança ou pai, a menos que seja para uma coluna cujo valor da célula possa estar vazio. Vazio não significa nulo. Vazio significa vazio.
No entanto, uma fila inteira na tabela filho ou na tabela pai pode ser excluída. Suponha que existem algumas linhas falsas na tabela de crianças (vendas); Se essas linhas forem excluídas (incluindo seus Saleids e Keys estrangeiros), então não haverá problema. Os clientes têm outras linhas reais na mesa infantil ou simplesmente não demonstraram vontade de comprar na loja e nunca compraram nada. - Eles vão comprar um dia em um futuro próximo.
Por outro. Isso é cascata. Isso pode acontecer quando um funcionário faz vendas reais, registra informações falsas e assina como outro funcionário na mesma tabela. Como as chaves estrangeiras correspondentes na tabela infantil são as mesmas que a chave primária na tabela pai, então esse mesmo valor vincula as duas tabelas.
Para resolver esse problema, cada funcionário deve ter seu próprio livro de exercícios de vendas se o computador não estiver sendo usado. Se o computador estiver sendo usado, cada funcionário deve ter um nome de usuário de login e senha para o aplicativo do sistema de gerenciamento de banco de dados, que registra automaticamente o nome do funcionário em todas as suas ações.
Citações
Os três parágrafos a seguir são citações da Wikipedia:
“A integridade referencial é uma propriedade dos dados, afirmando que todas as suas referências são válidas.
No contexto dos bancos de dados relacionais, é necessário que, se um valor de um atributo (coluna) de uma relação (tabela) referenciar um valor de outro atributo (seja no mesmo ou em uma relação diferente), o valor referenciado deve existir.
A integridade referencial é um conceito de banco de dados que garante que as relações entre tabelas permaneçam consistentes. Quando uma tabela tem uma chave estrangeira para outra tabela, o conceito de integridade referencial afirma que você não pode adicionar um registro à tabela que contém a chave estrangeira, a menos que haja um registro correspondente na tabela vinculada.”
Ações referenciais
Sem o computador, é difícil fazer cumprir a integridade referencial. Isso leva a erros contábeis. Com o computador, a integridade referencial pode ser aplicada pela aplicação de cascata e outras ações, programando o sistema de gerenciamento de banco de dados.
CASCATA
Isso significa: atualizar ou excluir em cascata.
RESTRINGIR
Isso significa: não atualize ou exclua as linhas conectadas na tabela de crianças e pais.
Sem ação
Restringir verifica as conexões das linhas nas duas tabelas antes de tentar atualizar ou excluir. Nenhuma ação é semelhante a restringir, mas tenta atualizar ou excluir antes de verificar as conexões em ambas as tabelas.
A RESTRING emitirá uma mensagem de erro de que uma tentativa de atualizar ou excluir uma linha foi feita, apesar do fato de haver uma linha correspondente na outra tabela que não teria sido atualizada ou excluída. Nenhuma ação atualizaria ou excluiria a linha e depois emitiria uma mensagem de erro de que a linha foi atualizada ou excluída, apesar do fato de que existe uma linha correspondente na outra tabela. Obviamente, isso levaria à contabilidade errada, a menos que o usuário estivesse no processo de lidar com as duas mudanças de tabela manualmente.
Se não houver uma linha correspondente na outra tabela, atualize ou exclua a linha, se a execução foi ou não restrita ou nenhuma ação.
Defina nulo
Com esta ação aplicada, se uma linha na tabela pai for excluída, todas as chaves estrangeiras das linhas correspondentes na tabela infantil seriam definidas como nulas.
CONJUNTO PADRÃO
Com esta ação aplicada, se uma linha na tabela pai for excluída, todas as chaves estrangeiras das linhas correspondentes na tabela filho serão definidas para o valor padrão escolhido pelo usuário do banco de dados.
Conclusão
A integridade referencial é um conceito de banco de dados que garante que as relações entre tabelas permaneçam consistentes. Quando uma tabela tem uma chave estrangeira para outra tabela, o conceito de integridade referencial afirma que você não pode adicionar um registro à tabela que contém a chave estrangeira, a menos que haja um registro correspondente na tabela vinculada.
Quando as tabelas são mantidas em livros, fica difícil fazer cumprir a integridade referencial. No entanto, quando um DBMS mantém as tabelas em um computador, essas ações referenciais são aplicadas por um programador.