Questão nº 71
Questão de Administração de Banco de Dados · FGV MPAL 2018 (nº 71)
Considere o diagrama IDEF1X a seguir.

Assinale a opção que apresenta o script SQL que cria a tabela E2 corretamente.
- A```
create table E2 (
A2 int null primary key,
B2 int null,
A1 int,
constraint FK_X foreign key (A1)
references E1(A1) )
``` - B```
create table E2 (
A2 int not nul,
B2 int null,
A1 int null,
constraint PK primary key(A2, A1),
constraint FK_X foreign key (A1)
references E1(A1) )
``` - C```
create table E2 (
A2 int not nul,
B2 int null,
constraint PK primary key(A2, A1),
constraint FK_X foreign key (A1)
references E1(A1) )
``` - D```
create table E2 (
A2 int not null,
B2 int null,
A1 int null,
constraint FK_X foreign key (A1)
references E1(A1) )
``` - E```
create table E2 (
A2 int not null primary key,
B2 int null,
A1 int null,
constraint FK_X foreign key (A1)
references E1(A1) )
``` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Para criar tabelas SQL a partir de um diagrama IDEF1X, é crucial entender como as chaves primárias (PK), chaves estrangeiras (FK) e a nulidade dos atributos são representadas e traduzidas. A chave primária de uma tabela (sublinhada no IDEF1X) sempre deve ser NOT NULL e PRIMARY KEY no SQL. Uma chave estrangeira é um atributo que referencia a chave primária de outra tabela; sua nulidade depende do tipo de relacionamento: se a linha do relacionamento é sólida (identificadora), a FK é NOT NULL; se é tracejada (não identificadora), a FK pode ser NULL.
Analisando o diagrama:
- A entidade E1 tem
A1como chave primária. - A entidade E2 tem
A2como chave primária eB2como atributo. - Existe um relacionamento não identificador (linha tracejada) de E1 para E2. Isso significa que
A1(PK de E1) migrará para E2 como uma chave estrangeira, e como o relacionamento é não identificador,A1em E2 pode ser NULL.
(A) Incorreta: A chave primária (A2) não pode ser null. PRIMARY KEY implica NOT NULL. Além disso, A1 deveria ser null explicitamente, pois é uma FK de um relacionamento não identificador.
(B) Incorreta: Contém um erro de digitação (not nul em vez de not null). Mais importante, define (A2, A1) como chave primária, o que está errado, pois no diagrama A2 é a única chave primária de E2, e A1 é uma chave estrangeira de um relacionamento não identificador, não fazendo parte da PK de E2.
(C) Incorreta: Contém um erro de digitação (not nul). A coluna A1 não foi declarada, mas é usada na definição da chave primária e da chave estrangeira, o que é um erro grave. Além disso, a chave primária (A2, A1) está incorreta.
(D) Incorreta: Embora A2 seja not null e A1 seja null (correto para a FK), falta a declaração explícita de A2 como PRIMARY KEY. NOT NULL apenas garante que o valor não seja nulo, mas não o define como a chave primária da tabela.
(E) Correta: Declara A2 como int not null primary key, o que está correto para a chave primária de E2. B2 é int null, que é um atributo simples. A1 é int null, o que está correto para uma chave estrangeira de um relacionamento não identificador. Finalmente, a restrição FK_X define A1 como chave estrangeira referenciando E1(A1), completando a tradução do diagrama.
Fonte: FGV MPAL 2018 Analista do Ministério Público - Administrador de Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.