Questão nº 46
Questão de Tecnologia da Informação · FGV TCE-TO 2022 (nº 46)
Considere um banco relacional com duas tabelas declaradas como abaixo.
```
CREATE 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:
- Acada linha de T1 está relacionada a exatamente 1 linha de T2;
- Bcada linha de T1 está relacionada a 0 ou 1 linha de T2;
- Ccada linha de T2 está relacionada a exatamente 1 linha de T1;
- Dcada linha de T2 está relacionada a 0 ou 1 linha de T1; (alternativa correta)
- Ecada linha de T2 está relacionada a n linhas de T1.
Resposta comentada
Gabarito Alternativa D
As chaves estrangeiras (FOREIGN KEY) são colunas em uma tabela (tabela "filha") que fazem referência a uma coluna (geralmente a chave primária ou uma coluna com restrição UNIQUE) em outra tabela (tabela "pai"), estabelecendo um relacionamento entre elas. A restrição UNIQUE garante que todos os valores em uma coluna sejam distintos, enquanto NOT NULL impede valores vazios.
(A) Incorreta: Uma linha em T1 pode não ter nenhuma linha correspondente em T2, ou pode ter várias linhas em T2 que a referenciam (relação 1 para N de T1 para T2). Por exemplo, `T1` pode ter `(10, 1)`, e `T2` pode ter `(100, 10)` e `(101, 10)`.
(B) Incorreta: Conforme explicado na alternativa A, uma linha de T1 pode estar relacionada a várias linhas de T2, não apenas 0 ou 1.
(C) Incorreta: A armadilha aqui é a coluna `B2` em `T2` ser anulável (`B2 int`). Se `B2` fosse `NOT NULL`, então cada linha de T2 seria obrigada a referenciar exatamente 1 linha de T1 (já que `T1.A1` é `UNIQUE`). No entanto, como `B2` pode ser `NULL`, uma linha em `T2` com `B2 = NULL` não se relaciona a nenhuma linha em `T1`.
(D) Correta: Cada linha de T2 tem uma coluna `B2`. Se `B2` for `NULL`, essa linha de T2 não está relacionada a nenhuma linha de T1 (0 linhas). Se `B2` tiver um valor não nulo, devido à restrição `FOREIGN KEY (B2) references T1(A1)`, esse valor deve existir em `T1.A1`. Como `T1.A1` é `UNIQUE`, esse valor corresponde a exatamente uma linha em T1 (1 linha). Portanto, cada linha de T2 está relacionada a 0 ou 1 linha de T1.
(E) Incorreta: Uma linha em T2, através de seu valor em `B2`, só pode referenciar um único valor em `T1.A1`. Como `T1.A1` é `UNIQUE`, um valor em `B2` (se não for `NULL`) só pode corresponder a uma única linha em T1.
Fonte: FGV TCE-TO 2022 Analista Técnico - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.