Questão nº 54
Questão de Tecnologia da Informação · FGV TJ-SE Servidor 2023 (nº 54)
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; (alternativa correta) - 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;
Resposta comentada
Gabarito Alternativa D
Uma tabela associativa (ou tabela de junção) é usada para conectar duas outras tabelas que têm um relacionamento de muitos para muitos, contendo as chaves primárias de ambas as tabelas originais como chaves estrangeiras, que juntas formam a chave primária composta da tabela associativa.
- (A) Incorreta: O script está sintaticamente incorreto, pois as colunas
idlivroeidautorsão usadas naPRIMARY KEYeFOREIGN KEYmas não são declaradas como colunas da tabela. - (B) Incorreta: Usa
CREATE TABLESPACEem vez deCREATE TABLE, que é para definir um local de armazenamento e não uma tabela. Além disso, as colunasidlivroeidautornão são declaradas. - (C) Incorreta: A armadilha aqui é a inclusão de um
Idlivroautor INT NOT NULL AUTO_INCREMENTcomo chave primária. Embora tabelas associativas possam ter chaves primárias substitutas (surrogate keys), a prática mais comum e conceitualmente correta para representar uma relação N:N é usar a chave primária composta formada pelas chaves estrangeiras (idlivro,idautor). Mais importante, este script também falha em declarar as colunasidlivroeidautor, tornando-o sintaticamente inválido. - (D) Correta: Este script declara corretamente as colunas
idlivroeidautorcomoINT NOT NULL, a colunaanocomoDATETIME NOT NULL, define a chave primária composta(idlivro, idautor)(que é o padrão para tabelas associativas) e estabelece as chaves estrangeiras para as tabelaslivroeautor, tudo conforme a sintaxe do MySQL para criar uma tabela associativa. - (E) Incorreta: Usa
CREATE TABLESPACEem vez deCREATE TABLE, o que está incorreto para criar uma tabela.
Fonte: FGV TJ-SE Servidor 2023 Técnico Judiciário - Programação de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.