Postgresql 如何使用Knex.js添加复合主键?

Postgresql 如何使用Knex.js添加复合主键?,postgresql,knex.js,composite-primary-key,Postgresql,Knex.js,Composite Primary Key,我有两张桌子。我用一个事件ID调用了事件,另一个表叫做tickets,我希望它的主键是event ID和ticket ID。我还使用了一个PostgreSQL数据库。目前,我将其作为外键,但希望将其作为具有票证ID的票证表中的主键 knex.schema.createTable('events',函数(table){ 表1.增量(“id”); 字符串('eventName'); }); knex.schema.createTable('tickets',函数(表){ 表1.增量(“id”); t

我有两张桌子。我用一个事件ID调用了事件,另一个表叫做tickets,我希望它的主键是event ID和ticket ID。我还使用了一个PostgreSQL数据库。目前,我将其作为外键,但希望将其作为具有票证ID的票证表中的主键

knex.schema.createTable('events',函数(table){
表1.增量(“id”);
字符串('eventName');
});
knex.schema.createTable('tickets',函数(表){
表1.增量(“id”);
table.string('ticketName');
表.国外('tickets')。参考('events_id')。表内('events');
});

在您的情况下,我会保留现有的增量字段作为主键,并在创建表后在外键上添加唯一索引

knex.schema.alterTable('tickets',函数(t){
t、 唯一(['events_id']))
})
如果需要复合密钥,请执行以下操作:

knex.schema.alterTable('tickets',函数(t){
t、 唯一(['id','events\u id']))
})

根据Knex的文件:

primary-column.primary([constraintName]);表2.主要(列, [constraintName])在单个列上调用时,它将设置 列作为表的主键。如果您需要创建一个 复合主键,在具有列数组的表上调用它 取而代之的是名字。约束名称默认为tablename_pkey,除非 指定了constraintName

因此,在您的情况下,您可以添加:

table.primary(['name_of_column_1','name_of_column_2']);

使用您的示例,我认为您有两种选择:

选项1(将id用作主键并添加唯一约束):

knex.schema.createTable('events',函数(table){
表.增量('id').primary();
字符串('eventName');
});
knex.schema.createTable('tickets',函数(表){
表.增量('id').primary();
table.string('ticketName');
表.integer('event_id')。引用('id')。inTable('events');
表.unique(['id','event_id']);
});
选项2(将两个ID用作复合主键):

knex.schema.createTable('events',函数(table){
表.增量('id').primary();
字符串('eventName');
});
knex.schema.createTable('tickets',函数(表){
表1.增量(“id”);
table.string('ticketName');
表.integer('event_id')。引用('id')。inTable('events');
表1.primary(['id','event_id']);
});

但你没有回答这个问题