繁体   English   中英

基于Sequelize for postgres中两列的自动增量

[英]Auto-increment based on two columns in Sequelize for postgres

我想在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,
    }
};

您不能使用常规的自动递增方式执行此操作,因为这将需要为每个批次使用不同的顺序。 您可以通过编写一个在插入时触发并在表中查询批处理中当前最大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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM