Considere um banco relacional com duas tabelas declaradas como abaixo. REATE TABLE T1(A1 int not null UNIQUE, B1 int not null) CREATE TABLE T2(A2 int not null UNIQUE, B2 int, FOREIGN KEY (B2) references T1(A1)) Para n >= 1, está correto concluir que:
- A)cada linha de T1 está relacionada a exatamente 1 linha de T2;
Errada, porque uma linha de T1 pode ser referenciada por zero, uma ou várias linhas de T2, então não existe "exatamente 1" do outro lado.
- B)cada linha de T1 está relacionada a 0 ou 1 linha de T2;
Errada, porque T1 não se relaciona necessariamente com apenas 0 ou 1 linha de T2; outras linhas de T2 podem apontar para a mesma linha de T1.
- C)cada linha de T2 está relacionada a exatamente 1 linha de T1;
Errada, porque a FK em T2 pode ser NULL, então nem toda linha de T2 precisa estar relacionada a uma linha de T1.
- D)cada linha de T2 está relacionada a 0 ou 1 linha de T1;
Certa, pois B2 é uma FK para T1(A1) e, como B2 não foi declarado NOT NULL, a linha de T2 pode não referenciar ninguém ou referenciar exatamente uma linha de T1.
- E)cada linha de T2 está relacionada a n linhas de T1.
Errada, porque a relação não é obrigatoriamente de muitos-para-um no sentido de cada linha de T2 apontar para n linhas de T1; uma FK aponta para uma única linha referenciada.
Gabarito: D
Em chave estrangeira, a regra de ouro é simples: a tabela que contém a FK é a tabela "filha", e a tabela referenciada é a "pai". Aqui, em T2, a coluna B2 aponta para T1(A1), então cada valor de B2 em T2 só pode existir se houver uma linha correspondente em T1. Isso cria a ideia de que cada linha de T2 se relaciona com no máximo uma linha de T1, porque uma FK aponta para uma única linha da tabela referenciada quando a coluna referenciada é UNIQUE ou PRIMARY KEY. Mas repare no detalhe que adora derrubar candidatos: B2 pode ser NULL, porque a declaração diz apenas FOREIGN KEY (B2) references T1(A1), e não disse NOT NULL para B2. Portanto, uma linha de T2 pode não estar relacionada a linha nenhuma de T1. Resultado: a relação em T2 é de 0 ou 1 para 1, e não obrigatoriamente 1 para 1. Já T1 tem A1 como UNIQUE e NOT NULL, o que garante que cada linha de T1 pode ser apontada por várias linhas de T2, ou por nenhuma. Ou seja, a cardinalidade vista do lado de T1 não é a que muita gente imagina quando lê a palavra "foreign key" correndo. A questão testa justamente isso: obrigatoriedade (NOT NULL) e cardinalidade não são a mesma coisa. Por isso o gabarito D está correto: cada linha de T2 está relacionada a 0 ou 1 linha de T1. Isso é a leitura clássica de um relacionamento opcional para obrigatório do lado referenciador, muito comum em modelagem relacional.