A = bagunça, mesmo que você não conheça a notação, dá pra ver que não tem lógica o comando, fora que se as colunas devem ser PK então devem ser NOT NULL
C = comando SOURCE? nunca ouvi falar dessa bruxaria, alternativa eliminada
E = references all parents? isso soa tão ficção científica que parece coisa de python no filme Minority Report
sobrou B vs D, a diferença fundamental é só a palavra CONSTRAINT, mesmo que você não conheça isso, mas estudou teoria de Bancos de Dados, então você já leu que existem restrições que podem ser: PK, unique, NULL e NOT NULL, todas as outras restrições são implementadas com esse aviso de CONSTRAINT e aqui pode ser de todos os tipos possíveis, como FK, ou limitar a lista de valores possíveis, etc
D = desclassificada porque faltou o constraint
B = correta dentro dessa notação que a FCC escolheu, mas há dezenas de formas diferentes de fazer isso se você começar a levar em conta a notação dos diversos SGDB
Nos relacionamentos M:N (muitos para muitos) é necessária a criação de uma tabela de ligação entre as duas tabelas envolvidas no relacionamento. Essa tabela irá servir para “partir” o relacionamento em dois relacionamentos 1:N, permitindo que se implemente o muitos para muitos em uma modelagem relacional.
A tabela de ligação irá possuir as seguintes características:
- Chaves estrangeiras: duas – uma apontando para cada tabela do relacionamento.
- Chave primária: composição das chaves estrangeiras.
Veja, então, que no exemplo da questão iríamos utilizar as seguintes restrições para implementar este tipo de relacionamento entre Contribuinte e Imposto:
CONSTRAINT <nome> FOREIGN KEY (idContribuinte) REFERENCES Contribuinte (idContribuinte)
CONSTRAINT <nome> FOREIGN KEY (idImposto) REFERENCES Imposto (idImposto)
E, por fim, criar a chave primária (que não necessariamente precisa ser nomeada).
PRIMARY KEY (idContribuinte, idImposto)
Observe que a alternativa B está de acordo com os comandos que apresentamos e com o enunciado da questão, sendo assim a nossa resposta. Um detalhe é que é desnecessária a definição de NOT NULL nos atributos idContribuinte e idImposto da tabela de ligação, já que eles compõem a chave primária. Se um atributo faz parte da chave primária, seus valores automaticamente deverão ser únicos e não nulos.
Gabarito: B