diff --git a/backend/app/models/post_similarity.rb b/backend/app/models/post_similarity.rb index a753518..0f86550 100644 --- a/backend/app/models/post_similarity.rb +++ b/backend/app/models/post_similarity.rb @@ -1,4 +1,6 @@ class PostSimilarity < ApplicationRecord + self.primary_key = :post_id, :target_post_id + belongs_to :post, class_name: 'Post', foreign_key: 'post_id' belongs_to :target_post, class_name: 'Post', foreign_key: 'target_post_id' end diff --git a/backend/app/models/tag_similarity.rb b/backend/app/models/tag_similarity.rb index d983409..7a6d252 100644 --- a/backend/app/models/tag_similarity.rb +++ b/backend/app/models/tag_similarity.rb @@ -1,4 +1,6 @@ class TagSimilarity < ApplicationRecord + self.primary_key = :tag_id, :target_tag_id + belongs_to :tag, class_name: 'Tag', foreign_key: 'tag_id' belongs_to :target_tag, class_name: 'Tag', foreign_key: 'target_tag_id' end diff --git a/backend/db/migrate/20260121024000_change_post_similarities_to_composite_pk.rb b/backend/db/migrate/20260121024000_change_post_similarities_to_composite_pk.rb new file mode 100644 index 0000000..1b86e30 --- /dev/null +++ b/backend/db/migrate/20260121024000_change_post_similarities_to_composite_pk.rb @@ -0,0 +1,43 @@ +class ChangePostSimilaritiesToCompositePk < ActiveRecord::Migration[8.0] + def up + execute <<~SQL + ALTER TABLE + post_similarities + MODIFY COLUMN id BIGINT NOT NULL + ; + SQL + + execute <<~SQL + ALTER TABLE + post_similarities + DROP PRIMARY KEY + ; + SQL + + remove_column :post_similarities, :id + + execute <<~SQL + ALTER TABLE + post_similarities + ADD PRIMARY KEY (post_id, target_post_id) + ; + SQL + end + + def down + execute <<~SQL + ALTER TABLE + post_similarities + DROP PRIMARY KEY + ; + SQL + + execute <<~SQL + ALTER TABLE + post_similarities + ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT FIRST + , ADD PRIMARY KEY (id) + ; + SQL + end +end diff --git a/backend/db/migrate/20260121024800_change_tag_similarities_to_composite_pk.rb b/backend/db/migrate/20260121024800_change_tag_similarities_to_composite_pk.rb new file mode 100644 index 0000000..7a8bfc0 --- /dev/null +++ b/backend/db/migrate/20260121024800_change_tag_similarities_to_composite_pk.rb @@ -0,0 +1,43 @@ +class ChangeTagSimilaritiesToCompositePk < ActiveRecord::Migration[8.0] + def up + execute <<~SQL + ALTER TABLE + tag_similarities + MODIFY COLUMN id BIGINT NOT NULL + ; + SQL + + execute <<~SQL + ALTER TABLE + tag_similarities + DROP PRIMARY KEY + ; + SQL + + remove_column :tag_similarities, :id + + execute <<~SQL + ALTER TABLE + tag_similarities + ADD PRIMARY KEY (tag_id, target_tag_id) + ; + SQL + end + + def down + execute <<~SQL + ALTER TABLE + tag_similarities + DROP PRIMARY KEY + ; + SQL + + execute <<~SQL + ALTER TABLE + tag_similarities + ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT FIRST + , ADD PRIMARY KEY (id) + ; + SQL + end +end diff --git a/backend/db/schema.rb b/backend/db/schema.rb index a67d0dd..ee14689 100644 --- a/backend/db/schema.rb +++ b/backend/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2026_01_18_144400) do +ActiveRecord::Schema[8.0].define(version: 2026_01_21_024800) do create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false @@ -55,7 +55,7 @@ ActiveRecord::Schema[8.0].define(version: 2026_01_18_144400) do t.index ["tag_id"], name: "index_nico_tag_relations_on_tag_id" end - create_table "post_similarities", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + create_table "post_similarities", primary_key: ["post_id", "target_post_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "post_id", null: false t.bigint "target_post_id", null: false t.float "cos", null: false @@ -126,7 +126,7 @@ ActiveRecord::Schema[8.0].define(version: 2026_01_18_144400) do t.index ["name"], name: "index_tag_names_on_name", unique: true end - create_table "tag_similarities", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + create_table "tag_similarities", primary_key: ["tag_id", "target_tag_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "tag_id", null: false t.bigint "target_tag_id", null: false t.float "cos", null: false