split_node_tags: Implement key constraints.
[rails.git] / db / migrate / 015_key_constraints.rb
1 class KeyConstraints < ActiveRecord::Migration
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     # Foreign keys (between ways, way_tags, way_nodes, etc.)
15     add_foreign_key :current_node_tags, [:id], :current_nodes
16     add_foreign_key :node_tags, [:id, :version], :nodes
17
18     add_foreign_key :current_way_tags, [:id], :current_ways
19     add_foreign_key :current_way_nodes, [:id], :current_ways
20     add_foreign_key :way_tags, [:id, :version], :ways
21     add_foreign_key :way_nodes, [:id, :version], :ways
22
23     add_foreign_key :current_relation_tags, [:id], :current_relations
24     add_foreign_key :current_relation_members, [:id], :current_relations
25     add_foreign_key :relation_tags, [:id, :version], :relations
26     add_foreign_key :relation_members, [:id, :version], :relations
27
28     # Foreign keys (between different types of primitives)
29     add_foreign_key :current_way_nodes, [:node_id], :current_nodes, [:id]
30
31     # FIXME: We don't have foreign keys for relation members since the id
32     # might point to a different table depending on the `type' column.
33     # We'd probably need different current_relation_member_nodes,
34     # current_relation_member_ways and current_relation_member_relations
35     # tables for this to work cleanly.
36   end
37
38   def self.down
39     raise IrreversibleMigration.new
40   end
41 end