数据表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

EXEC sp_DJAreas_newId @id output,@ParentId


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].[ sp_DJAreas_newId]
@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


数据表结构 tblDJTreeCode(id)
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、多状态值
   操作符: |, ^, &

猜你喜欢

转载自huangliangbao.iteye.com/blog/2267969