23 lines
1.1 KiB
Ruby
23 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class CreateVulnerabilityIssueLinks < ActiveRecord::Migration[5.2]
|
|
DOWNTIME = false
|
|
|
|
def change
|
|
create_table :vulnerability_issue_links do |t|
|
|
# index: false because idx_vulnerability_issue_links_on_vulnerability_id_and_issue_id refers the same column
|
|
t.references :vulnerability, null: false, index: false, foreign_key: { on_delete: :cascade }
|
|
# index: true is implied
|
|
t.references :issue, null: false, foreign_key: { on_delete: :cascade }
|
|
t.integer 'link_type', limit: 2, null: false, default: 1 # 'related'
|
|
t.index %i[vulnerability_id issue_id],
|
|
name: 'idx_vulnerability_issue_links_on_vulnerability_id_and_issue_id',
|
|
unique: true # only one link (and of only one type) is allowed
|
|
t.index %i[vulnerability_id link_type],
|
|
name: 'idx_vulnerability_issue_links_on_vulnerability_id_and_link_type',
|
|
where: 'link_type = 2',
|
|
unique: true # only one 'created' link per vulnerability is allowed
|
|
t.timestamps_with_timezone
|
|
end
|
|
end
|
|
end
|