刚刚接触 办公自动化开发,在选择发邮件的接收对象时(我用的是带 checkbox 的 treeview),数据库表结构是如何设计的
比如以下是接收邮件部门的 treeview (每个节点前均有checkbox)结构:------------------------------------------------
东北某某有限总公司
公司领导 总经理
赵小明
副总经理
李小江
孙国金
赵明
总经理工作部 主任
李敏
副主任
刘红
专责
赵小
管清
李汪
安全生产部
主任
田力
副主任
林强
生产管理
生产主管
一线产品主管
李国柜
销售主管
赵田男
销售经理
李机强假设我是 安全生产部--生产管理--生产主管--销售主管 -- 赵田男,当我登录后,我如何能收到发给我的邮件?情况一:如果某人选择邮件收件人时,在“东北某某有限总公司”前打了勾
情况二:如果某人选择邮件收件人时,在“安全生产部”前打了勾
情况三:如果某人选择邮件收件人时,在“生产管理”前打了勾
情况四:如果某人选择邮件收件人时,在“销售主管”前打了勾
情况五:如果某人选择邮件收件人时,在“赵田男”前打了勾以上 5 种情况 ,当赵田男登录时,均应能收到此邮件这样的情况,数据库要如何设计才能比较合理。
或者说,假设此 treeview 有更深层次的节点,子节如点何才能收到别人发给其上所有父节的点邮件呢?
比如以下是接收邮件部门的 treeview (每个节点前均有checkbox)结构:------------------------------------------------
东北某某有限总公司
公司领导 总经理
赵小明
副总经理
李小江
孙国金
赵明
总经理工作部 主任
李敏
副主任
刘红
专责
赵小
管清
李汪
安全生产部
主任
田力
副主任
林强
生产管理
生产主管
一线产品主管
李国柜
销售主管
赵田男
销售经理
李机强假设我是 安全生产部--生产管理--生产主管--销售主管 -- 赵田男,当我登录后,我如何能收到发给我的邮件?情况一:如果某人选择邮件收件人时,在“东北某某有限总公司”前打了勾
情况二:如果某人选择邮件收件人时,在“安全生产部”前打了勾
情况三:如果某人选择邮件收件人时,在“生产管理”前打了勾
情况四:如果某人选择邮件收件人时,在“销售主管”前打了勾
情况五:如果某人选择邮件收件人时,在“赵田男”前打了勾以上 5 种情况 ,当赵田男登录时,均应能收到此邮件这样的情况,数据库要如何设计才能比较合理。
或者说,假设此 treeview 有更深层次的节点,子节如点何才能收到别人发给其上所有父节的点邮件呢?
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO--调用函数查询002及其所有子节点
SELECT a.*
FROM tb a,f_Cid('002') b
WHERE a.ID=b.ID
/*--结果
ID PID Name
------ ------- ----------
002 001 烟台市
004 002 招远市
--*/
楼主的需求,应该在很多OA系统中都有过实现。说明一下其中一个大致的实现方式:
发送邮件时,不论选定机构名称还是指定的收件人,都对整个组织管理机构--人员对照表做一次树的遍历,查询出所有相关的人员信息,然后将该邮件的编号与人员信息列表insert到收件表中。
---------------------------------------
树的遍历,具体实现方法见1楼。
发送邮件时,不论选定机构名称还是指定的收件人,都对整个组织管理机构--人员对照表做一次树的遍历,查询出所有相关的人员信息,然后将该邮件的编号与人员信息列表insert到收件表中