Автоинкремент на основе двух столбцов в Sequelize для postgres - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу хранить данные учеников следующим образом в postgres, где номер рулона должен автоматически увеличиваться в зависимости от партии.

Я хочу знать, как реализовать это в Sequelize.

id       batch         rollno      name
---------------------------------------------------------------
1         A             1000        John
2         A             1001        Javed
3         A             1002        Jake
4         B             1000        Jose
5         B             1001        James
6         A             1003        Jerry

Вот модель, которую я создал.

var Student = sequelize.define('student', {
    id: {
        type: DataTypes.INTEGER(11),
        allowNull: false,
        primaryKey: true,
        autoIncrement: true
    },
    batch: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    rollno: {
        type: DataTypes.INTEGER(11),
        allowNull: true,
        autoIncrement: true,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: true,
    }
};

1 Ответ

0 голосов
/ 28 декабря 2018

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

Вместо этого вы можете рассчитатьRollno при запуске запроса:

CREATE TABLE test (
  id serial,
  batch text
);

INSERT INTO test (batch) VALUES ('A');

SELECT
  id,
  batch,
  999 + rank() OVER (PARTITION BY batch order by id) as rollno
FROM test
order by id

https://www.db -fiddle.com / f / vbVpvhfpzuhxKqQfNWsQVc / 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...