刚刚接触 办公自动化开发,在选择发邮件的接收对象时(我用的是带 checkbox 的 treeview),数据库表结构是如何设计的
比如以下是接收邮件部门的 treeview (每个节点前均有checkbox)结构:------------------------------------------------
东北某某有限总公司
   
    公司领导            总经理
                    赵小明
            副总经理
                    李小江
                    孙国金
                    赵明
   总经理工作部            主任
                李敏
            副主任
                刘红
            专责
                赵小
                管清
                李汪
  安全生产部
      
           主任
               田力
           副主任
               林强
           生产管理
                   生产主管
                          一线产品主管
                                      李国柜
                          销售主管
                                   赵田男
                   销售经理
                          李机强假设我是 安全生产部--生产管理--生产主管--销售主管 -- 赵田男,当我登录后,我如何能收到发给我的邮件?情况一:如果某人选择邮件收件人时,在“东北某某有限总公司”前打了勾
情况二:如果某人选择邮件收件人时,在“安全生产部”前打了勾
情况三:如果某人选择邮件收件人时,在“生产管理”前打了勾
情况四:如果某人选择邮件收件人时,在“销售主管”前打了勾
情况五:如果某人选择邮件收件人时,在“赵田男”前打了勾以上 5 种情况 ,当赵田男登录时,均应能收到此邮件这样的情况,数据库要如何设计才能比较合理。
或者说,假设此 treeview 有更深层次的节点,子节如点何才能收到别人发给其上所有父节的点邮件呢?                    
                   
  

解决方案 »

  1.   

    --示例,邹老大的。--测试数据
    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  招远市
    --*/
      

  2.   

    mengmou()mengmou() :你发的是什么东西啊,好像跟我说的没有什么关系啊?
      

  3.   

    楼主的需求,应该在很多OA系统中都有过实现。说明一下其中一个大致的实现方式:发送邮件时,不论选定机构名称还是指定的收件人,都对整个组织管理机构--人员对照表做一次树的遍历,查询出所有相关的人员信息,然后将该邮件的编号与人员信息列表insert到收件表中。
      

  4.   

    libin_ftsafe(子陌红尘:当libin告别ftsafe) ( ) 信誉:105    Blog  2007-3-23 11:34:18  得分: 0  
        
    楼主的需求,应该在很多OA系统中都有过实现。说明一下其中一个大致的实现方式:
    发送邮件时,不论选定机构名称还是指定的收件人,都对整个组织管理机构--人员对照表做一次树的遍历,查询出所有相关的人员信息,然后将该邮件的编号与人员信息列表insert到收件表中。
    ---------------------------------------
    树的遍历,具体实现方法见1楼。  
     
      

  5.   

    建成树形结构表;
    发送邮件时,不论选定机构名称还是指定的收件人,都对整个组织管理机构--人员对照表做一次树的遍历,查询出所有相关的人员信息,然后将该邮件的编号与人员信息列表insert到收件表中