我有两个模型,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(生产)。
答案 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
的主键。