defmodule Mobilizon.Repo.Migrations.TagsRelations do use Ecto.Migration def up do create table(:tag_relations, primary_key: false) do add(:tag_id, references(:tags, on_delete: :delete_all), null: false, primary_key: true) add(:link_id, references(:tags, on_delete: :delete_all), null: false, primary_key: true) add(:weight, :integer, null: false, default: 1) end create(constraint(:tag_relations, :no_self_loops_check, check: "tag_id <> link_id")) create(index(:tag_relations, [:tag_id], name: :index_tag_relations_tag_id)) create(index(:tag_relations, [:link_id], name: :index_tag_relations_link_id)) end def down do drop(constraint(:tag_relations, :no_self_loops_check)) drop(index(:tag_relations, [:tags_id])) drop(index(:tag_relations, [:link_id])) drop(table(:tag_relations)) end end