openstreetmap-website/db/migrate/015_key_constraints.rb
2008-05-04 08:25:29 +00:00

41 lines
1.6 KiB
Ruby

class KeyConstraints < ActiveRecord::Migration
def self.up
# Primary keys
add_primary_key :current_node_tags, [:id, :k]
add_primary_key :current_way_tags, [:id, :k]
add_primary_key :current_relation_tags, [:id, :k]
add_primary_key :node_tags, [:id, :version, :k]
add_primary_key :way_tags, [:id, :version, :k]
add_primary_key :relation_tags, [:id, :version, :k]
add_primary_key :nodes, [:id, :version]
# Foreign keys (between ways, way_tags, way_nodes, etc.)
add_foreign_key :current_node_tags, [:id], :current_nodes
add_foreign_key :node_tags, [:id, :version], :nodes
add_foreign_key :current_way_tags, [:id], :current_ways
add_foreign_key :current_way_nodes, [:id], :current_ways
add_foreign_key :way_tags, [:id, :version], :ways
add_foreign_key :way_nodes, [:id, :version], :ways
add_foreign_key :current_relation_tags, [:id], :current_relations
add_foreign_key :current_relation_members, [:id], :current_relations
add_foreign_key :relation_tags, [:id, :version], :relations
add_foreign_key :relation_members, [:id, :version], :relations
# Foreign keys (between different types of primitives)
add_foreign_key :current_way_nodes, [:node_id], :current_nodes, [:id]
# FIXME: We don't have foreign keys for relation members since the id
# might point to a different table depending on the `type' column.
# We'd probably need different current_relation_member_nodes,
# current_relation_member_ways and current_relation_member_relations
# tables for this to work cleanly.
end
def self.down
raise IrreversibleMigration.new
end
end