← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

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:

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.

Continue treinando

Questões relacionadas