Uma aula que é uma espécie de integração entre duas outras aulas que a gente fez na semanas anteriores e que integração É essa a gente vai falar agora então vamos lá vamos lembrar o que que nós fizemos bom eu passei esse exercício para vocês para vocês fazerem que é um exercício que eu mostrei o modelo entidade de relacionamento falei Eu quero um modelo relacional tá você é outro modelo falei ah me faz um modelo relacional E aí qual é a pergunta que surge para vocês quando eu peço isso para vocês que que vocês se perguntam
Não não é essa pergunta o que que eu tô fazendo aqui na sexta-feira à noite olhando não é essa essa daí vocês guardam para vocês mas tem uma que é importante qual é não tem um método padrão de fazer isso Quer dizer eu tenho que fazer isso artesanalmente olhar e a resposta é tem e esse é o assunto da aula de hoje a profissão mas você tem um método porque raios você fez a gente fazer isso no braço é justamente para fazer com que vocês comecem a se perguntar questões que a gente vai trazer aqui
na aula que são questões que quem faz isso aí vem tratando ao longo dos anos então eu vou sempre relembrar esse mapa Para vocês terem sempre um saber onde é que a gente tá existem as três camadas modelo conceitual modelo lógico modelo físico a gente começou a estudar o modelo conceitual que é a visão do usuário então é aquele modelo que não tem compromisso com a implementação ele tá representando o discurso do usuário E aí a gente viu a entidade relacionamento e viu orientada a objetos tá aí Nas duas últimas aulas a gente falou de
modelo Lógico não é que já tem uma preocupação com a como isso vai ser representado Mas ainda é independente de plataforma a gente viu que ele pode ser hierárquico ele pode ser um gráfico ele pode ser uma tabela e por último a gente viu que o modelo relacional foi a aula passada a gente falou ah modelo relacional é um modelo não é que se baseou na ideia da tabela e que tem a ideia de Você pode relacionar usando conceitos como chave primária chave estrangeira e assim por diante Tá certo o desafio da aula de hoje
que é o que eu passei como exercício para vocês é como é que a gente sai do modelo conceitual e a gente transforma isso no modelo lógico existe uma técnica para fazer isso certo uma coisa muito importante que a gente vai discutir hoje é que essa técnica de mapeamento é um conjunto de diretrizes Que são vamos chamar assim as práticas recomendadas quando vocês mapeiam vai ter ocasiões em que você vai fazer coisas diferentes das diretrizes por várias razões e a gente vai poder discutir isso aqui então isso aqui não tá gravado na pedra tá mas
se você não segue as diretrizes você tem que saber o que você tá fazendo Tá você não tem que fazer Ah eu fiz diferente porque eu não sei usar aí você vai fazer um trabalho ruim tá Tudo bem bom este mapeamento entre o conceitual o lógico e o físico ele é mais comum do que vocês pensam isso é uma coisa que acontece constantemente por exemplo você pode ter feito o seu modelo conceitual em cidade relacionamento e você quer usar um bom te dados relacional Então você vai ter que mapear O modelo para o modelo lógico
relacional certo ou outra coisa que é muito comum é a Andréa mas eu uso uma linguagem orientada a objetos isso é muito comum tá Inclusive tem uma aula que eu tenho gravada para quem quiser mas que eu não vou mostrar para vocês aqui porque senão a gente estende o curso de mais mas é uma aula que mostra que a frameworks que mapeia o Automaticamente o seu modelo de objetos para um modelo relacional né Por quê Porque hoje em dia a programação ela é muito orientada a objetos e aí é natural que as pessoas façam A
modelagem na forma de objetos tá e que não só que elas querem gravar isso num banco de dados relacional Aí tem que fazer esse mapeamento tá você pode mapear objetos para documentos que é o modelo hierárquico Esse é um formato que é muito popular Nos últimos tempos principalmente com a popularização de um formato como Jason que foi inspirado na forma de representar objetos em Java ou em Java Script então isso fez com que o banco de dados de documentos se tornasse uma opção muito grande para você por exemplo converter objetos mas o XML que é
um outro formato era também é usado para isso pode-se usar essa opção Você pode ter um banco de dados Orientado a objetos Você pode ter esse banco de objetos e existe mapeamento objeto objeto existe Qual o sentido que faz o sentido que faz é que quando você tá fazendo um modelo conceitual Às vezes você toma algumas liberdades que elas fazem sentido na Esfera conceitual mas na hora de gravar no seu discos na hora de pensar no modelo Lógico você vai querer modificar isso então você pode fazer esse mapeamento do modelo conceitual para o Modelo lógico
orientado a objetos tá você pode ter um modelo orientado de relacionamento e mapear para um banco de dados orientando objetos enfim a gente pode combinar tudo com tudo tá Quais são os dois mapeamentos que vão ser o enfoque desta disciplina entidade em relacionamento para relacional e objeto para relacionar são os enfoques Oi se eu tiver um banco de dados orientado objeto lá lógico Ah o menino lógico não então a gente fez o conceitual em ml a pergunta se Lógico que seria um ml é isso a gente aprendeu a fazer o conceitual em objetos usando o
ML tá bom E aí hoje a gente vai aprender a mapear o ML para relacionar Tá bom para aprender a fazer mapeamento você vai pensar o seu modelo em partes dele tá nas partes do modelo e você vai pensar como é que você mapeia cada parte do seu modelo a essa parte aqui qual seria a regra Então a primeira parte que a gente naturalmente pensa é como é que eu matei uma entidade regular Você tem uma Entidade e você quer mapear certo por exemplo como é que vocês acham que uma Penha essa entidade no modelo
relacional vocês fizeram aí um exercício também tá sabendo como é que vocês acham perfeito livro vai virar uma tabela ou uma relação se vocês quiserem usar uma tabela os atributos vão virar atributos do modelo na tabela e sbn vai ser a chave primária é isso Então entidade é o caso mais simples A Entidade regular é traduzida numa relação numa tabela atributos da entidades são traduzidos em atributos da relação que são as colunas e os atributos identificadores porque no modelo entidade de relacionamento a gente chama de atributos identificador são convertidos na chave primária e é isso
Esse foi fácil todo mundo fez desse jeito ó lá aqui tá O modelo entidade de relacionamento aqui embaixo tá o modelo relacional olha toda vez que eu pedi para vocês fazerem o modelo relacional eu quero que vocês façam assim ó tá vendo essa linhazinha não precisa desenhar a tabela nem nada você vai fazer o esquema dela assim como eu fiz aqui tá o quê [Música] não é comum botar porque como ela é identificador é mais comum que ela Esteja ali na frente mas não é obrigatório não tem nenhuma regra sublinhado e como é que eu
mapearia agora eu vou dar um bug na cabeça de vocês vocês estão achando que é fácil que eu vou falar mas não é não como é que uma piaia uma classe para o modelo relacional Oi a mesma coisa é uma tabela é isso É a mesma coisa então que uma entidade é a gente teria que talvez mapear o tipo deixar explícito tipo tá certo então é a mesma coisa no sentido do seguinte a classe vai estar traduzida na relação Ok os atributos vão ser traduzidos na tribos da relação ok a gente só tem um problema
que é a chave primária em o ML não existe o conceito de chave primária Alguém sabe me dizer porque eu Falei isso quando eu falei de modelagem conceitual de objetos Por que que não tem chave primária em ml Oi não é isso [Música] porque pode ser no Losango não é isso Você pode ter dois objetos com menos atributos Mas por que eu posso ter dois objetos com o mesmo atributo vejam E isso é muito importante e isso tem impactos muito grandes Toda vez que você implementa o sistema oriental do objeto muito grandes na orientação objetos
existe o conceito de identidade que não há nenhuma entidade de relacionamento antes da de relacionamento a identidade É sempre definida pelo atributo identificador que é a chave primário ponto no ML não não ml a identidade ela é definida da seguinte maneira cada Objeto tem uma identidade mas essa identidade ela não é explícita para mim eu sei que tem o sistema controla internamente essa identidade nunca tem acesso a ela quer dizer eu tenho se eu quiser quem tiver aula comigo de orientação objeto eu tenho uma brincadeira que eu peço para o Java mostrar lá a identidade
já é internamente gera as identidades dos objetos mas é um número estrobólico lá que ele Usa para identificar unicamente aquele objeto e acabou certo então na orientação objeto A ideia é que quem define a individualidade ou a intensidade do objeto é a linguagem ou é a própria linguagem que tá operando com aquilo ou se fosse um banco de dado orientando objetos seria o banco de dados que opera isso quando eu mapeio para o relacional não existe esse conceito no relacional não tem então eu que faço mapeamento tenho que decidir Certo eu posso pegar e dizer
assim não eu não tenho identidade mas eu sei que o isbn é único e eu vou usar ele como chave primária então no ato de mapeamento Eu transformo a identidade na chave que vai ser o isbn ponto Oi aí o código interno aí tem a segunda opção que é muito importante aqui na segunda opção eu vou criar um atributo e isso é muito comum em vários vários esquemas as pessoas fazem mas não É obrigatório eu vou criar um atributo em que eu vou gerar Esse identificador único pode ser um atributo agir então tem sistemas é
que sempre cria um ID Esse é dia sempre a chave primária e é sempre um número estrobólico daquele gerado pelo sistema Ponto Certo coisa muito importante o número que está na memória da sua máquina nunca é igual ao número que vai para o banco de dados ele já era um novo número Tá Por que isso porque o número que está gerado na memória da sua máquina Ele é dinâmico e ele é regenerado cada vez que o objeto é criado eu não tenho como você tá se eu pegasse esse número e gravasse no banco de dados
depois eu não ia conseguir restaurar isso para memória Então o que acontece é o seguinte nós vai reconhecer e toda vez que do banco de dados Eu leio para memória a memória já era um novo número a chave no ML Não é na classe A classe não vai mexer ou seja eu não tenho conceito de chave primária aqui não tem a chave Mara nasce na hora que eu mapeia para um relacional aí no relacional tem a chave primária aqui não tem entendeu não tem mas aí a escolha de quem faz um mapeamento eu posso escolher
não querer gerar uma identidade única para os objetos que é um modelo porque isso não Causa muito com a ideia de modelo racional mas você não queria você tá discutindo a chave primária Porque como você tá fazendo mapeamento você precisa definir quem é a chave primária e aí tem duas estratégias para você definir quem é a chave primária a gente tá fazendo Quais são as diretrizes na hora que você mapeia Essas são a Diretriz As duas são possíveis a organização determina Qual é a Política que ela quer adotar as duas são adotadas em vários nichos
tá Oi não é o que eu chamei atenção é quando eu uso a estratégia dois é um número mas não é igual ao que o sistema automaticamente ele só emula o processo mas esse número que tá no banco é diferente do número que tá na memória do computador que se aproxima da Fórmula atual o sistema gera os código dele mas já que não é o sistema tragirão vocês podem não São golaços [Música] exato eles não são voláteis essa é a melhor definição e tem outras questões Quando você estuda sistemas orientados objetos a fundo por exemplo
quando um sistema oriental do objeto tá rodando na memória o sistema tem o controle absoluto de todos os dias que foram que são tão sendo gerados porque ele começa o programa E aí começa a Gerar o zodíades ele pode gerar sequencial Se Ele quiser ele sabe que não vai ter repetição no banco de dados eu teria Teoricamente olhando tudo não sei o quê que às vezes eu tenho tabelas várias tabelas paralelas gerando coisas exclusões então para o sistema é muito complexo ficar é puxando que tem na memória jogando não dá ele tem que ter o
sistema dele interno lá de geração que é completamente independente beleza gente bom então é uma possibilidade se eu Adotar a política de que eu quero gerar uma chave primária para os dois casos eu posso gerar essa tabela aqui vamos ver um caso diferente que é o caso de marcadores então eu vou mostrar esse caso diferente só para relatar o auto relacionamento que é muito importante também mas a gente vai construir Imagine que eu tenho eu quero guardar numa numa tabela não é os marcadores marcador Imagina sabe bookmax que você tem no navegador que Você pode
guardar endereços da web Imagine que eu quisesse criar um banco para guardar esses marcadores e que eu tivesse o título O endereço na web e quantos acessos eu tive para fazer estatística ou qualquer coisa para saber quais são os mais usados por exemplo que o navegador ele usa os mais usados para rankear na hora que você tá digitando lá ele ranqueia e ele bota em cima quem você usa mais tá então essas coisas eu Quero controlar internamente tá poderia ser assim também certo então seguindo o que a gente aprendeu ele viraria uma tabela assim o
título como sendo a chave primária por exemplo se eu garantir que o título é único tá é claro que na hora que eu fiz essa tabela eu já estou garantindo pode ser também é uma boa ideia é uma boa ideia o endereço como chave primária seria mais pertinente porque esse aí você tem certeza que ele não vai Ser duplicado né [Música] esse exercício ó é porque eu modifiquei todos os processos tudo que foi exercício é preciso fazer em casa tá tarefa para fazer na sala certo isso aqui eu vou pular Porque se vocês quiserem fazer
em casa relacionamento um para um então agora vamos ver uma outra forma de mapeamento quando eu tenho um relacionamento de um para um Tá então pessoa ocupa armário é um relacionamento de um para um no sentido de que uma pessoa Ocupa um armário e um armário é ocupado por uma pessoa Qual o mapeamento que vocês dariam para esse caso [Música] Vocês entenderam o que ele falou ele sugeriu que ocupa viria uma tabela que tem a chave dos dois lados todo mundo concorda com isso fala É aí você não precisaria criar tabela intermediária é isso isso
é relevante eu crio ou não a tabela intermediária é relevante Por que é relevante mas criaram ou não criar uma tabela intermediária vai afetar em que Oi tem menos dados redundantes é isso é Depende do que você chama de redundante que uma chave estrangeira é um dado redundante só que ele tem integridade referencial [Música] depende da pergunta note vamos lá criar uma terceira tabela a gente vai estudar isso mais a fundo mais para frente mas Ocupa um pouco mais espaço mais espaço hoje em dia já não tem sido um problema muito grande só que exige
mais processamento Tá certo porque a gente vai depois aprender a fazer as Queres que a gente chama e se você Tem uma coisa juntar duas tabelas e outra coisa juntar três tabelas temos de processamento é muito mais processamento então a gente evita multiplicar tabela se não for necessário aí a pergunta é se nesse caso é necessário Ele tá dizendo não dá para fazer com duas eu concordo dá para fazer com duas a pergunta é precisa pessoa apontar para malhar apontar para pessoa eu não preciso ter os dois lados concorda Nesse caso eu poderia ter uma
tabela só inclusive porque é uma relação de um para um Tá certo mas a gente vai discutir isso aí aqui eu tô colocando ML é a mesma coisa o ML tem a vantagem de que eu posso colocar cardinalidade mínima né E aí colocando a cardinalidade mínima nesse caso eu sei o quê que a relação é opcional certo então um armário Pode não ter nenhuma pessoa que ocupa ele e uma pessoa pode não ocupar um armário Ah André Mas isso é importante nesse mapeamento é importante tá Então vamos pensar como fazer isso aqui tem uma regra
gente novamente é a recomendação mas é o seguinte se um relacionamento é de um para um tá é recomendado a fusão de tabelas as duas tabelas virarem uma Mas e as outras duas opções que é você criar uma coluna numa das tabelas ou você criar uma tabela própria são muito Pouco recomendadas o três aí porque aqui é primeiro segundo e terceiro opção aquele botou aqui é um autor Royal ele botou o terceiro opção nos dois fazer é muito pouco recomendado agora tem um caso em que a gente faz certo em que caso que a gente
faz não é tão comum esse caso mas tem um caso que a gente faz que se a gente tem esse cenário em que os dois lados são opcionais vai ficar uma tabela muito estranha essa é uma tabela de que Exatamente porque assim tem hora que ela não tem a pessoa tem hora que ela não tem o armário é um negócio é uma tabela sinistra concorda Ah mas essa é uma tabela de pessoas não necessariamente porque tem hora que tem o armário não tem a pessoa Ah mas então essa mata de armário não necessariamente porque tem
hora que tem armário que tem a pessoa então do ponto de vista de uso vai ficar vai ficar um negócio muito estranho então se você tem os dois lados Opcionais é um caso que você não deveria fundir as tabelas Tá certo se os dois lados são obrigatórios pense muito bem se você não deveria fundir a tabela porque porque se os dois lados são obrigatório significar que aquilo sempre vai acontecer Por que que você tá fazendo duas tabelas certo Vocês entenderam como é que é o jogo aí Imagine que fosse obrigatório os dois lados então pessoa
sempre tem um armário e armário sem preocupado por uma pessoa Certo então por que que você não bota as coisas do armário como atributo de pessoa já que ela vai ter sempre armário para quem você vai criar outra tabela se ele é obrigatório Você sempre tem que estar lá você bota mais ela porque é obrigatório bom então Note que essa realidade está sendo demonstrada aqui ó gente os dois lados obrigatórios Olha eu falei que a gente não vai usar essa anotação Em sala tá mas eu tô usando aqui porque eu tô replicando roiser que foi
quem construiu essa tabela e ele usa essa domínio máximo Então a gente vai ter que usar e aqui eu preciso usar um em março para discutir essas questões obrigatório Tá certo então se os dois lados são obrigatórios Você devia fundir as tabelas é muito pouco recomendável que você faça uma adição de coluna ou que você faça uma terceira tabela Se pelo menos um lado é opcional tá certo mesmo assim você deve considerar a fusão de tabelas porque você foi por exemplo vamos dizer que Nem toda pessoa tem um armário você funde e se ela não
tiver mais você faz sentido mas apenas um dos lados opcional isso faz sentido se os dois lados forem opcionais que foi aquele caso que eu falei para vocês não pode haver fusão de tabelas porque a Tabela não vai fazer sentido certo uma hora é pessoa uma hora armário não dá aí adição de coluna É recomendada [Música] então o tipo de julgamento ele é feito em vários critérios certo então primeiro critério é isso aqui é o mais recomendado certo quando é que o mais recomendado como é que você vai abrir mão do mais recomendado eu vou
mostrar daqui a pouco que a gente pode colocar Atributos na relação quando a gente coloca atributos na relação eu vou mostrar que você vai adicionar colunas para os atributos certo e se você faz fusão de tabelas ou se você adiciona a colunas esses atributos vão para uma das tabelas tem um cenário muito específico que se chama de relações esparsas que é o seguinte eu tenho 100 mil alunos na Unicamp e de 100 mil alunos somente 200 Sem armário tá certo Então vale a pena fazer uma tabela separada porque porque essa tabela vai ter 200 linhas
senão você vai ter que botar coluna um dado sobre armário para 100 mil entendeu uma relação espaço Então se os cenários dessa natureza que você vai tomar decisões um pouco diferentes entendeu você cria uma tabela só para definir se a pessoa tem um armário ou não entendeu porque é uma relação muito espaço Então Vale a pena ser enfiar coluna de armário para 100 mil pessoas para só 200 delas tem armário entendeu aí Isso aqui é uma tabela lá bom Então vamos ver como é que isso vira a tabela uma vez que eu decidi o que
eu quero fazer tá eu tenho adicionar uma coluna usando uma chave estrangeira eu tenho o que a gente chama Relacionamento incorporado que é quando a gente faz a fusão das tabelas e eu tenho relação de relacionamento quando eu crio uma terceira tabela Então vamos ver cada um desses casos certo é então você criar fazer uma um ponteiro né uma tabela apontar para outra né é um dos casos mais usados Não vai ser usado em alguns casos opcionais como é que a gente vai fazer isso então vamos pegar uma pessoa com armário certo que é esse
caso aqui [Música] tem uma questão que a gente se pergunta é o seguinte pessoa de enviar apontar para armário o armário devia apontar para pessoa certo a resposta é depende No modelo conceitual o ML é mais fácil tomar essa decisão porque porque no ML tem o que a gente chama de navegabilidade eu digo que pessoa ocupa armário ou armário é ocupado por uma pessoa essa navegabilidade Como eu vou mostrar para vocês orienta quem tem a chave estrangeira ou seja se a pessoa que ocupa armário uma ferramenta recomendável é que eu vou navegar sempre Daqui para
cá então eu vou ter uma chave estrangeira de pessoa para o armário que ela ocupa se a navegação tradicional nessa direção eu vou ter uma chave estrangeira do lado de armário para saber quem é a pessoa que ocupa ela tá então a ideia básica é a seguinte pessoa virou uma tabela armário virou uma tabela com as suas respectivas Chaves primárias Tá certo Como é que eu faço a chave estrangeira eu vou botar uma coluna eu posso ser navegabilidade for de armário para pessoa né na verdade é nessa direção eu vou botar uma coluna extra aqui
em armário dizendo quem é o pessoa que ela que tá ocupando o armário é isso que é você criar uma coluna Extra todo mundo entendeu isso alguma dúvida não é lindo isso gente você não tá emocionado vocês não estão com vontade De chorar sensacional né eu tenho que trazer lenços na aula porque isso fica emocionados e tal Então essa é a ideia ali ali na verdade me ajuda a tomar essa decisão né oi fala mais um relacionamento então o modelo não ajuda a gente a decisão vai ter que ser tomada no mapeamento Então na hora
que você mapeia Você vai se perguntar qual é o tipo de pergunta mais frequente que você vai fazer ou mais incentivo que vai fazer você tomar decisão então por exemplo se é muito comum eu partir do armário para saber as pessoas que estão ocupando é a operação mais comum mais frequente Talvez seja melhor botar do lado de cá tá certo se por outro lado centro do meu trabalho é a pessoa e eu só quero saber se ela tem armário ou não Talvez seja melhor botar referência aí você vai ter Que tomar essa decisão na hora
de mapear tá que o relacionamento de relacionamento não ajuda já o ML pode ajudar se você botar a navegação porque você já tomou essa decisão no modelo conceitual e aí você faz conforme a navegação tá tudo bem bom aí a gente tem alguns casos especiais que a gente tem que considerar por exemplo Ah mas e sim a minha relação tem atributos certo se a minha relação tem atributos se eu adotar o modelo de referenciar a tabela que faz a chave estrangeira o que referencia vai ter que ter colunas extras só para os atributos da relação
cada tribo da relação vai virar uma coluna Extra em quem faz a referência tudo certo Bom agora vamos ver a outra opção a outra opção é aquela que eu falei que Você vai fazer a fusão das tabelas numa tabela só certo então a recomendação é que você faz isso somente quando as duas tem o que a gente chama de participação Total ou seja as duas sempre Precisam fazer parte da relação tá então esse aqui não tem muito o que falar tá tem muito o que fazer aí você vai pegar as duas tabelas e Vai juntar
Tá certo não tem muito o que falar [Música] a opção c e eu não sei porque sumiu a opção é eu transformar a relação numa tabela é a gente chama de relação de relacionamento é uma tabela que vai fazer uma referência cruzada entre as duas envolvidas no relacionamento tá então eu tô mostrando aqui um exemplo que a gente faria com pessoa ocupa armário para essa relação como ela tem cardinalidade um não é recomendado Tá Mas é possível Ok então como eu faria eu teria que ter uma chave estrangeira para pessoa eu teria que ter uma
chave estrangeira para armário e se houver atributos da relação eu Transformo em atributos do relacionamento da tabela de relacionamento então o único cenário que eu vejo que faz sentido criar essa relação intermediária para essa entidade relacionamento é se essa relação for muito esparsa ou seja se eu tiver muito Poucos casos de ocupação mesmo assim você teria considerar o seguinte mas mesmo assim se são muito poucos porque tem poucos armários mesmo assim você poderia só deixar no armário e não precisaria colocar ali tá certo eu tô dizendo assim ó 100 mil pessoas só 200 ocupam armário
tá Ah mas eu só tenho 200 armários também eu poderia colocar a relação do lado de armário eu ia resolver o problema de vocês parte Tá certo Mas vão ter cenários esse aqui não é um bom exemplo mas vamos imaginar que vão ter cenários que é assim eu tenho muitas pessoas eu tenho muitos armários mas a ocupação É errada aí eu posso criar uma tabela no meio Oi para o modelo relacional sempre existe uma chave primária a gente vai discutir isso essa é uma boa pergunta se eu digo que a minha chave Malhação esses dois
caras aqui eu não garanto uma relação de um para um Tá Certo na verdade na verdade na minha tabela pelo esquema da tabela não tem como eu garantir uma relação de um para um eu consigo garantir que não vai ter uma relação de um para ele eu vou mostrar tá o gene para eles desculpa mas de um para um eu não sei como fazer entendeu eu não teria como garantir que não tem relação de um para um aí tem coisa nem tudo eu vou conseguir resolver no modelo Tem coisa que o sistema que faz o
negócio Que vai ter quer dizer eu até conseguiria mas o modelo relacional em si não tem essa preocupação quando a gente passar para o físico que a gente fazer isso por exemplo eu poderia dizer que essa tabela é um valor único e essa tabela é um valor único aí eu conseguiria garantir um para um certo mas é isso o modelo racional do jeito que a gente faz aqui ele não se preocupa com isso ele vai ter preocupação mais para frente tá Relacionamento de um para ele tá Como é que eu faço bom então eu poderia
pegar estante guardar livro imaginar que estante guarda livre é um relacionamento de um para ele uma estante Guarda ele livros cada livro Só está numa estante novamente eu tô representando das duas maneiras só porque para esses casos de mapeamento a cardinalidade mínima ela é relevante Mas A gente sempre vai usar o de cima que é a razão tá lembrando que a razão de cardinalidade é o contrário né da participação que é quando você representa o mínimo e o máximo bom essa relação tá me dizendo que toda a estante tem um livro Mas nem todo Livro
toda estante tem pelo menos ou desculpar todo o livro está em pelo menos uma instante Mas nem todo instante tem livros Como mapear eu tenho esses quatro possíveis cenários ninguém Gostou de quê fundo de tabela ninguém gostou não esse aí é impossível né Não dá para fazer tabela é impossível porque você estaria indo contra o modelo relacional para você poder definir tabela é impossível então O que que a gente faz aqui aqui a gente tem quatro cenários Tá Certo Quais são os quatro cenários os dois lados são opcionais o lado do n é obrigatório o
lado de um opcional o lado de um é obrigatório do n opcional os dois são obrigatórios certo em todos os casos não dá para fazer fusão de tabela não dá esquece seria contra o modelo relacional não dá em todos os casos É recomendada a adição de uma coluna é o que se recomenda não fazer uma Tabela própria tá É principalmente nos casos em que o lado do um é obrigatório nesse caso é muito pouco recomendado que você não adiciona uma coluna muito pouco tá é porque o que vai acontecer a gente vai ver que quem
vai apontar quem vai ter a serva estrangeira é o lado que tem o 1 é o livro que a ponta da tabela bom lá tem um entre aspas é o livro que aponta para tabela sem para Estante sempre né porque ela só tem uma estante que ela pode estar então ela vai apontar se ela é obrigatória se todo o livro tem que estar na estante essa coluna sempre vai existir Então não vai assistir aquele cenário que eu falei de relações esparsas porque é obrigatório entendeu então é muito pouco justificável que você crie uma tabela só
para o relacionamento Tá certo então é a chave aqui a gente vai usar a chave Foi embora de uma relação vai virar a chave estrangeira da outra né então instante guardar livro né quem é que tem a chave estrangeira tá quem tem a chave estrangeira vamos chamar assim é o lado que só tem se você pensar na participação é lado que só tem um se fosse ao contrário que a razão é o lado que tem ou seja como todo o livro Só estará numa estante é ele que tem a chave estrangeira porque ele só vai
falar bastante então ele tem chave Estrangeira a estante jamais poderia ter chave estrangeira pro livro porque não poderia que ela tem mais de um Ah mas eu podia botar um vetor podia botar um vetor exatamente o modelo racional não permite ver todo dado tem que ser atômico beleza esse aqui é exercício para casa Auto relacionamento você pode ter Auto relacionamento de um para n a regra é a mesma só que a chave estrangeira é para Você mesmo sabe então Imagine que eu tivesse um sistema de categorias não é eu tivesse categorias Sabe aquele exemplo que
eu falei de marcadores eu quisesse categorizar os meus marcadores não é então cada categoria tem uma Sul pode ter uma super categoria pode ter uma subcategorias Tá certo então eu sempre eu tenho uma categorização e esse é um auto Relacionamento na hora que eu vou transformar isso no modelo relacional tá isso aqui é um ml tá na hora que eu vou transformar isso no modelo relacional que que vai acontecer pera aí deixa eu deixa eu mostrar aqui a é que eu tô mostrando o cenário todo antes de mapear então eu posso ter uma categoria que
tem uma categoria superior e eu tenho meu marcador de livros que Pertence a uma categoria então E aí eu tô usando o mesmo modelo com caridade mínima e máxima e aqui o mesmo modelo em ml como é que eu faria bom eu tenho uma tabela de marcadores e eu tenho uma chave estrangeira para categoria tá vendo isso aqui é uma chave estrangeira a categoria tem uma chave primária categoria E tem Uma chave estrangeira para categoria superior porque a chave estrangeira para categoria superior porque eu só tenho uma categoria superior não é então o cara que
aponta só para um é que vai ter a chave estrangeira tá Então essa é a forma numa tabela que eu represento minha hierarquia como essa tabela nesse caso nesse caso eu tenho que aceitar no que alguém não vai ter categoria superior ok Então é sempre de baixo que a ponta por cima na tabela então de uma forma geral como é que isso ficaria representado no modelo racional o marcador é representado por uma tabela e categoria uma chave estrangeira para categoria superior taxonomia a categoria chave primária e a categoria superior é uma chave estrangeira para ela
mesma tá xonomia esse cara aqui ó Ah é que eu chamei de categoria é categoria E taxonomia É que na verdade era melhor eu ter chamado de de taxonomia porque categoria é o atributo para não botar o atributo é melhor na verdade chamar de taxonomia bom aqui eu quero chamar atenção para vocês para uma anotação que é possível mas muita gente confunde ela a quantidade de relacionamento Não façam isso certo existe uma anotação gráfica para o modelo relacional certo se o pessoal popularmente chama de pé de galinha é mesmo pé de galinha anotação pé de
galinha como é que funciona a notação pé de galinha se eu tenho uma tabela taxonomia por exemplo e eu tenho uma tabela marcador Tá certo Essa é a minha relação tá e o lado que é n ele fica com esse trio aqui que é o pé de galinha o lado que é um na verdade Depende de quem usa anotação às vezes é só o tracinho ou às vezes tem esse tracejado aqui então aqui é uma relação de um para n de duas tabelas então isso aqui não é entidade de relacionamento isso aqui é tabela isso
aqui é tabela a gente vai ver a diferença é do pé de galinha então o que que é Diferente isso em relação ao modelo A Entidade de relacionamento primeiro vocês estão vendo que ele tem nem parecido com ml porque os atributos ficam dentro e ele representa um negócio que não é representado no modelo identidade de relacionamento ele representa a chave estrangeira tá vendo aqui a chave estrangeira tá vendo aqui a chave estrangeira no modelo entidade de relacionamento a Chave estrangeira não é representada você é representa a relação e é isso se representa uma relação porque
você está pensando no modelo conceitual chave estrangeira é um conceito que aparece no modelo lógico e é por isso que vai aparecer na anotação pé de galinha porque anotação pé de galinha ela tá refletindo isso aqui só que graficamente porque é mais fácil de visualizar n é a caridade Então quer dizer que uma taxonomia tem vários marcador uma categoria né Tem vários marcadores Mas cada marcador só pertence a uma a uma categoria tá é eventualmente a gente pode usar essa anotação e tem vários sistemas como a gente vai ver de bancos de dados que permite
que você Gene automaticamente a notação pé de galinha ou que você faça Uma anotação pé de galinha que vira uma tabela aqui por exemplo é uma um software que vem com mais que ele que faz esse tipo de notação porque o a mais que ele trabalha com banco de dados relacional Oi para prova o que vai que que a gente faz com um relacionamento de n para m que que vocês acham silêncio [Música] vocês acham acham que dá para adicionar uma coluna pessoa escreve livro um livro pode ser escrito várias pessoas cada pessoa pode escrever
vários livros não dá não dá porque qualquer solução que você tentar iria ferir o modelo racional a única forma de resolver uma relação de n para m é criando uma tabela Extra certo é a única forma então isso não tem muito que discutir Certo É aquela ideia né então o que que você vai fazer você vai pegar a relação e vai transformar numa terceira tabela que a gente já viu que tem a referência cruzada alguma dúvida Então nesse caso por exemplo pessoa escreve livro eu poderia ter uma tabela escreve que tem o código do autor
e tem o código do livro as duas juntas formam a chave primária dessa tabela e cada uma delas É chave estrangeira para uma tabela tudo bem Oi o atributo autor o que [Música] Você tem razão aquele atributo autor parabéns hein anos que usa esse slide ninguém nunca reparou isso é um bug não tem aquele tributo tem que corrigir aquilo não tem a tribo Doutor que na verdade o autor é a relação Escreve Aqui Você não vai ter o Atributo tá deixa eu ver se eu já consigo tirar ele eu não sei se eu consigo tirar
aqui Ah eu consigo em então eu vou tirar porque esse é um bug sério então autor aqui não existe tá gente todo mundo entendeu o que ele falou Isso não é um atributo que o autor já está ilustrado aqui né aí Aqui também não vai ter esse atributo aqui certo Tudo bem Oi não a chave do escreve são esses dois juntos essa é a chave primária você combina os dois não é um terceira tributo você disse que porque uma chave primária ela não precisa ser um atributo só você pode criar uma chave mais de dois
três cinco quatro gotas se você quiser aí eu tô dizendo que esses dois atributos são e a chave primária Os dois exato Oi não eles vão ficar os dois Campos porque quem resolve a questão de chave primária não é a tabela em si depois a gente vai estudar aí a gente vai cair no modelo físico né no modelo físico a gente vai entender que a gente vai resolver isso por índice a gente vai criar uma indexação aí essa indexação é o que você tá pensando eu vou com catenal os dois para poder criar um índice
[Música] não você pode dizer que tem esses atributos são minha chave primária e aí ele juntos vão ser sua chave primária tá beleza então agora o que que eu quero que vocês façam certo essas duas tabelas que vocês fizeram [Música] Espera aí cadê ah não essas duas Não essa tabela eu quero que vocês reflitam O que vocês fizeram na tabela 1 no Exercício no início da aula e vejam se vocês vão manter a mesma tá certo Se vocês não forem manter a mesma vocês escrevam aí agora a versão modificada se for manter a mesma escreve
só a mesma da questão anterior tá Oi Oi só deixa eu só parar aqui que que vocês propuseram para esse exercício o que que é Três tabelas Então vai ter uma terceira tabela consome que tem chave estrangeira para estudante e para refeição certo é isso isso aqui é para casa entidade fraca eu quero aproveitar aqui que eu vou falar de entidade fraca e quero ajustar uma coisa que eu não falei na aula que eu falei da cidade de fraca tem um assunto que eu percebi depois que eu Não falei tá que é o seguinte Como
se representa a chave de uma entidade fraca ou o atributo identificador eu não falei isso isso é importante agora então eu vou falar agora então só completando uma explicação que eu deveria ter dado lá na entidade de relacionamento quando uma entidade ela é fraca Tá certo Ela tem uma relação com uma entidade que digamos assim vai dar para ela a identidade E com essa relação ela tem uma forma de relacionamento que é o seguinte ela tem uma uma chave primária parcial vamos dizer assim que essa sequência que na verdade ela vai se casar com a
chave primária da entidade que é a identidade para ela para formar a chave dela então vamos lá é isbn é uma chave única certo cada livro Só tem um isbn tá se eu sou um exemplar de um livro e eu Sou uma entidade fraca Tá certo significa que eu vou ter o isbn daquele livro certo só que como eu preciso de uma chave primária única que não pode ser igual aos outros livros que também são daquela exemplares daquele Ali vai ter um número sequencial Então vai ter o ESPN do livro zero um espião do livro
02 03 Então na verdade quando eu represento a chave da entidade fraca ela é um complemento a chave da entidade primária A entidade não da entidade identificadora proprietária entidade proprietária [Música] está voltando aqui para esse aqui Você tem uma tabela para Estudante tem uma tabela para refeição com os atributos e uma tabela que tem uma chave que cruzada ali que tem para estudante para refeição Então como é que eu trato as chaves de uma entidade fraca A Entidade fraca vai ser traduzida numa tabela certo os atributos da entidade fraca vão ser traduzidos em Colunas da
relação Então nesse aspecto é igual a uma entidade até aí tá a chave estrangeira na tabela entidade fraca vai ser a chave primária da entidade proprietária então cada exemplar do livro vai ter uma chave estrangeira para um livro ou seja toda a Chave toda a entidade fraca tem uma chave estrangeira para quem é a proprietária Tá certo e a chave primária da tabela da entidade fraca vai ser os atributos identificadores da entidade fraca mas a chave primária da entidade proprietária Então vamos ver o exemplo aqui tá gente vendo um exemplo é mais fácil vocês entenderem
então a tabela livro tem o isbn Que é a chave primária Tá certo a tabela exemplar ela tem uma chave que é complementar ali tá Então como é que eu mapeio isso a chave ela vai ter uma chave estrangeira e sbn então sbn vai ser chave estrangeira para a tabela E além disso ela vai ter uma sequência numérica que junto com sbn vai virar a chave primária dela tá então Suponha que eu tenho o primeiro exemplar daquele livro na minha livraria Então vai ser o ESPN 2 ESPN 3 a maneira que eu nunca vou ter
dois livros que tem dois exemplares que tem a mesma chave primária todo mundo entendeu Oi quando a gente está fazendo um modelo relacional nessa nesse formalismo em geral a gente não se preocupa muito com isso tá certo você até pode mas a gente vai aprender aqui quando você for fazer as Consultas é que você vai se preocupar com Chaves secundárias porque a consulta que aí eu vou ter que falar de outros assuntos com ruins e outras coisas para você entender o seguinte Toda vez que você define uma chave você Define um índice para aquela chave
tá E aí se a sua consulta por exemplo conhece bem ele é a chave primária Mas vamos dizer que eu faço muitas consultas pelo título tá alguém chega lá no software escreve o título Ele quer saber que livro que tem Aquele cheiro aí eu posso criar uma chave secundária ela tem que ser única porque ela é uma chave então ela tem a regra da chave só que ela não vai ser a que você vai usar para identificar nas relações ela é entendeu imagina que você tem CPF e tem RG no seu no sua no seu
cadastro da Unicamp certo eles não tem que escolher um para ser chave primário porque ele não vão pegar ah em alguns sistemas e o CPF não no seu Caso vai ser ra né você r a tem CPF tem RG tem três chaves aí certo eles vão escolher uma que é o ra porque ele não sabe cada sistema vai ter um negócio diferente não todos os sistemas da Unicamp vão ser integrados a você pelo ra bom essa é a chave primária certo agora pode ser que tenha um sistema que precise acessar pessoas pelo CPF porque Ah
porque qualquer razão é integrado com algum sistema externo que usa CPF não usa ra Eu preciso acessar o CPF isso pode virar uma chave secundária porque na hora que eu for fazer a consulta eu posso querer recuperar um aluno pelo CPF aí é uma chave secundária de um achado no CPF O problema é que se você botar dois atributos aí CPF é os dois juntos na chave primária você vai poder ter dois alunos com mesma ra porque eles vão ter CPF diferentes mas Isso vai continuar sendo o único exatamente e a escolha é arbitrária dos
exercícios você vai escolher um que você quer que seja o principal o resto vai ser secundário tem formalismo eu não vou mostrar aqui na sala porque vai ficar muito confuso tá tem formalismos que representam a chave secundária Tá mas eu não acho que é relevante é muito pouco usado eu não vou apresentar aqui aí porque depois tem todo um complicante que aí a chave Primária tem que ser uma uma travessão único não sei o que tava lá eu não quero entrar nisso eu tô usando o que é mais usual tá porque nesses formalhões alternativos isso
aqui não é uma chave só são duas Chaves entendeu se você quiser se fosse uma chave só traz tinha que ser único Eu não quero entrar nisso aqui na disciplina se você sublinhar vários Campos todos eles fazem parte da chave primária aqui é um dos Jornalistas que Existe e o que a gente vai adotar aqui na disciplina atributos multilolorados agora vamos lá faz sentido falar em atributos muito valorados faz porque o modelo entidade de relacionamento aceita atributos multilabolados o modelo relacionar que não Então na hora de mapear eu tenho que resolver certo Então como você
faria para mapear atributo valorados por modelo relacional a dividir mais de uma Não na verdade aí você tá por baixo pelos bastidores criando atributo no relacional não mas cada um atributo mas na verdade não é cada um atributo eles são o mesmo atributo que você fez um fake aí botando várias colunas Então não é isso você não pode fazer várias colunas não é uma boa prática Certo fala essa anotação quer dizer que é um atributo que pode receber Vários valores é como se fosse um vetor eu poderia colocar isso aqui em livros em autores quer
dizer que o livro tem o entidade de relacionamento Aceita isso quem não aceita é o modelo relacional E aí eu tô perguntando como é uma padaria fala vários registros Mas como vários registros Mas como Se não pode fazer isso porque vamos supor que autores fosse um atributo multi valorado de livro certo como é que eu ia ficar repetindo a dupla livro várias vezes na tabela achava que Maria ia ser o quê se é o mesmo livro vai ter que virar uma tabela independente tá certo é o atributo Multi valorado é como se fosse uma outra
entidade você vai ter que tratar assim Na hora de mapear então o atributo vai virar uma tabela não tem jeito tá a chave primária da entidade vai virar a chave estrangeira de m certo então ele vai ter uma chave estrangeira certo para a entidade tá [Música] não é assim não vão imaginar que fosse livro e que a chave Mari é o USB no livro então na tabela de autores eu ia ter que ter uma chave Estrangeira que é o sbn do livro que ele autor idade entre aspas porque na hora de fazer a consulta eu
posso resolver isso na verdade eu consigo também saber fazendo o cruzamento dos dois a gente vai aprender a fazer isso é que em alguns casos é mais eficiente quando você segue o caminho que você vai fazer a consulta Tá mas nesse caso não tem jeito [Música] Mas aí você tá tentando fausar o modelo multi valorado no relacionamento [Música] é porque agora eu vou criar uma tabela separada que é só a tabela de autores Deixa eu ver se eu tenho uma ilustração aqui para eu não botei o exemplo aqui mas a ideia básica é que eu
vou ter uma tabela separada que é só dos autores certo e nessa tabela separada que são os autores cada um Deles vai ter uma chave estrangeira para o livro que eles estão que eles escreveram [Música] um livro [Música] é mas aí vai ficar muito confuso esse negócio vai você muitas tabelas talvez porque você vai Pelo que eu entendi você vai ter a tabela de grupos a tabela de livros e a tabela de autores que na verdade o que a gente faz aqui é O clássico Qual é o clássico é que a chave estrangeira aponta para
uma chave primária como a chave primária do livro isbn é a chave estrangeira dele vai voltar para o SPM que é o clássico ia ser outra chave aí é um outro problema fala isso Note que você tá pensando em aspectos de implementação que em nenhum desses dois modelos a gente se preocupam então no modelo A Entidade de Lançamento Eu não me preocupo o tamanho de um vetor que esse é um problema de implementação Tá certo não é um problema do modelo identidade de relacionamento o modelo relacional se for modelo lógico também não tá preocupado com
isso ele vai ter lá as tabelas que vão ser capazes de colocar quantos autores você quiser tá você vai se preocupar nisso na hora que você descer lá na aplicação você vai dar não só pode ser no máximo x autores aí você resolve isso entendeu Mas esse modelo não precisa se preocupar com isso fala [Música] Sim essa é uma excelente Pergunta a pergunta foi a seguinte olha só eu tenho um problema que se o mesmo autor nessa solução que eu tô falando presta atenção no que ele tá dizendo se o mesmo autor escreveu dois livros
certo eu vou ter um problema aí porque eu vou ter um problema porque do Jeito que eu tô fazendo aqui o mesmo autor vai aparecer duas vezes deixa eu mostrar para vocês eu acho que eu vou ter que abrir uma planilha aqui e mostrar para vocês que vai ficar mais fácil vocês entenderem é vamos pensar o seguinte e sbn eu acho que eu até tenho essa tabela aqui mas eu não vou atrás dela não vou estar aqui isbn tá Então vamos pegar aqui sbn 1514567 Livro Vidas Secas yesbn 3 4 5 6 7 livro é
fala aí a sangue frio ESPN 87678 Capitães de Areia não bate não Batman não gente Ok eu tenho aqui os livros tá certo aí o que eu falei é que eu tenho um atributo multi valorado que são os autores desse livro lá no meu modelo identidade de relacionamento Eu acho que eu até tenho A figura aqui deixa eu ver se eu acho a figura aqui que eu acho que quando eu falei do modelo conceitual eu tinha essa figura aqui pera aí modelagem Deixa eu ver se eu tenho essa figura aqui para mostrar para vocês só
para vocês pegarem a imagem da coisa tá certo é aqui eu não botei relacionado não vou ter relacionado infelizmente mas vamos fazer assim ó Vamos pegar esse aqui ó Na verdade Espera aí eu não preciso vir para cá não eu posso pegar daqui Aquele modelo bugado que alguém Achou aí aqui ó eu posso pegar esse modelo de livro aqui tá E posso trazer para cá certo deixa eu trazer para cá para baixo mesmo depois eu arrumo depois eu atualizo os slides de vocês isso aqui viu gente eu tenho feito isso Tá fiz assim você fez
negócio e tá ele fez algumas ziquizeira aqui Então o que eu tô falando aqui é o seguinte vocês imaginam que eu tenho livro aqui tá certo e eu tenho um atributo multivaldo aqui chamado autores tá só para ficar compatível que eu tô fazendo lá eu vou tirar a categoria e eu vou tirar Tá eu vou deixar só esses Três caras aqui certo então eu tenho aqui autores e autores se ele é um atributo muito valorizado ele tem dois Anéis assim ó tá então ele tá assim ó gente não tá lindo não mas tá dando para
entender né Ele é multi valorado Tá certo bom Beleza então autores é [Música] tá esse é o meu cenário certo e eu quero representar isso na minha tabela tudo bem Aí o que eu fiz foi o seguinte eu coloquei aqui Livre sbn livro tá e eu vou criar uma segunda tabela independente dessa tá que vai ter autor certo Ah mas eu botei um monte de livro que só tem um autor hein todos esses três livros só tem um autor [Música] livro x livro Y e livros tá Então Vamos botar assim autor um do livro x
autor não vai ficar estranho isso né autora autor de certo então aqui eu podia botar as tribos está sempre presente Doriana tá sempre presente tá aí vamos dizer que as drubalquímicas e Doriana eles são autores do livro x certo Então eles vão ter uma chave estrangeira aqui para o nível x tá só que quem é a chave primária dessa tabela que a chave primária dessa tabela aqui é isbn concorda quem é a chave fora dessa tabela não pode ser isbn concorda então a regra é muito parecida com aquela outra que a gente viu de um
para ele é assim a regra deixa eu descer lá a regra é assim você vai botar a chave Primária mais atributo multi valorado Então você imagina que eu boto assim um dois três é que nem quando a gente fez quantidade fraca sabe eu posso botar uma sequência aqui e vou numerando tá cara hoje esse negócio tá se comportando de uma forma louca bom aí esses dois caras juntos vão ser o meu atributo primário aqui mas foi levantado da seguinte questão nesse modelo se as drubão tá Escreveu o livro Y que que vai acontecer ele vai
aparecer mais uma vez tá Ah não desculpa tá errado é o sbn eu deveria colocar o rpn mesmo pô a galera já tá dormindo mesmo hein [Música] tá eu vou repetir azul já chego aí eu vou repetir tá certo mas aí vocês vão me dizer assim pô mas se eu mesmo como é que eu sei que esses dois são o mesmo Eu não sei não [Música] eu não sei fala o que que você ia perguntar [Música] chave primária por definição é única não existe chave [Música] é porque isso isso que você tá pensando ah eu
vou juntar que é o que ele tava falando isso é modelagem física na modelagem lógica eu não penso nisso Eu não quero saber se eu vou fundir numa coluna Ah mas o desempenho não tô nem aí para desempenho Esse é o modelo Lógico eu não penso nisso então isso nunca se passa na cabeça de um modelo Lógico tá não acontece são duas colunas Ah mas na hora que eu vou fazer a tabela Ah vou juntar isso é outro problema é o modelo físico já tá nesse modelo deixa vocês precisam entender bem por que que eu
fiz isso por que que eu gerei um problema tá certo Vejam presta atenção porque isso é muito importante nesse modelo O que aconteceu é que o modelo original o modelo original entidade relacionamento tá na hora que ele disse que autores é um atributo muito favorável ele não é uma boa modelagem porque se eu quero identificar o mesmo autor em vários contextos Ele deveria ser uma entidade Então a minha falha aqui foi na modelagem do modelo entidade de relacionamento que não tá boa certo e essa modelagem ruim refletiu no meu mapeamento na hora que eu mapeei
as Drumond deixou de ser reconhecido como entidade única ele tá ele tá consistente com o modelo ele tá consistente quando entrar em relacionamento é isso mesmo o que uma maneira de relacionamento é exatamente Isso se o autor ele aparece em vários livros Eu não reconheço porque ele é um atributo muito valorado de uma entidade tá modelado errado [Música] ó eu vou eu vou dar um exemplo Tá eu vou dar um exemplo de um caso em que é poderia existir um atributo multi valorado Tá certo que faz sentido se atributo multi valorado tá geralmente você cria
um atributo Mult Valorado quando aquilo que você quer representar não ganha uma identidade Tá certo tá por exemplo vamos imaginar Tá certo que associado a uma entidade eu tenha algum tipo de conjunto de dados que sejam números tentando lembrar um caso aqui tá certo vários números Associados lá a uma entidade certo aí eu resolvo fazer uma pergunta muito valorosa para guardar esses números números são números ele não tem identidade nem nada são números Tá na hora que eu mapear essa tabela você não vão ter esse problema porque se o mesmo número se repetir em dois
lugares você não quer nem saber porque número é número não é uma coisa que eu quero reconhecer como única ah mas esse dois tiverem 17 se não tiver em 17 o raio que o parto isso não quer dizer nada é o mesmo número uma coincidência porém o que nós temos aqui não é isso alguém resolveu certo que Altônia ia ser um atributo Mult valorado Certo só que autor ele tem uma identidade e pode ser que você queira representar isso com uma coisa única Porque você quer saber todos os livros escritos Para um autor certo e
aí esse modelo tá ruim porque ele não está dando a identidade para o autor não tá [Música] Qual o problema de ter as ruas aparecendo duas vezes naquela tabela uma das questões é que do ponto de vista Conceitual eu poderia escrever o nome das ruas de maneiras diferentes porque ele é um atributo certo então o nome do autor por exemplo com o nome do meio é só a letra Resumindo e outro por extenso eu poderia escrever o sistema poderia não saber que é o mesmo autor porque tá escrito de maneira diferente e o meu modelo
não tá pedindo isso porque se você escrever o nome doutor eu não tenho nada no meu modelo que diga que ele se ajudou os dois se referem a mesma pessoa Eu posso ter dois autores homônimos certo se isso fosse uma entidade eu ia escolher alguma outra coisa para ser a chave primária que não é o nome do autor porque se tem homônimo ele não pode ser chave primária e aí em dois livros diferentes eu conseguiria identificar dois autores diferentes homônimos aqui eu não consigo Oi é Que era aquele modelo que eu mostrei antes né Aquele
modelo que eu mostrei antes lá pessoas escreve livro Isso aqui é uma modelagem adequada para esse problema essa daqui é uma modelagem e inadequada Mas como que eu tô mostrando é só o mapeamento aí é assim ó que que eu faço na hora de mapear eu crio uma tabela eu coloco a chave primária e coloca o atributo do mesmo jeito que eu faço quantidade fraca Tá bom o que que acontece quando eu tenho atributos compostos tá escrito multi valorados mas não é muito valoriza é atributos está confuso eu vou tirar o multipalorado endereço eu vou
deixar só composto se não ficar confuso Então se o atributo é composto tá as partes dele vamos virar a tabela da coluna ou vão virar a Colunas da tabela é isso certo Tudo bem se for multi valorado e composto vai virar uma tabela separada com os atributos sendo colunas e assim por diante relacionamento einário relacionamento urinário a gente já brincou disso aqui eu já fiz exercício aqui certo na sala onde eu peguei por exemplo Cidade Livre distribuidor lembra que a gente fez essa brincadeira aqui e aí quando a gente fez essa brincadeira aqui O que
eu fiz foi o seguinte eu crio uma tabela com chave estrangeira para as três outras tabelas é isso que eu faço basicamente então aqui eu tenho uma chave estrangeira para cidade aqui eu tenho umas Chaves estrangeira para livre imagina que título seria a chave primária e não iasvn e aqui eu tenho uma chave estrangeira para distribuidora Então eu tenho uma tabela que relaciona os três certo aqui eu tenho uma coisa curiosa certo e eu quero ver quem Mata Essa charada tá que é o seguinte quem é a chave primária todos os campos vamos ver todos
os campos são Chaves primária certo Aí eu pergunto o seguinte olha só a cardinalidade vocês lembram que eu tinha brincado com vocês de fazer nn1 isso queria dizer o quê então aqui quer dizer o seguinte Olha só um dado um livro uma cidade só pode ser distribuído por um distribuidor lembra dessa história a combinação Livro Cidade Só pode ser feita uma vez por um distribuidor Tá certo essa chave primária me garante isso não garante sabe por quê Porque essa chave primária a chave primária aceitaria isso porque ele aceitaria porque olha só é a mesma cidade
é o mesmo livro mas como eu mudei o distribuidor ele vai aceitar porque ainda continua sendo o único certo então essa chave primária aceita como é que eu Resolvo Eu só deixo Cidade Livre porque só a cidade livre Exatamente porque se eu deixar só a cidade livro Se eu tentar repetir então ele não vai aceitar porque como só esses dois são Chaves primária esse cara não vai ser aceito beleza [Música] rapidinho gente para a gente terminar logo Oi tem vai ser na sequência agora por isso que eu quero terminar logo isso vai então como é
que é o mapeio isso aqui uma herança como é que eu matei uma herança [Música] [Música] e outro [Música] boa é isso mesmo Então olha só gente aqui eu queria perguntar para vocês o seguinte faz diferença se a relação for Total ou parcial se foi exclusiva ou compartilhada faz diferença vamos lá compartilhar na significa que eu posso ser funcionário e associado ao mesmo tempo ou seja eu posso pertencer a duas classes Tá certo exclusiva significa que eu sou funcionário ou eu sou associado eu não posso ser as duas coisas Exato a gente vai ter esse
problema eu não vou conseguir resolver com atributos só por exemplo Tá certo é a outra coisa é que Total Imparcial quer dizer Total eu não tenho ninguém na super classe É só subclasse eles são obrigados parcial quer dizer que eu posso ter um membro na super classe Tá certo Então como é que eu resolvo o mapeamento é eu posso fazer uma única um único tabelástico para Hierarquia é possível certo e aí vai ter um atributo de tipo dizendo de que tipo é aquela tabela certo ou um múltiplos atributos boleanos quando a relação é compartilhado Ou
seja eu posso ser de mais de uma classe eu posso ser atributos boleando dizendo é dessa classe é dessa classe e aí eu boto o verdadeiro ou falso não é certo eu posso ter uma tabela para cada Subclasse eu posso definir Isso é uma outra opção E aí se eu fizer isso eu vou decidir se vai ter tabela na super clássico se não vai ter tabela na super classe o que que vai me fazer definir esses critérios Tá certo vamos lá vamos pensar em uma única tabela eu teria que unir todos os atributos no tabelão
de todo mundo certo e aí quem não se por exemplo Pensa aí Deixa eu ver se eu tenho um exemplo aqui Para mostrar imagina nessa tabela eu teria que reunir todos esses atributos numa única tabela certo E aí se ele não for se ele for associado o atributo admissão em função vão ficar nulos porque ele não é funcionário Tá certo isso pode gerar muitos valores nulos certo então a gente tem que tomar cuidado a gente tem que decidir quantos Atributos eu tô falando Tem vários critérios que vão definir isso aí certo eu tenho que ter
um atributo de tipo discriminando a subclasses somente se a relação foi exclusiva ou seja as classes juntos aí basta um atributo sendo Eu Sou da classe tal certo Se eles forem sobrepostos eu preciso ter se for compartilhada eu preciso ter um atributo buiano para cada classe Tá certo é mas eu posso ter o boleando também se Ela sou de juntas é uma decisão minha tabela para cada subclasse eu posso ter uma tabela na super classe que vai ter os atributos que são comuns a todos e cada subclasse como você falou vai ter uma chave vai
ter uma chave estrangeira para super classe Tá certo cada chave descendente vai ter uma chave primária que é igual da Super classe e é uma chave estrangeira Sem tabela de super classe cada subclasse contém todos atributos e somente especialização para especializações totais parciais não dá porque parciais eu preciso representar a tabela de cima então não funciona é subclasses não de juntas duplicam os atributos certo ou seja se eu não tiver uma tabela da para superclasse e eu tiver uma relação compartilhada como é o caso dessa aqui tá Código vai ter que ser aparecer aqui aqui
nome vai aparecer aqui aqui telefone vai aparecer aqui aqui na hora que eu fizer o mapeamento isso tudo é mais fácil ver com o caso prático que é esse de táxis Imagine que eu tenho uma tabela de clientes certo e que eu tenho duas especializações o cliente particular que usa CPF e o cliente empresa que antigamente se chamava cgc você viu que Esse slide eu não atualizar um tempão esse aqui hoje em dia se chama CNPJ que é a identificação das empresas imagina que eu quero representar tudo isso numa tabela só eu vou ter o
ID do cliente o nome eu posso ter o CPF e o cgc uma estratégia que eu posso usar é que se tiver nulo no CPF ele é cliente só empresa se tiver no cgc ele é cliente só individual se tiver os dois ele é tanto individual quanto empresa aí eu não precisaria ter um atributo de categoria Tá é uma possibilidade Mas eu também poderia ter atributo boiando dizendo Ah ele é particular ele é a empresa poderia Oi caramba não lembra dessas coisas não [Música] a verdade é que se vocês olharem as versões dos slides que
aparece aí esse já tá na versão 9 eu acho né é que esses slides eu uso desde a época que eu era aluno E aí eu fui melhorando ao longo dos anos tem n versões e é por isso que tem coisa que eu não mudo é que cada Olha você não sabe o trabalho que é fazer reflexo em uma update dessas coisas hoje por exemplo esse slide tava naquele formato quadrado que antigamente os monitores eram quadrados os slides eram quadrados e dá um trabalho danado hoje eu perdi uma hora só para tirar do formato quadrado
e botar no formato de screen uma hora que Elas as figuras ficam todas bagunçadas aí você tem que arrumando uma por uma não sei o quê Só isso aí tem isso ah não é cgc aí eu tenho que olhar CNPJ todos os slides que falam seja sempre ela trabalhando [Música] não a chave primária é o cliente eu decidi isso por causa desse problema que você tá falando aí eu decidi que nenhum desses dois vai ser chave primária até porque eles podem ser nulos Aí eu criei uma identificador do cliente [Música] é ou eu poderia criar
colunas boleanas mas nesse caso ia ser redundante nesse caso tá eu tô mostrando que eu posso fazer várias possibilidades certo vamos ver se eu quisesse criar uma tabela para cada subclasse eu poderia criar uma tabela para cliente particular e uma tabela para cliente empresa isso também é possível tá certo o único Problema é a redundância por exemplo se o mesmo as drible Ele toma táxi pela empresa em particular ele ia aparecer Igual nos dois tá isso é possível mas em algumas situações podem não ser interessante porque eu não vou eu posso ter problemas toda vez
que eu tenho redundância eu posso ter problemas Tá certo isso vai ser muito comum em casos que eu vou mostrar para vocês mais para frente que a gente quer fazer por questão de eficiência de normalização e Tal e não é uma preocupação no modelo lógico para falar a verdade tá terceiro caso eu tenho uma tabela aqui ó esse foi o que você falou eu tenho uma tabela representando o cliente com os atributos comuns e outras tabelas representando os herdeiros com a chave primária que a chave estrangeira para a tabela que ele era tá é a
solução é é ainda na verdade o que vai decidir como você vai mapear É depende da pergunta que você faz então às vezes é Incomum eu querer saber se ele é particular ou empresa às vezes eu tô trabalhando só com empresa eu entro nessa tabela aqui às vezes eu tô jogando particular nessa tabela aqui então esse é um cenário que esse mapeamento pode ser bom mas se for um cenário que eu queira me perguntar ele é particular uma empresa aí pode ser melhor botar uma tabela só Então depende muito do cenário que eu tiver tá
bom como a gente já tá muito atrasado eu Não vou deixar esse exercício para vocês entregarem e a gente já vai entrar no Lab Tá certo você já podem entregar os exercícios de vocês Oi Deixa eu só parar aqui o negócio só um minutinho [Música]