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表上有一个唯一的约束。