簡體   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