1
resposta

Como usar atributos de especialização para condicionar relacionamentos?

Exemplo: Se tivesse um atributo na entidade livro que diferenciasse por tipo, e eu quisesse usar esse tipo para diferenciar relacionamentos. Isso é possível ?

1 resposta

Oi, Isabela! Tudo certo por aí?

Logo de início, peço desculpas pela demora em responder.

É possível sim criar relacionamentos conforme o tipo de atributo de especificação, no entanto, isso pode tornar o banco de dados complexo. Para um melhor entendimento, imagine o caso abaixo:

No Clube do Livro (empresa hipotética em que estamos trabalhando), existem vários livros, bem como distintos tipos (como romance, conto, crônica e poema). Dependendo da variedade de livros existente, seria preciso criar um atributo de especificação para cada um, aumentando de maneira desnecessária o tamanho do nosso banco de dados — imagine, por exemplo, trabalhar com 30 tipos diferentes de livro.

Além disso, teríamos que pensar sobre cada relacionamento que seria adicionado ao respectivo tipo, ampliando mais ainda a complexidade do projeto. Como consequência de uma elevada complexidade, questões como performance, manutenção e compreensão dos dados seriam afetadas.

Por outro lado, existe uma alternativa para esta situação: criar uma nova entidade responsável por categorizar os nossos livros, observe a imagem abaixo que ilustra esta ideia:

Início da transcrição. Recorte de captura de tela de um diagrama conceitual do programa brModelo. A imagem possui fundo branco quadriculado. Ela é composta por três figuras geométricas planas que se relacionam. A primeira figura, localizada no lado esquerdo da imagem, é um retângulo e contém o texto "Livro" na sua região central; desse retângulo partem oito retas com uma bolinha em suas pontas, cujos respectivos textos associados a cada bolinha são: "cod_livro", "cod_editora", "valor", "autor", "titulo",  "ISBN" e "ano_publicacao"; as bolinhas de "cod_livro" e "cod_editora" tem coloração preta; no lado direito desse retângulo há uma representação de cardinalidade um para muitos. A segunda figura, localizada no centro da imagem, é um losango com o texto "Pertence" em seu centro. A terceira figura, localizada na porção direita da tela, é um retângulo com o texto "Categoria" em seu centro; desse retângulo, partem duas retas com bolinhas em suas pontas, cujos textos associados a cada bolinha são, respectivamente "cod_categoria" e "descricao". No lado esquerdo desse retângulo há a representação de uma cardinalidade um para um. Fim da transcrição.

Com a criação da entidade CATEGORIA, podemos adicionar os atributos cod_categoria e descricao, os quais ficarão responsáveis, respectivamente, por determinar o tipo de cada livro (através de um código) e descrever cada categoria existente.

Além disso, vale ressaltar que CATEGORIA se relacionará com a entidade LIVRO, chegando na seguinte cardinalidade:

  • Um livro pode pertencer a somente uma categoria (1:1);
  • Uma categoria pode estar presente em um ou vários livros (1:N).

Com o banco já construído, poderíamos utilizar de forma mais eficiente as informações referentes às categorias dos livros — sendo alguns exemplos a contagem de livros por tipos, variedade de tipos existentes, etc.

Espero ter ajudado, Isa! Se surgir alguma outra dúvida, estou à disposição.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.