[Música] Olá eu sou a Sara eu estou acompanhando vocês na disciplina de bancos de dados oferecida na universidade virtual do Estado de São Paulo do curso de engenharia da computação hoje nós vamos trabalhar com mais alguns conceitos relacionados ao mapeamento entidade relacionamento para o modelo relacional nós vamos trabalhar hoje com relacionamentos nários e as especializações e agregações bom então quando nós vamos pensar em um um relacionamento ene ário nós vamos precisar ter um um cuidado especial em relação às cardinalidades na hora de fazer o mapeamento para o modelo relacional Então como faremos isso para cada
tipo relacionamento nário sendo que nós estamos considerando n maior que 2 porque n = 2 são os relacionamentos binários que nós já trabalhamos ã crie uma nova relação s para representar o relacionamento inclua como Chaves estrangeiras em S as chaves primárias das relações que representam os tipos entidades que estão participando deste relacionamento inclua os atributos como a gente já trabalhou e a chave primária de S nós vamos estabelecer como chave primária desta relação nova que foi criada a combinação de todas as chaves estrangeiras em S usualmente se nós tivermos alguma entidade participando com cardinalidade um
neste relacionamento ená Então esta entidade embora a chave primária dela seja colocada na nova relação como chave estrangeira esta chave estrangeira não vai entrar na chave primária da nova relação Então vamos ver um exemplo aqui nós temos o relacionamento ená de três participação de três entidades chamado fornece então nós temos um fornecedor que fornece várias peças para vários projetos os projetos podem receber várias peças também de vários fornecedores e as peças podem ser fornecidas para vários projetos por vários fornecedores Então nesse caso nós temos um relacionamento onde as cardinalidades são todas do tipo vários e
nós temos uma liberdade de relacionar as entidades individuais de cada uma das entidades então para este caso como nós fazemos o mapeamento nós Assumimos então que as entidades já foram mapeadas seguindo as regras de mapeamento de entidades elas estão aqui fornecedor projet e peça e nós temos aqui agora a nossa nova relação que vai representar o relacionamento fornece nessa nova relação eu tenho a chave primária de fornecedor a chave primária de projeto a chave primária de peça colocadas aqui como Chaves estrangeiras e nós temos também o atributo quantidade que é o atributo do relacionamento percebam
que aqui Nós criamos como chave primária da ação fornece a combinação das três chaves estrangeiras vamos ver então como fica eh este mapeamento Considerando o cadastro de dados então Aqui nós temos a representação das três tabelas que são as relações fornecedor projeto e peça e para cada uma delas nós cadastramos três tuplas hipotéticas a fornecedor um fornecedor dois e o TRS o projeto de número 10 20 30 e a peça 111 222 333 Então são Dados hipotéticos aqui na nossa tabela que representa a relação fornece nós temos as cadastrado os relacionamentos entre as entidades individuais
então eu tenho por exemplo Ah o fornecedor um fornece a para o projeto 10 a peça 111 ele também tem um fornece para este mesmo projeto aab a peça 222 222 e uma outra situação que nós temos que chamar atenção aqui é o a peça 111 além de ser fornecida para o projeto 10 pelo fornecedor um ela também é fornecida para esse mesmo projeto 10 pelo fornecedor 2 então percebam que nós podemos fazer uma o relacionamento entre eh projeto fornecedor e peças com uma certa liberdade agora nós temos uma situação um pouquinho diferente nós temos
aqui o fornecedor a eh participando com essa cardinalidade um o que significa isso como nós interpretamos isso então um fornecedor ele pode fornecer várias peças para vários projetos até aí não há tanta novidade a agora cada projeto peça precisa necessariamente ser fornecido por um fornecedor então este esta nova interpretação vai exigir que nós trabalhemos com as chaves primárias de uma forma um pouquinho diferente então agora o nosso mapeamento ele continua criando a relação fornece todas as chaves estrangeiras estão aqui o atributo quantidade também está mas a minha chave primária é apenas composta pelas entidades pelas
Chaves primárias das entidades projeto e peça vamos verificar qual o efeito que isso eh eh impõe aos dados cadastrados nós temos aqui então os mesmos dados hipotéticos certo mas como nós estamos estabelecendo como chave primária o número do projeto e o número da peça nós não podemos agora neste caso ter o mesmo projeto recebendo uma mesma peça por fornecedores diferentes então isso significa que eu preciso ter uma restrição que impede de repetir o número do projeto com o número da peça então nós temos aqui projeto 10 com a peça 111 ela está sendo fornecida pelo
fornecedor um mas como nós estabelecemos como chave primária esta combinação não pode repetir essa combinação então a peça o projeto 10 com a peça 111 não aparece mais na relação de forma que a gente dessa maneira impede que essa mesma peça com esse mesmo projeto seja cadastrado com um fornecedor diferente do fornecedor um então a gente consegue através das chaves primárias estabelecer uma restrição de cardinalidade que o sgbd vai cuidar para nós então este é um exemplo muito interessante ante de como nós temos elementos no modelo relacional que precisam ser muito bem estudados muito bem
trabalhados para que o sgbd tenha condições de garantir as restrições que nós eh especificamos lá no modelo conceitual porque nós levantamos essas restrições lá na coleta de requisitos de dados que foi feito no início do processo de desenvolvimento de toda essa estrutura computacional para implementação desse sistema na empresa bom agora nós vamos trabalhar com o mapeamento dos das especializações generalizações então para nós eh conseguirmos fazer trabalhar com especializações generalizações no modelo relacional nós precisamos transformar aquela estrutura hierárquica que nós já vamos relembrar como ela é eh nós precisamos transformá-las em relações em tabelas para isso
nós vamos ter que converter as nossas subclasses em tabelas e a nossa superclasse em tabelas E lembrando que nós temos atributos nas nossas subclasses atributos na superclasse e temos a chave estabelecida lá para superclasse então esses elementos todos vão precisar aparecer de alguma maneira no modelo relacional e nós temos quatro opções para fazer isso cada uma dessas opções elas são adequadas elas são mais bem adequadas para uma situação ou para outra então nós temos quatro possibilidades nós vamos ver cada uma delas A primeira é criar múltiplas relações superclasse E subclasses então neste nesta estratégia nós
vamos criar uma relação L para representar a superclasse e nesta relação vamos incluir todos os atributos desta super classe seguindo as regras de trabalhar com atributos que nós já vimos e vamos estabelecer como chave primária desta relação a chave da superclasse depois vamos criar uma relação li para cada subclasse si então se eu tiver três subclasses eu vou criar três relações li L1 L2 L3 tá Ah e eu vou colocar como atributos dessas relações o atributo da subclasse que diz respeito à relação criada unido com a chave da superclasse tá essa opção funciona em qualquer
tipo de especialização Total parcial com restrição de disjunção E sobreposição então vamos ver um exemplo aqui nós temos a especialização Que Nós criamos no modelo conceitual de funcionário especializado em secretário técnico e Engenheiro é uma especialização de disjunção que significa que se um Funcionário é secretário ele não pode ser colocado como técnico ou como Engenheiro e é uma uma especialização de participação parcial significa o quê quando é participação parcial nós temos uma linha simples aqui entre a entidade e a especialização eh esta esta participação parcial diz que alguns funcionários eles não serão eh especializados em
nenhum uma dessas três especializações alguns serão para uma delas e alguns não serão Aqui nós temos então o mapeamento pro modelo relacional A Entidade funcionário que é a superclasse está estabelecida aqui com os atributos e com a chave primária e eu criei para cada uma das subclasses uma relação diferente a secretária e vem com o nível técnico vem vem com o grau Engenheiro vem com tipo e os três erdam a chave primária da superclasse e esta chave herdada é a chave primária de cada uma dessas relações Aqui nós temos uma modelagem alternativa ela significa a
mesma coisa que nós já discutimos no exemplo anterior Mas é uma alternativa para deixar o modelo conceitual um pouquinho mais claro então foi incluída aqui um um atributo F tipo e esse atributo ele especifica se ele tiver um valor então ele vai ter que especificar para qual subclasse uma determinada entidade individual de funcionário vai ser mapeada vai ser colocada se nós tivermos esse F tipo esse atributo novo no conceitual ele vai entrar aqui como um atributo da minha relação que representa a superclasse bom agora nós vamos para a segunda estratégia na segunda estratégia nós vamos
criar é relações apenas para as subclasses a superclasse ela estará representada no modelo mas não ganhará uma relação apenas para ela tá então vamos criar uma relação para cada subclasse com todos os atributos dela da subclasse unido com os atributos da superclasse esta opção ela vai funcionar apenas para especializações de participação total e ela é recomendada para especializações com restrição de disjunção tá se a especialização é de restrição de sobreposição a mesma entidade individual pode aparecer várias vezes na relação Nós já vamos ver o porquê então Aqui nós temos uma um exemplo de especialização com
participação Total ou seja o veículo ele necessariamente precisa ser ou um carro ou um caminhão eu não posso ter um veículo que não se especializa para carro ou caminhão neste modelo e é uma restrição de disjunção que significa que ou o veículo é um carro ou o veículo é um caminhão como vai ficar então o nosso mapeamento nós vamos criar apenas relações para as subclasses então criamos uma relação para carro e uma relação para para caminhão os atributos específicos de carro estão aqui esses dois últimos atributos os atributos específicos de caminhão também estão aqui esses
dois últimos atributos Mas como eu comentei Eu preciso representar a superclasse nesse modelo relacional então como eu optei por criar apenas relações para as subclasses os atributos da superclasse estarão inseridos em cada uma das subclasses e a chave primária permanece a chave primária já definida para aquela superclasse tá bom qual é o problema que nós teríamos a se nós tivéssemos uma uma restrição de sobreposição nesse modelo se nós tivéssemos a sobreposição um carro o veículo desculpe um veículo poderia ser tanto um carro quanto um caminhão e aí eu teria que cadastrar duas vezes as informações
referentes a superclasse nas duas vezes que eu cadastro aquele veículo tanto como carro como caminhão e nós não podemos ter neste caso como nós comentamos uma participação parcial da superclasse precisamos usar essa modelagem apenas na participação total por quê Porque nós não temos aqui uma relação apenas para veículo se esse veículo não é um carro ou não é um caminhão como eu não tenho uma relação para ele eu não consigo cadastrá-lo por isso esse tipo de mapeamento só é usado para a participação Total bom Aqui nós temos uma relação a abordagem de mapeamento de relação
única com um único atributo tipo como funciona Nós criamos uma única relação para representar todo o todo o o o a especialização tanto subclasses quanto superclasse e e esta relação Ela conta com os atributos da superclasse unido com os atributos da subclasse um subclasse 2 subclasse m e além desses atributos de todas as subclasses eu ainda preciso colocar o atributo t que é o meu atributo tipo e a chave primária permanece a chave que já era definida para a superclasse esse atributo T é um atributo que vai discriminar a qual subclasse uma determinada entidade individual
pertence então Aqui nós temos uma opção que funciona para especializações de subclasses disjuntas e ela tem uma desvantagem que ela pode criar situações em que eu preciso usar muitos valores nulos na minha tabela então nós temos aqui eh a nossa especialização funcionário e os tipos de funcionário e nós vamos criar uma única relação com todos os atributos da superclasse mais o atributo tipo mais o atributo da subclasse 1 o atributo da subclasse 2 o atributo da subclasse 3 com isso o que pode acontecer eu vou cadastrar um funcioná vou dizer de qual tipo ele é
vou colocar o valor do atributo que diz respeito ao tipo que ele é e os outros atributos receberão valor nulo porque se eu cadastrar um secretário eu vou cadastrar o nível dele mas ele não tem grau e nem tipo grau é de técnico tipo é de engenheiro então por isso eu tenho que colocar o valor nulo porque não se aplica ao funcionário do tipo secretário bom agora nós temos a nossa última estratégia que também é uma relação única mas agora eu vou usar vários atributos tipo crio uma relação única com todos os atributos da superclasse
todos os atributos de cada uma das subclasses e uma um conjuntinho de atributos tipo sendo que eu vou cadastrar um tipo para subclasse um um tipo para sub classe dois um tipo para subclasse m esses tipos eles vão indicar eles são atributos booleanos e vão indicar se uma determinada entidade ou o o dado que está sendo cadastrado ali ele é uma subclasse ele participa também de uma subclasse ou não participa daquela subclasse se ele participa o atributo tipo daquela subclasse recebe um se ele não participa o atributo recebe zero nós vamos conseguir usar essa eh
opção quando nós precisamos trabalhar com sobreposição então Aqui nós temos a especialização peça é uma especialização de sobreposição Ou seja a peça pode ser tanto manufaturada quanto comprada e Aqui nós temos o resultado de uma amamento peça com todos os atributos e descritivos dela identificador e descrição e depois nós temos um Flag que é o nosso atributo T nosso atributo tipo para a subclasse manufaturada e temos um Flag para subclasse comprada também temos aqui os atributos referentes à subclasse de peça manufaturada e os atributos da sub classe referente a peças compradas Quando vamos trabalhar com
a inserção de dados se a minha peça é comprada esse Flag precisa estar valorado com um e eu preciso dos valores dos atributos desta subclasse se a minha peça é manufaturada este fag também está valorado com um e eu preciso dos valores dos atributos dessa subclasse como é sobreposição nós também podemos ter as peças que são tanto manufaturadas quanto compradas E aí os nossos dois flags estarão eh valorados com o valor um bom por fim nós precisamos de uma maneira de mapear as agregações as agregações elas vão ser mapeadas seguindo as mesmas regras que nós
já seguimos em toda essa discussão desde lá do tipo entidade até aqui nos relacionamentos eh O que é preciso considerar aqui é como a agregação possui dentro dela um relacionamento entre entidades Então eu preciso mapear o que está internamente a ela como toda esta esta abstração está relacionada a alguma outra entidade eu vou precisar criar uma relação para representar este relacionamento daquela abstração com a outra entidade e vou precisar escolher a adequadamente os atributos para usar como chave primária e isso é bastante dependente da semântica que nós temos representada na agregação Então nós vamos trabalhar
isso um pouco mais detalhadamente com exercícios no decorrer do nosso curso com isso nós finalizamos a nossa aula de mapeamento eh de relacionamentos sários especializações e agregações e finalizamos também essa parte de mapeamento do modelo entidade de relacionamento para o modelo relacional Eu sugiro que vocês agora e exercitem todos esses conceitos para que nós possamos seguir na disciplina com bastante tranquilidade [Música] [Música] C [Música]