Как добавить составной первичный ключ с Knex.js? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть 2 таблицы.1 вызвал события с идентификатором события и другой таблицей, названной заявками, которые я хочу иметь первичные ключи идентификатора события и идентификатора заявки.Я также использую базу данных PostgreSQL.На данный момент у меня есть внешний ключ, но хотелось бы, чтобы он был первичным ключом в таблице заявок с идентификатором заявки.

knex.schema.createTable('events', function (table) {
  table.increments('id');
  table.string('eventName');
});


knex.schema.createTable('tickets', function (table) {
  table.increments('id');
  table.string('ticketName');

  table.foreign('tickets').references('events_id').inTable('events');
});

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Согласно документации Knex здесь :

primary - column.primary ([constraintName]);table.primary (columns, [constraintName]) При вызове одного столбца этот столбец будет установлен в качестве первичного ключа таблицы.Если вам нужно создать составной первичный ключ, вместо этого вызовите его в таблице с массивом имен столбцов.Имя ограничения по умолчанию равно tablename_pkey, если не указано значение constraintName.

Следовательно, в вашем случае вы можете добавить:

table.primary(['name_of_column_1', 'name_of_column_2']);
0 голосов
/ 03 марта 2019

В вашем случае я бы оставил существующее поле приращений в качестве первичного ключа и добавил бы уникальный индекс для внешнего ключа после создания таблицы.

knex.schema.alterTable('tickets', function(t) {
    t.unique(['events_id'])
})

Если вы хотите составной ключ, сделайте это:

knex.schema.alterTable('tickets', function(t) {
    t.unique(['id','events_id'])
})
...