Pular para o conteúdo principal

Questão de Banco de Dados — MySQL — FGV 2023

Banco de DadosMySQL
Código
fg073203
Banca
FGV
Órgão
TJ-SE
Ano
2023
Nível
Médio
Cargo
Técnico Judiciário - Especialidade - Programação de Sistemas
Observe o modelo lógico simplificado de gerenciamento da biblioteca XPTO, contendo as entidades: LIVRO, AUTOR e LIVRO_AUTOR a seguir.Imagem associada para resolução da questãoO script em MySQL para implementar fisicamente a entidade associativa LIVRO_AUTOR é:
  1. ACREATE TABLE livro_autor (ano DATETIME NOT NULL,PRIMARY KEY (idlivro, idautor),FOREIGN KEY (idlivro) REFERENCES livro (idlivro),FOREIGN KEY (idautor) REFERENCES autor (idautor)) ENGINE=InnoDB;
  2. BCREATE TABLESPACE livro_autor (ano DATETIME NOT NULL,PRIMARY KEY (idlivro, idautor),FOREIGN KEY (idlivro) REFERENCES livro (idlivro),FOREIGN KEY (idautor) REFERENCES autor (idautor)) ENGINE=InnoDB;
  3. CCREATE TABLE livro_autor (Idlivroautor INT NOT NULL AUTO_INCREMENT,ano DATETIME NOT NULL,PRIMARY KEY (idlivroautor),FOREIGN KEY (idlivro) REFERENCES livro (idlivro),FOREIGN KEY (idautor) REFERENCES autor (idautor)) ENGINE=InnoDB;
  4. DCREATE TABLE livro_autor (idlivro INT NOT NULL,idautor INT NOT NULL,ano DATETIME NOT NULL,PRIMARY KEY (idlivro, idautor),FOREIGN KEY (idlivro) REFERENCES livro (idlivro),FOREIGN KEY (idautor) REFERENCES autor (idautor)) ENGINE=InnoDB;
  5. ECREATE TABLESPACE livro_autor (idlivro INT NOT NULL,idautor INT NOT NULL,ano DATETIME NOT NULL,PRIMARY KEY (idlivro, idautor),FOREIGN KEY (idlivro) REFERENCES livro (idlivro),FOREIGN KEY (idautor) REFERENCES autor (idautor)) ENGINE=InnoDB;
Revelar gabarito e comentário

GabaritoD — CREATE TABLE livro_autor ( idlivro INT NOT NULL, idautor INT NOT NULL, ano DATETIME NOT NULL, PRIMARY KEY (idlivro, idautor), FOREIGN KEY (idlivro) REFERENCES livro (idlivro), FOREIGN KEY (idautor) REFERENCES autor (idautor) ) ENGINE=InnoDB;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Entidade associativa LIVRO_AUTOR: implementação física em MySQL

Gabarito: letra D. A entidade associativa (tabela de ligação) entre LIVRO e AUTOR deve conter as chaves estrangeiras idlivro e idautor, ambas NOT NULL, e a chave primária composta por essas duas colunas — exatamente o que a alternativa D apresenta. As demais alternativas erram ao usar CREATE TABLESPACE (que cria um espaço de armazenamento, não uma tabela), ao omitir as colunas das chaves estrangeiras ou ao criar uma chave primária artificial desnecessária.

Uma entidade associativa surge quando o relacionamento entre duas entidades é do tipo muitos-para-muitos (N:N). No modelo lógico, isso não pode ser representado diretamente com chaves estrangeiras simples: seria necessário duplicar registros ou criar ambiguidade. A solução é criar uma tabela intermediária que armazena as chaves primárias das duas entidades originais, formando uma chave primária composta. Essa tabela pode ainda conter atributos próprios do relacionamento — no caso, o atributo ano, que indica o ano em que o autor participou da obra.

Na prática, para implementar essa tabela em MySQL, precisamos de:

  1. Colunas para as chaves estrangeiras: idlivro e idautor, ambas do mesmo tipo das chaves primárias das tabelas livro e autor (tipicamente INT), e NOT NULL, pois todo registro da associação deve referenciar um livro e um autor existentes.

  2. Chave primária composta: PRIMARY KEY (idlivro, idautor) — garante que a combinação livro-autor seja única, impedindo duplicatas.

  3. Chaves estrangeiras: FOREIGN KEY (idlivro) REFERENCES livro (idlivro) e FOREIGN KEY (idautor) REFERENCES autor (idautor) — garantem a integridade referencial.

  4. Engine InnoDB: necessário para suportar chaves estrangeiras e transações.

A alternativa D é a única que cumpre todos esses requisitos. As alternativas B e E usam CREATE TABLESPACE, que é um comando para criar um espaço de armazenamento físico, não uma tabela — um erro conceitual grave. A alternativa A omite as colunas idlivro e idautor, referenciando-as apenas nas chaves, o que é inválido. A alternativa C cria uma chave primária artificial idlivroautor com AUTO_INCREMENT, o que é desnecessário e até prejudicial, pois a chave natural composta já garante a unicidade e evita duplicatas.

A pegadinha central desta questão é a distinção entre CREATE TABLE e CREATE TABLESPACE. O candidato desatento pode confundir os dois comandos, especialmente porque ambos aparecem em alternativas com estruturas semelhantes. Além disso, a alternativa C parece plausível à primeira vista, mas a chave artificial é redundante e não reflete a modelagem correta de uma entidade associativa.

Guarde o critério decisivo: em uma entidade associativa, a chave primária é composta pelas chaves estrangeiras das entidades relacionadas, e o comando correto é CREATE TABLE. É exatamente nesses dois pontos que as alternativas se dividem.

Critério

A

B

C

D (gabarito)

E

Comando correto (CREATE TABLE)

❌ (CREATE TABLESPACE)

❌ (CREATE TABLESPACE)

Colunas idlivro e idautor declaradas

❌ (omitidas)

❌ (omitidas)

Chave primária composta (idlivro, idautor)

❌ (chave artificial idlivroautor)

Chaves estrangeiras com REFERENCES

ENGINE=InnoDB

Alternativa A — ❌ Incorreta

O erro está na omissão das colunas idlivro e idautor na definição da tabela. O comando referencia essas colunas na PRIMARY KEY e nas FOREIGN KEY, mas elas não foram declaradas como colunas da tabela. Em SQL, toda coluna referenciada em uma restrição precisa existir na definição da tabela. Sem as colunas, o comando falharia com erro de sintaxe.

Alternativa B — ❌ Incorreta

Usa CREATE TABLESPACE, que é um comando para criar um espaço de armazenamento físico (arquivo ou diretório) onde as tabelas serão armazenadas, não para criar uma tabela. Além disso, repete o erro da alternativa A ao omitir as colunas das chaves estrangeiras. O comando correto para criar uma tabela é CREATE TABLE.

Alternativa C — ❌ Incorreta

Cria uma chave primária artificial idlivroautor com AUTO_INCREMENT. Isso é desnecessário e inadequado para uma entidade associativa: a chave natural composta (idlivro, idautor) já garante a unicidade e evita duplicatas. Além disso, a chave artificial permitiria registros duplicados da mesma combinação livro-autor, o que violaria a semântica do relacionamento N:N. A modelagem correta usa a chave composta.

Alternativa D — ✅ Correta ⟵ GABARITO

Esta alternativa implementa corretamente a entidade associativa: declara as colunas idlivro e idautor como INT NOT NULL, define a chave primária composta (idlivro, idautor), e adiciona as chaves estrangeiras referenciando as tabelas livro e autor. O uso de ENGINE=InnoDB é apropriado para suportar integridade referencial. É exatamente o script esperado para o modelo lógico apresentado.

Alternativa E — ❌ Incorreta

Usa CREATE TABLESPACE em vez de CREATE TABLE, o mesmo erro conceitual da alternativa B. Embora a estrutura de colunas e chaves esteja correta, o comando errado invalida a alternativa. CREATE TABLESPACE não cria uma tabela, mas sim um espaço de armazenamento físico.

Gabarito: letra D — a única que implementa corretamente a entidade associativa com CREATE TABLE, colunas de chave estrangeira, chave primária composta e integridade referencial.

Link permanente: /questoes/fg073203