Banco de Dados

Questão Motivadora:

Se uma determinada tabela T1 possui uma chave estrangeira, a qual é chave primária em uma tabela T2, então ela deve ser igual a um valor de chave primária existente em T2 ou ser nula.

Este ítem foi considerado certo pela ESAF em 2002.2/AFRF.


De fato, está correta!
Cenário 1:
Cliente(1,N)-----(1,N)LinhaCrédito
Neste caso, uma empresa X somente efetua uma venda caso o seu cliente possua uma linha de crédito. Trata-se de um relacionamento mandatário, em que não poderá existir valores nulos.

Cenário 2:
Cliente(1,N)-----(0,N)LinhaCrédito
Neste caso, uma empresa X pode efetuar uma venda mesmo sem uma linha de crédito concedida ao cliente. Trata-se de um relacionamento NÃO mandatário, que poderá ser expresso por valores não nulos (cliente com linha de crédito) ou por valores nulos (cliente sem linha de crédito).
Esse segundo cenário é o que trata a questão



Apenas para ilustrar a resposta do Mega Aprovado, segue abaixo uma pequena demonstração como funciona este tipo de relacionamento em um SGBD:

SQL> CREATE TABLE T1 (N1 NUMBER);
Tabela criada.

SQL> CREATE TABLE T2 (N2 NUMBER);
Tabela criada.

SQL> ALTER TABLE T2 ADD CONSTRAINT T2PK PRIMARY KEY (N2); <--- Chave primária criada Tabela alterada. SQL> ALTER TABLE T1 ADD FOREIGN KEY (N1) REFERENCES T2 (N2); <--- Chave estrangeira criada Tabela alterada. SQL> INSERT INTO T2 VALUES (1);
1 linha criada.

SQL> INSERT INTO T2 VALUES (2);
1 linha criada.

SQL> INSERT INTO T1 VALUES (1);
1 linha criada.

SQL> INSERT INTO T1 VALUES (3);
INSERT INTO T1 VALUES (3)
*
ERRO na linha 1:
ORA-02291: restrição de integridade (SYSTEM.SYS_C0032810) violada - chave mãe não localizada

Ou seja, o valor "3" não está presente na tabela T2 e por isso não podemos inserir esse valor na tabela T1.

Comentários

Postagens mais visitadas deste blog

Redação Ti Nota 10 - Klauss

Prova Discursiva nota 10 - Banca Cespe

Portugues - Orações