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