Observe o modelo lógico simplificado de gerenciamento da biblioteca XPTO, contendo as entidades: LIVRO, AUTOR e LIVRO_AUTOR a seguir. O script em MySQL para implementar fisicamente a entidade associativa LIVRO_AUTOR é:
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;
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;
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;
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;
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”.
Modelo relacional: entidade associativa e chave primária composta
Gabarito: letra D. O script correto para implementar fisicamente a entidade associativa LIVRO_AUTOR é o que cria a tabela com CREATE TABLE, declara as colunas idlivro e idautor como INT NOT NULL, define a chave primária composta PRIMARY KEY (idlivro, idautor) e as chaves estrangeiras referenciando as tabelas livro e autor — 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.
A entidade associativa (também chamada de tabela de ligação ou tabela associativa) surge quando um relacionamento muitos-para-muitos (N:N) precisa ser representado no modelo relacional. No modelo entidade-relacionamento, um livro pode ter vários autores e um autor pode escrever vários livros — essa relação N:N não pode ser representada diretamente com chaves estrangeiras simples, pois uma linha de livro não pode guardar vários idautor em uma única coluna. A solução é criar uma tabela intermediária, LIVRO_AUTOR, cuja chave primária é a combinação das chaves estrangeiras das duas entidades participantes. Essa chave composta garante que cada par (livro, autor) seja único, impedindo duplicatas.
Na prática, a tabela LIVRO_AUTOR deve conter:
idlivro INT NOT NULL — chave estrangeira para livro(idlivro);
idautor INT NOT NULL — chave estrangeira para autor(idautor);
ano DATETIME NOT NULL — atributo próprio do relacionamento (o ano em que o autor participou da obra);
O atributo ano é um atributo do relacionamento, não das entidades originais — ele só faz sentido no contexto da associação entre um livro específico e um autor específico. Por isso, ele pertence à tabela associativa.
A pegadinha central desta questão está em dois pontos: (1) o comando CREATE TABLESPACE é usado no MySQL para criar um espaço de tabela (tablespace), não uma tabela — as alternativas B e E usam esse comando incorretamente; (2) 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 (idlivro, idautor) já é suficiente e semanticamente correta. A alternativa A, embora use CREATE TABLE, omite a declaração das colunas idlivro e idautor — sem elas, as chaves estrangeiras não têm onde se ancorar, tornando o script inválido.
Guarde o critério decisivo: uma entidade associativa N:N exige chave primária composta pelas chaves estrangeiras e declaração explícita das colunas que participam dessas chaves. É exatamente nesses dois pontos que as alternativas se dividem.
Critério
Alternativa A
Alternativa B
Alternativa C
Alternativa D (✅)
Alternativa E
Comando de criação
CREATE TABLE ✅
CREATE TABLESPACE ❌
CREATE TABLE ✅
CREATE TABLE ✅
CREATE TABLESPACE ❌
Colunas idlivro e idautor declaradas
Não ❌
Não ❌
Não ❌
Sim ✅
Sim ✅
Chave primária
Composta (idlivro, idautor) ✅
Composta (idlivro, idautor) ✅
Artificial idlivroautor ❌
Composta (idlivro, idautor) ✅
Composta (idlivro, idautor) ✅
Chaves estrangeiras válidas
Não (colunas inexistentes) ❌
Não (colunas inexistentes) ❌
Não (colunas inexistentes) ❌
Sim ✅
Sim ✅
Atributo ano presente
Sim ✅
Sim ✅
Sim ✅
Sim ✅
Sim ✅
Motor InnoDB
Sim ✅
Sim ✅
Sim ✅
Sim ✅
Sim ✅
Alternativa A — ❌ Incorreta
O erro está na omissão das colunasidlivro e idautor. O script declara ano DATETIME NOT NULL e define PRIMARY KEY (idlivro, idautor) e as FOREIGN KEY, mas não cria as colunasidlivro e idautor na lista de colunas da tabela. No MySQL, uma chave primária ou estrangeira só pode referenciar colunas que existam na tabela — sem a declaração idlivro INT NOT NULL e idautor INT NOT NULL, o comando falha com erro de "Unknown column". A alternativa tenta usar as chaves sem definir os campos, o que é sintaticamente inválido.
Alternativa B — ❌ Incorreta
O erro está no comando CREATE TABLESPACE. No MySQL, CREATE TABLESPACE é usado para criar um espaço de armazenamento (tablespace) para tabelas InnoDB, não para criar uma tabela. A sintaxe correta para criar uma tabela é CREATE TABLE. Além disso, a alternativa também omite as colunas idlivro e idautor, repetindo o erro da alternativa A. O comando CREATE TABLESPACE não aceita definição de colunas, chaves primárias ou estrangeiras — ele apenas define parâmetros de armazenamento físico.
Alternativa C — ❌ Incorreta
O erro está na chave primária artificial desnecessária. A alternativa cria uma coluna Idlivroautor INT NOT NULL AUTO_INCREMENT e a define como PRIMARY KEY (idlivroautor), em vez de usar a chave composta natural (idlivro, idautor). Em uma entidade associativa N:N, a chave primária deve ser a combinação das chaves estrangeiras, pois é isso que garante a unicidade do par (livro, autor) e impede duplicatas. Criar uma chave artificial AUTO_INCREMENT é redundante e semanticamente incorreto — ela não impede que o mesmo par (livro, autor) seja inserido duas vezes, pois a unicidade não é verificada sobre as colunas que realmente importam. Além disso, a alternativa não declara as colunas idlivro e idautor na lista de colunas, o que também tornaria as FOREIGN KEY inválidas.
Alternativa D — ✅ Correta ⟵ GABARITO
Esta alternativa implementa corretamente a entidade associativa. Ela:
usa CREATE TABLE livro_autor — comando correto para criar a tabela;
declara as colunas idlivro INT NOT NULL e idautor INT NOT NULL — as chaves estrangeiras têm onde se ancorar;
declara ano DATETIME NOT NULL — o atributo do relacionamento;
define PRIMARY KEY (idlivro, idautor) — chave primária composta, que garante a unicidade do par e é a forma correta de modelar o relacionamento N:N;
define as FOREIGN KEY referenciando livro(idlivro) e autor(idautor) — mantendo a integridade referencial;
usa ENGINE=InnoDB — motor que suporta chaves estrangeiras e transações.
Alternativa E — ❌ Incorreta
O erro está no comando CREATE TABLESPACE, assim como na alternativa B. Apesar de declarar corretamente as colunas idlivro, idautor e ano, e definir a chave primária composta e as chaves estrangeiras, o comando CREATE TABLESPACE não é o comando para criar tabelas no MySQL. Ele é usado para gerenciar espaços de armazenamento físico, não aceita definição de colunas nem de chaves. Portanto, o script é inválido.
NÃO CAIA NESSA!
A banca explora duas confusões clássicas: (1) trocar CREATE TABLE por CREATE TABLESPACE — o candidato que sabe que a tabela precisa de colunas e chaves pode marcar a alternativa E, que tem a estrutura certa mas o comando errado; (2) criar uma chave primária artificial AUTO_INCREMENT em uma entidade associativa, quando o correto é a chave composta pelas chaves estrangeiras. Fique atento: em relacionamentos N:N, a chave primária é sempre a combinação das chaves estrangeiras, nunca uma coluna artificial.
PEGA ESSA DICA!
Para resolver questões de entidade associativa, verifique sempre três pontos na ordem: (1) o comando é CREATE TABLE? (2) as colunas das chaves estrangeiras estão declaradas? (3) a chave primária é composta pelas chaves estrangeiras? Se qualquer um falhar, a alternativa está errada. Essa sequência elimina rapidamente as alternativas B, E, A e C, sobrando a D.