logo

Restrições de integridade referencial em DBMS

Uma restrição de integridade referencial também é conhecida como restrição de chave estrangeira . Uma chave estrangeira é uma chave cujos valores são derivados da chave primária de outra tabela.

A tabela da qual os valores são derivados é conhecida como Mestre ou Referenciado Tabela e a Tabela na qual os valores são inseridos de acordo são conhecidas como Filho ou Referência Tabela, Em outras palavras, podemos dizer que a tabela contendo o chave estrangeira é chamado de mesa infantil , e a tabela contendo o Chave primária/chave candidata é chamado de tabela referenciada ou pai . Quando falamos sobre o modelo relacional de banco de dados, a chave candidata pode ser definida como um conjunto de atributos que pode ter zero ou mais atributos.

A sintaxe da Tabela Mestre ou Tabela Referenciada é:

travessia de árvore
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Aqui a coluna Roll está agindo como Chave primária, o que ajudará a derivar o valor da chave estrangeira na tabela filho.

Restrição de integridade referencial

A sintaxe da tabela filho ou tabela de referência é:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Restrição de integridade referencial

Na tabela acima, a coluna Roll está atuando como Chave Estrangeira, cujos valores são derivados usando o valor Roll da chave primária da tabela mestre.

Restrição de chave estrangeira OU restrição de integridade referencial.

Existem duas restrições de integridade referencial:

Inserir restrição: O valor não pode ser inserido na tabela CHILD se o valor não estiver na tabela MASTER

sorriso mais lindo do mundo

Excluir restrição: O valor não pode ser excluído da tabela MASTER se o valor estiver na tabela CHILD

Suponha que você queira inserir Roll = 05 com outros valores de colunas na tabela SUBJECT, então você verá imediatamente um erro ' Restrição de chave estrangeira violada 'ou seja, ao executar um comando de inserção como:

Insira nos valores do ASSUNTO (5, 786, OS); não será atendido pelo SQL devido à restrição de inserção (Como você não pode inserir valor em uma tabela filho se o valor não estiver na tabela mestre, uma vez que Roll = 5 não está presente na tabela mestre, portanto, não será permitido inserir Roll = 5 na tabela filho)

Da mesma forma, se você deseja excluir Roll = 4 da tabela STUDENT, você verá imediatamente um erro ' Restrição de chave estrangeira violada 'ou seja, ao executar um comando de exclusão como:

Excluir de STUDENT onde Roll = 4; não será atendido pelo SQL devido à restrição de exclusão. (Como você não pode deletar o valor da tabela master se o valor estiver na tabela filho, já que Roll = 5 está presente na tabela filho, portanto não será permitido deletar Roll = 5 da tabela master, vamos se de alguma forma, conseguimos excluir Roll = 5, então Roll = 5 estará disponível na tabela filho, o que acabará por violar a restrição de inserção).

EM EXCLUIR CASCATA.

De acordo com a restrição de exclusão: O valor não pode ser excluído da tabela MASTER se o valor estiver na tabela CHILD. A próxima pergunta é: podemos excluir o valor da tabela mestre se o valor estiver na tabela filho sem violar a restrição de exclusão? ou seja, no momento em que excluímos o valor da tabela mestre, o valor correspondente a ele também deve ser excluído da tabela filho.

A resposta à pergunta acima é SIM, podemos excluir o valor da tabela mestre se o valor estiver na tabela filho sem violar a restrição de exclusão, temos que fazer uma pequena modificação ao criar a tabela filho, ou seja, adicionando ao excluir cascata .

SINTAXE DA TABELA

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

Na sintaxe acima, logo após fazer referência à palavra-chave (usada para criar a chave estrangeira), adicionamos a cascata de exclusão, adicionando-a agora, podemos excluir o valor da tabela mestre se o valor estiver na tabela filho sem violar a exclusão limitação. Agora se você quiser deletar Roll = 5 da tabela master mesmo que Roll = 5 esteja na tabela filha, é possível porque no momento em que você der o comando para deletar Roll = 5 da tabela master, a linha tendo Roll = 5 da tabela filho também serão excluídos.

Restrição de integridade referencial
Restrição de integridade referencial

As duas tabelas STUDENT e SUBJECT acima com quatro valores cada são mostradas, agora suponha que você queira excluir Roll = 4 da tabela STUDENT (Master) escrevendo um comando SQL: excluir de ALUNO onde Roll = 4;

sementes vs esporos

No momento em que o SQL executa o comando acima, a linha com Roll = 4 da tabela SUBJECT (Child) também será excluída. ALUNO e ASSUNTO tabela ficará assim:

Restrição de integridade referencial
Restrição de integridade referencial

Nas duas tabelas acima, STUDENT e SUBJECT, você pode ver que em ambas as tabelas Roll = 4 é excluído de uma só vez, sem violar a restrição de exclusão.

Às vezes, uma pergunta muito importante é feita nas entrevistas: a chave estrangeira pode ter valores NULL?

A resposta à pergunta acima é SIM, pode ter valores NULL, enquanto a chave primária não pode ser NULL a qualquer custo. Para entender de forma prática a questão acima vamos entender abaixo o conceito de delete null.

como fechar o modo de desenvolvedor

EM EXCLUIR NULO.

De acordo com a restrição de exclusão: O valor não pode ser excluído da tabela MASTER se o valor estiver na tabela CHILD. A próxima pergunta é: podemos excluir o valor da tabela mestre se o valor estiver na tabela filho sem violar a restrição de exclusão? ou seja, no momento em que excluímos o valor da tabela mestre, o valor correspondente a ele também deve ser excluído da tabela filho ou pode ser substituído pelo valor NULL.

A resposta à pergunta acima é SIM, podemos excluir o valor da tabela mestre se o valor estiver na tabela filho sem violar a restrição de exclusão inserindo NULL na chave estrangeira, temos que fazer uma pequena modificação ao criar a tabela filho, ou seja, adicionando ao excluir nulo .

SINTAXE DA TABELA:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

Na sintaxe acima, logo após fazer referência à palavra-chave (usada para criar a chave estrangeira), adicionamos delete null, adicionando-o agora, podemos excluir o valor da tabela mestre se o valor estiver na tabela filho sem violar a exclusão limitação. Agora se você quiser deletar Roll = 4 da tabela master mesmo que Roll =4 esteja na tabela filha, é possível porque no momento em que você der o comando para deletar Roll = 4 da tabela master, a linha tendo Roll = 4 da tabela filho será substituído por um valor NULL.

Restrição de integridade referencial
Restrição de integridade referencial

As duas tabelas STUDENT e SUBJECT acima com quatro valores cada são mostradas, agora suponha que você queira excluir Roll = 4 da tabela STUDENT (Master) escrevendo um comando SQL: excluir de ALUNO onde Roll = 4;

No momento em que o SQL executa o comando acima, a linha com Roll = 4 da tabela SUBJECT (Child) será substituída por um valor NULL. ALUNO e ASSUNTO tabela ficará assim:

Restrição de integridade referencial
Restrição de integridade referencial

Nas duas tabelas STUDENT e SUBJECT acima, você pode ver que na tabela STUDENT Roll = 4 é excluído enquanto o valor de Roll = 4 na tabela SUBJECT é substituído por NULL. Isso prova que a chave estrangeira pode ter valores nulos. Se no caso da tabela SUBJECT, a coluna Roll for a chave primária junto com a chave estrangeira, então, nesse caso, não poderíamos fazer uma chave estrangeira com valores NULL.