数据表TreeCode设计及使用技巧

一、涉及用户表,角色表
用户表: usertype=2 群众
usertype=4 党员(后台添加或导入)
usertype=8 注册党员
角色表: (userid, treeid, relation)
relation=1 党组织党务工作者
relation=2 党组织书记
relation=4 片区党务工作者
relation=8 片区书记
2. 前端js处理规定
usertype=16 表示用户为党员且某党组织党务工作者
usertype=32 表示用户为党员且某党组织书记
usertype=64 表示用户为党员且片区党务工作者
usertype=128 表示用户为党员且片区书记

二、TreeCode设计及使用技巧
1. 应用场景
项目中,数据存在树型结构,且ID存在一定的生成规则
如:根节点ID为01, 下级ID为0101,0102....(两位一个层级)

2. 使用技巧
原始实现与treecode实现的区别

原始实现
表结构存在:id, parentid
新增下级:id可能是使用guid
treecode实现
表结构只存在:id
新增下级:使用生成treecode的方法。保存id的唯一性。
-----------------------------------------------------
----新增----
ALTER PROC [dbo].[sp_DJAreas_insert]
@Id varchar(50) output,
@ParentId varchar(50),
@Name varchar(255),
@AreaType int,
@PQType int,
@Summary varchar(500),
@LastUserId varchar(32),
@Status int,
@Flags int,
--@IsDelete bit,
@CreateUserId varchar(32)
AS

IF @PQType IS NULL
SELECT @PQType=0
[b]
EXEC sp_DJAreas_newId @id output,@ParentId[/b]

IF EXISTS(SELECT Id FROM tblDJAreas WHERE Name=LTRIM(RTRIM(@Name)) AND Id<>@Id AND IsDelete=0)
RETURN 10014;

INSERT INTO tblDJAreas(Id,Name,AreaType,PQType,Summary,LastModify,LastUserId,Status,Flags,IsDelete,CreateUserId,CreateDate)VALUES(@Id,@Name,@AreaType,@PQType,@Summary,GETDATE(),@LastUserId,@Status,@Flags,0,@CreateUserId,GETDATE())


-----------------------------------------------------

生成treecode的存储过程-----------------
ALTER PROC [dbo].[[b]sp_DJAreas_newId[/b]]
@Id varchar(50) output,
@ParentID varchar(50)=NULL
AS
DECLARE @l INT
SELECT @ParentID = ISNULL(@ParentID,'')
SELECT @l=LEN(@ParentID)
SELECT TOP 1 @ID = @ParentID + t.ID FROM tblDJTreeCode t
LEFT JOIN (
SELECT SUBSTRING(ID,@l+1,2) AS ID FROM tblDJAreas WHERE ID LIKE ISNULL(@ParentID,'')+'__'
) o
ON t.ID=o.ID
WHERE o.ID IS NULL

理解:WHERE o.ID IS NULL 除去tblDJAreas表中已存在的数据,再取tblDJTreeCode中的第一条数据。并返回ID


[b]数据表结构 tblDJTreeCode(id)[/b]
id 为0-9 a-z 共36个字符的两位排列组合,36*36 共有1295种情况
若为三位排列组合,则36*36*36种情况。
-------------------------------------------------
原始实现
表结构存在:id, parentid
查询:对同一张表,需要使用两次,S型连接。
按条件查询:不能灵活的查询本级,下级或所有下级等。

treecode实现
表结构只存在:id
查询:只操作一张表
按条件查询:能灵活的查询本级,下级或所有下级等。
如:where id like '01__' 查询01的下级。
where id like '01____' 查询01的下下级。
where id like '01%' 查询01的所有下级。
说明:_ 是指占位符


三、用户来源(三个入口)
1. 同步党统系统 userType=4
2. 前台用户注册(注册党员,群众) userType=2
3. 区域化组织管理--》用户清单--》新增(注册党员) userType=8
4. 党组织&党员--》管理党员--》新增(注册党员)userType=8


------------------------UI--------------
一、积累UI组件库
二、如何封装成UI组件
------------------------DB--------------
1、多状态值
操作符: |, ^, &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值