【发布时间】:2014-05-29 12:53:29
【问题描述】:
我正在构建一个小型应用程序,此时我正在创建数据库架构。我将 PostgreSQL 与 Sequel 一起使用,并且进行了两次迁移:
Sequel.migration do
change do
Sequel::Model.db.run 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
create_table :user do
String :id, :type => :uuid, :primary_key => true, :default => Sequel.function(:uuid_generate_v4)
DateTime :created_at
DateTime :updated_at
index :id, :unique => true
end
end
end
Sequel.migration do
change do
Sequel::Model.db.run 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
create_table :location do
String :id, :type => :uuid, :primary_key => true, :default => Sequel.function(:uuid_generate_v4)
foreign_key :user_id, :user, :type => :uuid
String :name, :unique => true, :null => false # TODO: unique, per user
Float :latitude, :null => false
Float :longitude, :null => false
DateTime :created_at
DateTime :updated_at
index :id, :unique => true
full_text_index :name, :index_type => :gist
end
end
end
您可以看到location 表上的name 列是唯一的,但我对此表示怀疑。因为我想对名称建立唯一约束,但是每个用户,所以一个用户只能有一个同名的位置,但在整个表中,许多用户可以有同名的位置(用户和位置之间的关系是一对多)。
我想我在列上添加的unique 约束将使列通常是唯一的,因此在所有用户中,位置名称必须是唯一的。如果是这样,我如何创建一个约束,使 name 在每个用户的基础上都是唯一的?
【问题讨论】:
标签: ruby postgresql database-design unique-constraint sequel