应该如何实现这个编码?
在数据库中有一个地区表t_Area,有如下字段
ID:地区在表中的唯一标志号,从一个Sequence取得,仅在内部使用
Code:地区的编码,由用户填写
Name:地区的名称,由用户填写
Parent:上级地区的ID,顶级地区该字段值为Null
HelperCode:辅助编码,由系统自动填写,仅在内部使用
可以看出,该表用ID和Parent字段实现了一个树形结构。但仅用这两个字段实现树形结构也有不足的地方,如查询某个地区下所有子地区,Sql语句就比较麻烦了。所以我设计了HelperCode字段来实现快速查询。
HelperCode的编码规则如下:
1.该码是变长码,共5级
2.每级是定长的3位,取值为001~999
3.编码不可以重复
这样查询某个地区下的所有子地区,只要用一个like条件就可以了,如HelperCode like '001002%'。
现在我填写HelperCode的方法是:
1.用户在客户端为某个节点增加一个子节点时
2.取得该节点的直接子节点中HelperCode最大者
3.将该值增加1作为新增的子节点的HelperCode
这种方式的弊端在于并发处理时,可能两个客户端同时在树上增加节点,可能新增的节点会使用同一个HelperCode。我想把这个编码的生成过程移到数据库中实现,把它写到一个存储过程中,但同样可能存在多个用户同时调用的问题。我应该怎样解决呢?或者这个方案有没有更好的实现方法了?