Define team table

Hello. I’m not sure which way of defining table is better.

What I’d like to do

I’d like to define a teams table.
It should have name, size, and members which should have array of user_id. I have defined users table.

Implementation

So I think the migration file should be like

def change do
  create table(:teams) do
    add :name, :string, default: ""
    add :members, {:array, :integer}
    add :size, :integer

    timestamps()
  end
end

But in the table, members does not refer users table. So I’m wondering that it’s better to define teams and members.

teams

def change do
  create table(:teams) do
    add :name, :string, default: ""
    add :size, :integer

    timestamps()
  end
end

members

def change do
  create table(:members) do
    add :team_id, references(:teams, on_delete: :delete_all)
    add :member_id, references(:users, on_delete: :delete_all)

    timestamps()
  end
end

Which do you think better?

1 Like

Is it possible for a user to be a member of more than one team? If not, i would just add team_id to users. If it’s possible, I prefer to implement M:M through proxy table(you’ve called them as members table)

1 Like

Yes! a user can be a member of multiple teams.
Thank you :smile:

1 Like