Anda di halaman 1dari 5

Bacharelado em

Sistemas de Informação

Avaliação de Desempenho
de Sistemas

Tutorial sobre o relacionamento entre


modelos

Aluno​: Stewen Soares Ascari

Período​: 2017.1

Professor​: Yuri malheiros

Novembro, 2017
Em seus projeto no Django você vai precisar utilizar os modelos que são oferecidas para
que a sua aplicação se comunique com o banco de dados, dependendo da sua aplicação
você pode usar um dos três tipos de relacionamento que existe entre modelos.

Essas formas de definição dos relacionamento que existe no django são para que você
consiga deixar em harmonia os relacionamentos das tabelas no banco de dados. Como
falado antes, existem três forma de definir os relacionamentos, que são: one to one ( um
para um), ​many to one​ ( muitos para um) e​ many to many​ ( muitos para muitos).

Bom, vamos para a explicação dessas três formas.

Na sua aplicação vai ter uma file chamado ​models.py e é lá que você vai fazer seus
modelos para a sua aplicação. Dentro do file você define os modelos que terá a sua
aplicação( as classes), como por exemplo: quero fazer um modelo pessoas e outra de cpf, o
relacionamento desses modelos que tô criando vai ser ​one to one( um para um)​,
percebe-se que vai existir apenas uma pessoa para um cpf e um cpf para uma pessoa,
certo? se caso ainda não entendeu pense da seguinte forma, o cpf é como se fosse uma
coisa única de cada uma das pessoas. veja a figura a seguir

Figura I- modelos pessoas e cpf

Pronto, os modelos foram criados mas ainda não tem relação entre eles, para que tenha um
relacionamento você vai usar o atributo ​OneToOneField​. ​Ele deve ser usado como
qualquer outro Field, ou seja, deve ser incluído como qualquer atributo de classe.

Percebe-se que existe outra dúvida, qual dos modelos criados se deve colocar o
relacionamento( já que ele deve ser colocado no modelo como qualquer atributo de classe)?
Para responder a isso pense o seguinte, no mundo real existe um pessoa que não tem cpf
mas o cpf não vai existir se não tiver uma pessoa vinculada a ele. Pensando dessa forma,
devemos colocar o relacionamento sempre no modelo que é dependente da outra, que no
nosso caso é o cpf. veja o resultado a seguir.

Figura II- aplicando o relacionamento nos modelos

Pronto, você acabou de aprender o primeiro relacionamento dos modelos. :D


O relacionamento dos modelos que quero na minha aplicação agora é ​many to one( vários
para um)​. Vamos fazer o seguinte cenário para entender melhor esse relacionamento: em
uma empresa de ônibus tem vários ônibus mas um ônibus tem apenas uma empresa,
vamos ver como ficou esses modelos.

Figura III- modelos EmpresaBus e Bus

Pronto, os modelos foram criados mas percebe-se que eles estão sem o relacionamento,
para que eles tenham um relacionamento você deve colocar o seguinte atributo:
ForeignKey​. ​Assim como no outro, ele deve ser usado como qualquer outro Field.

Percebe-se que temos o mesmo problema do outro relacionamento, onde devemos incluir o
atributo do relacionamento dos modelos? Bom, não devemos usar a lógica que usamos no
outro, porque mesmo uma empresa não tendo um ônibus ela vai existir e isso se aplica ao
ônibus também. Então, aonde colocar? Nesse caso, devemos colocar sempre no modelo do
muitos.

Voltando para o nosso cenário, esse modelo onde o relacionamento ficaria seria a do
ônibus, porque não tem lógica se tivesse várias empresas para um ônibus e sim vários
ônibus para uma empresa. Vamos ver como ficou o nosso modelo

Figura IV- aplicando o relacionamento nos modelos

Pronto, você acabou de aprender o segundo relacionamento dos modelos. :D

Agora vamos para o nosso último relacionamento dos modelos :/

O relacionamento dos modelos que vamos usar agora na minha aplicação é ​many to
many( muitos para muitos)​. Assim como nos outros, vamos usar um cenário para que
você entenda melhor esse relacionamento. O cenário seria: em um curso vai ter várias
disciplinas e terá também vários alunos, uma disciplina pode ser cursada por vários alunos
e vários alunos pode se cadastrar em um disciplina, aplicando então o relacionamento de
many to many( muitos para muitos)​. Vamos ver como ficou esses modelos
Figura III- modelos Alunos e Disciplinas

Assim como nos outros, eu criei os modelos mas não coloquei nenhum relacionamento
neles, o atributo que devemos colocar para que tenha um relacionamento é
ManyToManyField​. ​Assim como no outro, ele deve ser usado como qualquer outro Field.

O mesmo problema é apresentado aqui, onde devemos colocar ele? devemos seguir a
mesmo lógica que foi mostrada aqui do ​Many to one ​ou a do one to one​? Vamos analisar,
uma disciplina vai existir se não tiver nenhum aluno cursando ela, da mesma forma que vai
existir alunos não cadastrado em uma disciplina, desse jeito podemos tirar a lógica de ​one
to one​.

Como falado antes, uma disciplina não depende dos alunos para existir nem os alunos
depende da disciplina, ou seja, também a do ​many to one não pode ser aplicado. Mas e
agora? qual dos dois modelos devemos colocar o atributo ​ManyToManyField? ​A resposta é
simples, não tem diferença em você colocar em alunos ou em disciplinas, porém, na
documentação do django tem uma referência que diz que você deve colocar no modelo que
for cadastrar no formulário.

Como assim? modelo que for cadastrado no formulário? sim, por exemplo: se eu quero que
uma disciplina mostre os alunos que ta cadastrado nela, eu coloco o atributo de
relacionamento no modelo disciplinas mas se caso eu queira mostrar ao aluno as disciplina
que ele ta cadastrado, eu coloco o atributo de relacionamento no modelo aluno. Então,
podemos dizer que isso vai depender da sua aplicação e o que você vai querer mostrar
nela.

Na minha aplicação, vou querer exibir ao aluno as disciplinas que ele ta cadastrado, então
eu vou colocar o atributo de relacionamento nele. Vamos ver como ficou o nosso modelo

Pronto, agora você tá possibilitado de criar vários relacionamentos entre os modelos, vale
lembrar que esses relacionamento vai depender de cada aplicação, viu? :D
Os relacionamento entre os modelos explicado aqui é uma forma de você entender como é
o relacionamento do banco de dados no Django, também é uma forma de organizar bem as
relações entre seus modelos.

Anda mungkin juga menyukai