Questão nº 41
Questão de Tecnologia da Informação · FGV SEFAZ-ES 2021 - Manhã (nº 41)
Utilize as tabelas T, R e S para resolver as próximas 3 questões
Considere um banco de dados relacional contendo as tabelas T, R e S, cujas instâncias são exibidas a seguir.
\
Assinale o script SQL de criação das tabelas T, R e S, que esteja correto sintaticamente e seja compatível com as respectivas instâncias exibidas anteriormente.
- A```
create table T(A int not null, B varchar(64),
primary key (A))
create table R(D int not null, E datetime,
F money,
primary key (D))
create table S(G int not null, H int, I int,
primary key(G,H),
foreign key (G) references T(A),
foreign key (H) references R(D))
``` (alternativa correta) - B```
create table T(A int not null, B varchar(32),
primary key (A))
create table R(D int not null, E datetime,
F money,
primary key (D))
create table S(G int not null, H int, I int,
primary key(G),
primary key(H),
foreign key (G) references T(A),
foreign key (H) references R(D))
``` - C```
create table T(A int not null, B varchar(64),
primary key (A))
create table R(D int not null, E datetime,
F money,
primary key (D))
create table S(G int not null, H int, I int,
primary key(G,H),
foreign key (H) references T(A),
foreign key (G) references R(D))
``` - D```
create table T(A int not null, B varchar(32),
primary key (A))
create table R(D int not null, E datetime,
F money,
primary key (D))
create table S(G int not null, H int, I int,
primary key(G),
primary key(H),
foreign key (G) references T(A),
foreign key (H) references R(D))
``` - E```
create table T(A int not null, B varchar(32),
primary key (A))
create table R(D int not null, E datetime,
F money,
primary key (D))
create table S(G int not null, H int, I int,
primary key(G,H),
foreign key (G) references T(1),
foreign key (H) references R(2))
```
Resposta comentada
Gabarito Alternativa A
Um banco de dados relacional organiza informações em tabelas, que são coleções de dados estruturados em linhas e colunas. Para criar essas tabelas e definir suas regras (como chaves primárias e estrangeiras), usamos comandos SQL da DDL (Data Definition Language). A chave primária identifica unicamente cada linha de uma tabela, enquanto a chave estrangeira cria um vínculo entre tabelas, referenciando uma chave primária de outra tabela para garantir a integridade dos dados.
-
(A) Correta: Este script está sintaticamente correto e compatível com as instâncias das tabelas.
- Tabela T:
Aé definida comoINT NOT NULLePRIMARY KEY, eBcomoVARCHAR(64), o que é adequado para os dados. - Tabela R:
DéINT NOT NULLePRIMARY KEY,EéDATETIMEeFéMONEY, também compatível. - Tabela S:
GeHsãoINT NOT NULL, eIéINT. A chave primária composta(G,H)está corretamente definida, pois a combinação de G e H é única nas instâncias. As chaves estrangeiras também estão corretas:GreferenciaT(A)(valores de G em S, como 1, 2, 3, existem em A de T) eHreferenciaR(D)(valores de H em S, como 10, 20, 30, existem em D de R).
- Tabela T:
-
(B) Incorreta: A tabela
Stenta definir duas chaves primárias separadas (primary key(G)eprimary key(H)), o que é sintaticamente inválido. Uma tabela pode ter apenas uma cláusulaPRIMARY KEY, mesmo que seja composta por múltiplas colunas (comoprimary key(G,H)). Além disso, G e H individualmente não são chaves primárias, pois contêm valores repetidos nas instâncias. -
(C) Incorreta: As definições das chaves estrangeiras na tabela
Sestão invertidas.foreign key (H) references T(A)está errado porque os valores de H (10, 20, 30) não existem na coluna A da tabela T (1, 2, 3). Da mesma forma,foreign key (G) references R(D)está errado porque os valores de G (1, 2, 3) não existem na coluna D da tabela R (10, 20, 30). Armadilha da banca: Esta alternativa tenta confundir o aluno testando a compreensão de qual coluna referencia qual tabela, mesmo que a sintaxe geral pareça correta. -
(D) Incorreta: Esta alternativa é idêntica à alternativa (B) e, portanto, possui o mesmo erro de tentar definir múltiplas chaves primárias separadas para a tabela
S. -
(E) Incorreta: As definições das chaves estrangeiras na tabela
Ssão sintaticamente inválidas. A cláusulaREFERENCESdeve apontar para o nome da coluna da tabela referenciada (ex:T(A)), não para um valor literal (ex:T(1)ouR(2)).
Fonte: FGV SEFAZ-ES 2021 - Manhã Auditor Fiscal da Receita Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.
