表格Parent
以parent_id varchar
为主键。表Children
以parent_id varchar, sub_id number(2,0)
为主键,parent_id
为外键,链接至Parent
。如何针对每个唯一sub_id
从0
开始生成parent_id
。例如
---------------
Parent |
---------------
parent_id |
---------------
p1 |
---------------
p2 |
---------------
如果我添加3个具有外键的子项(复合主键的一部分)parent_id=p1
,则sub_id
应为0,1,2。然后,当我添加更多具有parent_id=p2
的子项时他们的sub_id
应该从0开始,而不是从3开始。是否有像这样的数据库功能?或者应该通过编码来完成?
答案 0 :(得分:2)
您无法使用数据库功能执行此操作,没有。但是,您应该认真重新考虑为什么您需要这样做 - 并且最好停止。
您必须在代码中执行此操作,这意味着:
sub_id
或查找parent_id
是否存在,然后再插入sub_id
并移动所有其他人sub_id
s大于您删除后删除的记录。< / LI>
这不是很好,每次修改表时你必须完成的工作量增加一倍,并使你的代码复杂化。
为列sub_id
创建一个正常的递增序列更为常见,而不是为每个父级重新设置它。你应该能够完成所有计算。如果你真的觉得你必须有一些重置的东西在这个表的顶部创建一个视图并动态生成你的循环序列,使用分析函数ROW_NUMBER()
:
select parent_id, row_number() over (partition by parent_id order by sub_id) as sub_id
from ...