自动递增字段,取决于另一个字段

时间:2013-12-27 19:44:03

标签: sql postgresql h2

我有两个模型,A和B.A有很多B.最初,A和B都有一个名为id的自动递增主键字段,B有一个a_id字段。现在我发现自己需要A中每个B的唯一数字序列。我在我的应用程序中跟踪这个,但后来我认为让数据库处理它可能更有意义。我想我可以给B一个复合键,其中第一个组件是a_id,第二个组件是自动递增的,考虑到a_id。因此,如果我插入两个a_id 1和一个a_id 2的记录,那么我会有类似的东西:

a_id | other_id
   1 |        1
   1 |        2
   2 |        1

如果删除了数字较小的ID,则序列不应回收这些数字。所以,如果(1,2)被删除:

a_id | other_id
   1 |        1
   2 |        1

当添加a_id 1的下一条记录时,该表格如下所示:

a_id | other_id
   1 |        1
   2 |        1
   1 |        3

我怎样才能在SQL中执行此操作?有没有理由不做这样的事情?

我正在使用内存H2(测试和开发)和PostgreSQL 9.3(生产)。

1 个答案:

答案 0 :(得分:0)

您的问题的答案是您需要触发器才能获得此功能。但是,您可以创建一个使用row_number()函数的视图:

create view v_table as
    select t.*,
           row_number() over (partition by a order by id) as seqnum
    from table t;

我在呼叫表id的主键。