Ruby 在具有n:m关系的表中为每个用户创建唯一约束
我刚才问了一个问题,答案很简单 对于在列上创建唯一索引(但基于每个用户),我所要做的就是:Ruby 在具有n:m关系的表中为每个用户创建唯一约束,ruby,postgresql,database-design,unique-constraint,sequel,Ruby,Postgresql,Database Design,Unique Constraint,Sequel,我刚才问了一个问题,答案很简单 对于在列上创建唯一索引(但基于每个用户),我所要做的就是: unique [:user_id, :name] # SQL syntax: UNIQUE (user_id, name) 但是用户表和引用user\u id的表之间的关系是1:n(用户到位置),因此我在引用user\u id的location表中有一个外键。这个问题是关于两个表之间的n:m关系,以及在其中一个表上添加唯一约束 Sequel.migration do change do
unique [:user_id, :name] # SQL syntax: UNIQUE (user_id, name)
但是用户表和引用user\u id
的表之间的关系是1:n(用户到位置),因此我在引用user\u id
的location
表中有一个外键。这个问题是关于两个表之间的n:m关系,以及在其中一个表上添加唯一约束
Sequel.migration do
change do
Sequel::Model.db.run 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
create_table :customer 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 :role do
String :id, :type => :uuid, :primary_key => true, :default => Sequel.function(:uuid_generate_v4)
String :name, :unique => true, :null => false # TODO: unique, per customer
DateTime :created_at
DateTime :updated_at
unique [:customer_id, :name]
index :id, :unique => true
full_text_index :name, :index_type => :gist
end
end
end
上面的代码说明了我提到的两个表具有n:m关系(客户到角色),下表说明了具有两个表的外键的联接表:
Sequel.migration do
change do
Sequel::Model.db.run 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
create_table :customer_role do
String :id, :type => :uuid, :primary_key => true, :default => Sequel.function(:uuid_generate_v4)
foreign_key :customer_id, :customer, :type => :uuid
foreign_key :role_id, :role, :type => :uuid
index :id, :unique => true
end
end
end
我想做的是在角色
表上声明一个唯一约束,例如unique(customer\u id,:name)
。但我无法做到这一点,那么我如何以另一种方式实现这一点呢
我想做的是声明一个唯一的约束,例如
角色表上唯一的(客户id,:名称)。但我不能那样做,
那么,我如何以另一种方式实现这一点呢
问题的实质似乎是role.customer\u id列不存在。事实上,我很确定那个专栏不应该存在,所以那个部分其实很好
至少,你需要
unique [:customer_id, :role_id]
在“客户角色”中 我想,如果您可以删除角色表的Id列,并在{customer\u Id+Role\u Id}上有一个复合主键,您就会得到答案。您是对的,Mike,我后来意识到,我只需要在customer\u Role
join表上有一个唯一的约束。