[Música] olá bem-vindos ao canal engenharia de software com ênfase o ML Eu sou professor de Denis gues eu já trabalho na área de modelagem há vários anos eu tenho quatro livos publicados sobre o assunto e já ministrei diversas palestras e cursos técnicos sobre modelagem de software com ML na aula de hoje eu pretendo dar continuidade a como mapear ah classes em tabelas relacionais Neste vídeo eu vou eh apresentar como fazer mapeamentos de classes associativas eh associações ternárias e principalmente Vou me concentrar em mapeamento de hierarquias de classes em tabelas relacionais incluindo a apresentação de um
exemplo no final do vídeo Então vamos iniciar o nosso conteúdo eu posso fazer uma pequena propaganda eu já publiquei como eu falei quatro livros sobre o assunto meu primeiro livro foi o m uma abordagem prática que na época tratava do M 1.5 mas já abordava o m2 no final do livro depois eu lancei o MR2 guia de consulta rápida que era exclusivo sobre o MR2 Poucos Anos depois eu transformei esse guia NO2 guia prático e depois eu lancei livro mais completo que foi m2 uma abordagem prática que na terceira Edição bom mas vamos ao conteúdo
Então como mapear classes associativas ou classes intermediárias em tabelas relacionais na verdade é razoavelmente simples ah Lembrando que classes associativas são classes que ocorrem quando existe um relacionamento entre duas classes nas quais Um objeto está associado com outro objeto e esta Associação gera eh possui atributos próprios eh já uma classe intermediária é uma classe que serve de intermédio entre duas outras classes mas que cujos objetos eles precisam imagar de informações mas não existe essa regra de que um objeto deve estar associado com outro objeto e ter atributos próprios relativos essa a essa Associação bom quando
existem classes associativas ou classes Med diárias então em geral se gera uma tabela para essa classe associativa onde os seus ã atributos vão ser mapeados em colunas em seguida se cria uma chave estrangeira para que essa tabela intermediária possa se relacionar com as tabelas que ela está associada ã bom Lembrando que Como já foi visto na aula anterior uma chave primária ela é uma coluna o conjunto de colunas que serve para identificar de forma única uma determinada linha e uma tabela e uma chave estrangeira é composta por uma coluna ou conun de colunas que serve
para procurar ah identificar outra linha diferente da que está sendo consultada no momento serve para buscar informações em outras linhas Possivelmente de outras tabelas Então se compara no normalmente se compara o valor da chave estrangeira com o valor da chave primária em outra tabela bom ah Aqui nós temos o exemplo de mapeamento de classe associativa então nós temos aqui na parte superior desta figura um exemplo de classe associativa para um sistema de Congresso científico onde são aceitas diversas submissões de ativos minicursos ou palestras e cada submissão ela precisa ser avaliada por mínimo no máximo três
avaliadores um avaliador pode avaliar no mínimo uma no máximo muitas submissões como um avaliador avaliando uma submissão precisa atribuir notas a essa avaliação Então se criou uma que tem vários atributos como originalidade qualidade clareza aderência da ao evento etc bom eh ao fazer o mapeamento para o modelo relacional a classe foiada numa tabela de mesmo nome a classe União numa tabela também de mesmo nome só foi necessário ah criar uma coluna paraa chave primária de avaliador e uma coluna paraa chave primária de submissão além de mapear os atributos de cada classe em colunas nas tabelas
mas a classe avaliação foi mapeada em uma tabela que recebeu o mesmo nome de avaliação eh essa tabela todos os seus todos os atributos da classe avaliação não for mapeados em colunas nessa tabela mas essa tabela ela necessita de Chaves estrangeiras para descobrir qual avaliador realizou uma determinada avaliação e a qual submissão aquela avaliação pertence então foi necessário criar dois Campos código avaliador da variação e código da submissão da variação vocês notem que tá escrito à esquerda o texto pfk quer dizer que o conjunto dos dois Campos formam a chave primária da tabela avaliação mas
ao mesmo tempo cada um deles é também uma chave estrangeira então o código Av código avaliador de avaliação vai buscar por um código na tabela avador que seja igual ao valor contido nele no momento que ele contrá ele vai saber de quem é o qual é o avaliador que está avaliando essa avaliação e também para descobrir a qual submissão a avaliação se refere ele vai pegar o código da submissão da avaliação e vai comparar com o código da submissão da tabela submissão E aí quando eles forem iguais ele vai saber qual a submissão aquela variação
se refere Então como vocês podem ver aqui nas associações nos relacionamentos aqui a chave estrangeira FK né for ke ela descobre qual avaliador a avaliação pertence com comparando o código do Aviador da variação com o código do Aviador e também descobre qual submissão a variação pertence comparando o código da submissão da variação com có a submissão certo então aqui nós fizemos o mapeamento desta a classe associativa em tabelas relacionais bom eh quando se trata de associações ternárias Lembrando que uma associação ternária é uma associação que envolve três ou mais classes eu pessoalmente não gosto de
associações ternárias acho que elas são complexas e difíceis de ler procuro evitar mas às vezes elas são inevitáveis Ah no caso de associações ternárias quando foram fazer um mapeamento um modelo relacional a própria Associação ternária se torna uma tabela e ela vai possuir uma chave estrangeira para se relacionar com cada uma das tabelas que ela está associado então Aqui nós temos um exemplo de associação ternária onde eu digo que um professor leciona para muitas turmas uma turma possui muitos professores e um professor lecionando para muitas turmas utiliza uma determinada sala de aula então Eh Professor
foi mapeado na tabela Professor turma foi mapeada na tabela turma e sala de aula foi mapeada na tabela sala de aula e a própria Associação ternária tem uma piada na tabela utiliza vocês notem que existem H três Campos Três colunas o conjunto dessas três colunas eh forma a chave primária dessa tabela e cada uma delas serve de chave estrangeira para descobrir quem é o professor dessa Associação a qual turma a associação se refere e a qual sala de aula aquela Associação específica se refere Ok então esse é o exemplo de mapeamento de Associação ternária bom
Ahã agora com relação a hierarquias de classes uma hierarquia de classes é formada por um conjunto de classes que foram sendo especializadas a partir de uma classe mãe ou classe geral uma hierarquia de classes pode ter várias camadas E no caso de mapear essa hierarquia isso pode ser um pouco mais complexo dependendo da situação basicamente existem três estratégias possíveis para fazer esse mapeamento a primeira estratégia Toda A Hierarquia de classes ela é mapeada em uma tabela única que vai precisar incluir uma coluna para identificar o tipo do objeto que está sendo representado em cada linha
Quais são as as desvantagens da Estratégia Ah não existe normalização e e podem ocorrer que hajam muitos Campos nulos em muitas linhas da tabela a vantagem o número de consultas no banco de dados se torna bem menor bom Ahã Então se se tratar de uma hierarquia com uma hierarquia de classe com muitas com muitas camadas de repente essa estratégia pode ser útil Aqui nós temos o exemplo de aplicação de do mapeamento da hierarquia de classes o utilizando a primeira estratégia então aqui nós novamente nós temos um trecho do Sistema de Controle De submissões Onde Eu
tenho uma classe submissão que é uma classe abstrata Eu sei que era abstrata porque ela está escrita em Itálico e ela foi especializada nas classes artigo minicurso e palestra então cada um des cada uma dessas classes possui seus próprios atributos bom aplicando a primeira estratégia Toda A Hierarquia foi mapeada em uma tabela só chamada submissão foi necessário criar uma um uma coluna para chave para servir de chave primária que foi chamada de códo de submissão o texto PC lado significa queela chave primária PC é batura de Primar e cada um dos atributos de cada uma
das classes foi mapeado em uma coluna na tabela então ficou uma tabela bastante grande e quando se tratar de um tipo de submissão do tipo artigo ou palestra muitos Campos vão ser deixados em branco como justificativa objetivo duração público alvo etc bom mas essa é a primeira estratégia com relação à segunda estratégia na segunda estratégia cada classe concreta é mapeada uma tabela as classes eh abstratas não são mas nesse caso os atributos das classes abstratas devem estar contidas nas classes nas tabelas mapeadas a partir das classes concretas ã então Aqui nós temos a mesma hierarquia
de classe e foi aplicada a segunda estratégia então cada classe concreta foi mapeada em uma tabela Ou seja a classe artigo foi mapeada na tabela artigo a classe minicurso foi mapeada na tabela minicurso e a classe palestra foi cada na tabela palestra Lembrando que eh tabelas na uml elas são representadas por meio de classe com o estereótipo table o estereótipo table é um estereótipo que modifica a a função padrão da classe e ele ela passa a se comportar como uma tabela então a divisão de atributos passa a ser a divisão de colunas e a divisão
de operações passa a conter as chaves primárias estrangeiras e outras informações bom então nessa abordagem utilizando a segunda estratégia ah a classe artigo Foi mapeada numa tabela artigo mas os atributos da classe geral que ela da qual ela é uma especialização da classe submissão que ela é uma especialização também foram mapeadas na tabela artigo então a tabela artigo além da sua chave primária código do artigo vai ter título do artigo e situação do artigo além dos do do das colunas relacionadas aos atributos da classe artigo resumo abstract e arquivo o mesmo ocorre com minicurso e
o mesmo ocó com palestra todas as tabelas possuem H colunas para armazenar o título o título da submissão e a situação da submissão isso pode levar a uma certa redundância de informação mas essa é a segunda estratégia na terceira estratégia se cria uma tabela para cada classe de hierarquia Independente se ela é eh abstrata ou concreta a vantagem dessa estratégia é que tenta se manter a normalização dos dados e a estrutura final das tabelas fica muito semelhante à hierarquia O problema é que eh o número de consultas no banco de dados se torna maior uma
vez que as tabelas eh têm que se relacionar por meio de Chaves est Ah então Aqui nós temos um exemplo de aplicação da terceira estratégia aqui a mesma hierarquia de classes então a classe submissão Foi mapeada numa tabela submissão a classe artigo Foi mapeada numa tabela artigo a classe minicurso Foi mapeada numa tabela minicurso e a classe palestra foi mapeada na tabela palestra a submissão contém um campo para servir chave primária e os seus atributos foram mapeados em colunas na tabela mas foi necessário criar também uma nova coluna que identifica o tipo da submissão para
se saber se h a submissão se refere a um artigo um minicurso e uma palestra em cada tabela cada uma das tabelas artigo minicurso e palestra foi necessário criar uma chave estrangeira no caso de artigo foi código da submissão código da submissão do artigo artigo no minicurso código da submissão do curso e na palestra o código da submissão da palestra então no momento que eu quiser recuperar as informações referentes à submissão a qual o artigo se refere eu tenho que pegar a chave estrangeira código código da submissão do artigo e comparar com o campo código
da submissão da tabela submissão até encontrar um cujo valor seja igual a da tabela artigo aí eu vou encontrar a submissão daquele artigo e vou recuperar o título e a situação dele ah então vocês podem notar que uma submissão ela está associada a nenhum ou um artigo ou a nenhum ou um minicurso ou a nenhuma ou uma palestra certo então aqui foi aplicando a terceira a terceira estratégia Ah se mantém a normalização da melhor Man maneira possível A Hierarquia de tabelas é semelhante à hierarquia de classes a estrutura das tabelas semelhante à hierarquia de classes
mas o número de consultas pode ser eh maior nessa abordagem ã como falei adotar estratégia pode implicar uma maior quantidade de consultas para que toda a informação seja eh recuperada Então se o número de camadas na aqui for grande o número de consultas vai ser bem grande também eh a primeira estratégia embora ela não respeite a normalização ela diminui o número de consultas então o tempo de acesso à informações é mais rápido h o mesmo pode ocorrer com relação à segunda estratégia embora haja redundância de dados então cada estratégia tem seus méritos vantagens e desvantagens
então cada cenário precisa ser avaliado para estabelecer qual estratégia seguir então como eu falei se hierarquia de classes tiver muitos níveis muitas camadas a terceira estratégia pode não ser a mais adequada devido à quantidade de consultas que se fará necessário bom Aqui nós temos um exemplo de mapeamento do modelo conceitual do Sistema de Controle bancário em tabelas relacionais esse sistema esse modelo conceitual já foi apresentado em outros vídeos basicamente ele contém a classe pessoa que é uma classe abstrata que foi especializada nas classes pessoa física e pessoa jurídica eh e a ele contém a classe
conta comum que foi especializada nas classes contas especial e contra poupança e possui a classe movimento que se relaciona com a classe conta comum ou conta especial ou conta poupança por quê Porque como conta especial e conta poupança são especializações de conta comum elas herdam também todas as associações então uma conta ela registra no mínimo um no máximo muitos movimentos Além disso uma conta comum ela é possuída por no mínimo uma no máximo muitas pessoas no caso com pessoa é uma classe abstrata ela vai ser possuída ou por uma pessoa física ou por uma pessoa
jurídica então uma conta comum ela é possuída por no mínimo uma no máximo muitas pessoas e uma pessoa pode possuir no mínimo uma no máximo muitas contas comums bom agora Como nós mapeamos essa esse modelo em tabelas relacionais aqui nós temos uma figura contendo o mapeamento essa figura ficou um pouco grande na verdade no vídeo anterior nós já explicamos parte dela ah por exemplo quando nós nós exemplificamos uma associação um para muitos então nós identificamos o mapeamento das classes movimento e da classe Conta isso já se encontra no outro vídeo e também com relação a
ao mapeamento de uma associação muitos para muitos em tabelas relacionais onde nós identificamos a classe conta classe pessoa conta e a classe pessoa isso já foi explicado no outro vídeo Então nós vamos nos concentrar somente no mapeamento as duas hierarquias de classes que estão contidas neste modelo então com relação à hierarquia de classe da pessoa pessoa das classes pessoa pessoa física e pessoa jurídica H nós adotamos a terceira estratégia uma vez que a hierarquia era pequena tinha poucos níveis então a classe pessoa foi mapeada numa tabela uma vez que na hierarquia na na terceira estratégia
toda a classe Independente de ser trata ou concreta é mapeado em tabela então se mapeou a faz pessoa na tabela pessoa se criou um campo para Serv de chave primária e se mapeou as classes pessoa física e pessoa jurídica nas tabelas pessoa física e pessoa jurídica e se criou um campo Aliás não foi necessário criar um campo específico para isso porque ao mapear os atributos CPF e CNPJ das classes pessoa física e pessoa jurídica em colunas H foi possível utilizar esses dois Campos como Chaves primárias de cada uma das tabelas mas se criou uma chave
estrangeira foi necessário criar uma chave estrangeira para identificar as informações gerais de cada pessoa então Eh se criou o campo código de pessoa física na tabela pessoa física e o campo código pessoa jurídica na tabela pessoa jurídica então Eh no momento que eu quero buscar as informações eh Gerais da pessoa física eu tenho que pegar a chave estrangeira cód pessoa física e buscar uma linha na tabela pessoa cujo valor seja igual cujo valor no campo código de pessoa seja igual ao valor contido no campo código de pessoa física no momento que encontrá eu descubro a
que pessoa a a linha na pessoa física se refere o mesmo vale para pessoa jurídica então vocês vão notar que H uma pessoa ela está relacionada a nenhuma ou uma pessoa física ou a nenhuma ou uma pessoa jurídica então é necessário comparar o a chave estrangeira código pessoa física de pessoa física com a chave primária de pessoa que é o código pessoa o mesmo vale para a pessoa jurídica é necessário comparar a chave estrangeira código pessoa jurídica com a chave primária da tabela pessoa código pessoa assim eu descubro as informações gerais de pessoa jurídica ou
pessoa física dependendo da situação Ah o Outro exemplo é o mapeamento da hierarquia de classes de das classes conta comum conta especial e conta poupança Então se criou uma tabela chamada conta que possui todos os atributos eh da classe conta comum mapeados em colunas obviamente além do de um atributo chamado ah desculpem do uma coluna chamada tipo de conta que serve para determinar se a conta em questão é uma conta comum uma conta especial ou uma conta poupança ã e se criou ã duas Chaves estrangeiras e onde estão essas chaves estrangeiras na verdade elas são
a própria chave a chave primária Aqui tá escrito que número da conta é uma chave primária uma PK uma p Key né primary Key é uma chave primária mas também é uma chave estrangeira ela é uma chave estrangeira para as tabelas conta especial e conta poupança Ah que foram mapeadas a partir das classes do mesmo nome então no momento que o tipo de conta não for uma conta comum eu vou buscar as informações complementares da conta especial ou da conta poupança em questão então para isso eu vou pegar o número da conta da tabela conta
e vou comparar com o número da conta eh do com Campo número da conta especial da tabela conta especial se se tratar de uma conta especial Ah e no momento que encontrar uma linha nessa tabela cujo Campo eh número da conta especial for igual ao número da conta eu descubro as informações específicas daquele tipo de conta o mesmo vale para conta poupança então Aqui nós temos os dois exemplos de como nós mapeamos as hierarquias de classes do modelo conceitual do Sistema de Controle bancário e é isso nós terminamos essa aula eu espero que vocês tenham
achado esse conteúdo útil se vocês gostaram eu peço que vocês curtam e compartilh esse vídeo eu agradeço a atenção e nós os na próxima aula Obrigado por terem assistido