<commit_before>---
version: 1.0.1
title: Associações
---

Nessa seção vamos aprender a utilizar o Ecto para definir e trabalhar com associações entre esquemas.

{% include toc.html %}

## Configuração

Nós vamos construir a aplicação `Friends`, das últimas lições. Você pode referir-se a configuração [aqui](./basics.md) para uma breve recapitulação.

## Tipos de Associações

Existem três tipos de associações que podem ser definidas entre nossos esquemas. Vamos dar atenção ao que elas são e como implementar cada um dos tipos.

### Belongs To/Has Many

Nós estamos adicionando algumas novas entidades ao modelo de domínio da aplicação de exemplo para que seja possível categorizar nossos filmes favoritos. Vamos iniciar com dois esquemas: `Movie` e `Character`. Vamos implementar uma relação "has many/belongs to" entre os dois: Um filme tem vários (has many) personagens e um personagem pertence a (belongs to) um filme.

#### A Migração Has Many

Vamos gerar uma migração para `Movie`:

```console
mix ecto.gen.migration create_movies
```

Abra o arquivo da migração recém gerada e defina a sua função `change`, com o intuito de criar a tabela `movies`:

```elixir
# priv/repo/migrations/*_create_movies.exs
defmodule Friends.Repo.Migrations.CreateMovies do
  use Ecto.Migration

  def change do
    create table(:movies) do
      add :title, :string
      add :tagline, :string
    end
  end<commit_msg>The link not work's it complains a 404 error. (#2252)<commit_after>---
version: 1.0.1
title: Associações
---

Nessa seção vamos aprender a utilizar o Ecto para definir e trabalhar com associações entre esquemas.

{% include toc.html %}

## Configuração

Nós vamos construir a aplicação `Friends`, das últimas lições. Você pode referir-se a configuração [aqui](https://elixirschool.com/pt/lessons/ecto/basics) para uma breve recapitulação.

## Tipos de Associações

Existem três tipos de associações que podem ser definidas entre nossos esquemas. Vamos dar atenção ao que elas são e como implementar cada um dos tipos.

### Belongs To/Has Many

Nós estamos adicionando algumas novas entidades ao modelo de domínio da aplicação de exemplo para que seja possível categorizar nossos filmes favoritos. Vamos iniciar com dois esquemas: `Movie` e `Character`. Vamos implementar uma relação "has many/belongs to" entre os dois: Um filme tem vários (has many) personagens e um personagem pertence a (belongs to) um filme.

#### A Migração Has Many

Vamos gerar uma migração para `Movie`:

```console
mix ecto.gen.migration create_movies
```

Abra o arquivo da migração recém gerada e defina a sua função `change`, com o intuito de criar a tabela `movies`:

```elixir
# priv/repo/migrations/*_create_movies.exs
defmodule Friends.Repo.Migrations.CreateMovies do
  use Ecto.Migration

  def change do
    create table(:movies) do
      add :title, :string
      add :tagline, :string
    end
  end
{'fraction_non_alphanumeric': 0.07325501036627505, 'fraction_numerical': 0.004492052522460262, 'mean_word_length': 4.254083484573503, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4309394', 'n_tokens_mistral': 1025, 'n_tokens_neox': 977, 'n_words': 382}