Merge remote-tracking branch 'upstream/pull/3327'
[rails.git] / db / migrate / 022_key_constraints.rb
1 class KeyConstraints < ActiveRecord::Migration[4.2]
2   def self.up
3     # Primary keys
4     add_primary_key :current_node_tags, [:id, :k]
5     add_primary_key :current_way_tags, [:id, :k]
6     add_primary_key :current_relation_tags, [:id, :k]
7
8     add_primary_key :node_tags, [:id, :version, :k]
9     add_primary_key :way_tags, [:id, :version, :k]
10     add_primary_key :relation_tags, [:id, :version, :k]
11
12     add_primary_key :nodes, [:id, :version]
13
14     # Remove indexes superseded by primary keys
15     remove_index :current_way_tags, :name => :current_way_tags_id_idx
16     remove_index :current_relation_tags, :name => :current_relation_tags_id_idx
17
18     remove_index :way_tags, :name => :way_tags_id_version_idx
19     remove_index :relation_tags, :name => :relation_tags_id_version_idx
20
21     remove_index :nodes, :name => :nodes_uid_idx
22
23     # Foreign keys (between ways, way_tags, way_nodes, etc.)
24     add_foreign_key :current_node_tags, :current_nodes, :column => :id, :name => "current_node_tags_id_fkey"
25     add_foreign_key :node_tags, :nodes, :column => [:id, :version], :primary_key => [:id, :version], :name => "node_tags_id_fkey"
26
27     add_foreign_key :current_way_tags, :current_ways, :column => :id, :name => "current_way_tags_id_fkey"
28     add_foreign_key :current_way_nodes, :current_ways, :column => :id, :name => "current_way_nodes_id_fkey"
29     add_foreign_key :way_tags, :ways, :column => [:id, :version], :primary_key => [:id, :version], :name => "way_tags_id_fkey"
30     add_foreign_key :way_nodes, :ways, :column => [:id, :version], :primary_key => [:id, :version], :name => "way_nodes_id_fkey"
31
32     add_foreign_key :current_relation_tags, :current_relations, :column => :id, :name => "current_relation_tags_id_fkey"
33     add_foreign_key :current_relation_members, :current_relations, :column => :id, :name => "current_relation_members_id_fkey"
34     add_foreign_key :relation_tags, :relations, :column => [:id, :version], :primary_key => [:id, :version], :name => "relation_tags_id_fkey"
35     add_foreign_key :relation_members, :relations, :column => [:id, :version], :primary_key => [:id, :version], :name => "relation_members_id_fkey"
36
37     # Foreign keys (between different types of primitives)
38     add_foreign_key :current_way_nodes, :current_nodes, :column => :node_id, :name => "current_way_nodes_node_id_fkey"
39
40     # FIXME: We don't have foreign keys for relation members since the id
41     # might point to a different table depending on the `type' column.
42     # We'd probably need different current_relation_member_nodes,
43     # current_relation_member_ways and current_relation_member_relations
44     # tables for this to work cleanly.
45   end
46
47   def self.down
48     raise ActiveRecord::IrreversibleMigration
49   end
50 end