← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

Supondo que no Brasil - todo brasileiro tem um, e somente um, CPF; - alguns brasileiros têm um, mas somente um, passaporte válido; - alguns brasileiros têm uma, mas somente uma, carteira de motorista (CNH) válida. A definição correta desses atributos numa tabela relacional normalizada seria:

Gabarito: B

Em modelagem relacional, a regra do jogo é traduzir a realidade com as restrições certas: se todo brasileiro tem exatamente um CPF, esse atributo deve ser obrigatório e também não pode se repetir. Em banco de dados, isso normalmente significa NOT NULL e UNIQUE ao mesmo tempo. Sem o NOT NULL, o banco ainda permitiria ausência de CPF; sem o UNIQUE, permitiria duplicidade, e aí o cadastro viraria faroeste. Já passaporte e CNH não existem para todos os brasileiros. Como o enunciado diz que apenas alguns têm esses documentos, esses campos devem aceitar nulos. Ao mesmo tempo, para cada pessoa, se houver o documento, ele é único. Então a coluna deve ser NULL e com UNIQUE para impedir dois registros com o mesmo número. A pegadinha aqui é simples e clássica: muita gente acha que UNIQUE já resolve tudo, mas em SQL padrão e na maioria dos bancos, UNIQUE permite valores nulos. Ou seja, ele garante unicidade quando há valor, mas não obriga preenchimento. Para obrigar preenchimento, quem entra em cena é o NOT NULL. Por isso, a alternativa correta é a B: CPF como not null e unique, e CNH e passaporte como unique, admitindo nulo. Essa é a forma mais coerente com a normalização e com as restrições informadas no enunciado.

Continue treinando

Questões relacionadas