第一个难题:两同机器数据库间的同步,不是简单的全部同步,是有点复杂的关系;先说说数据库里面将要实现方式;>>有一台大机中心,它装得有所有数据;这些数据像树一样的,
先是一个顶级根,根下面有些节点,而这么节点下面还会有节点,每个节点下可以有无数的数据;
就是说真的数据有一个ID指向了节点,表明它属性哪个节点;>>除了一台大机中心,其它全是分中心,分中心也有数据库,它的根节点就是大机上面的子节点。所以,同步的话是将分中心的所有数据,同步到大机中心上的某个节点上去。 大机上可以更改数据,分中心也可以更改数据,且可以互相同步。(晕,做为实现来说感觉很为难啊)再说我为难的因素:
  1、我还没有找到一个好的方法来同步数据。
  2、我还不知道如何把一台机器上的数据,同步另一台机器上的子节点去;
  3、同步时候,如果是将原来的数据,再把新的数据全部重新添加进来实现同步,那么我维持表内的惟一ID将受到重创。
  4、同步时,通过惟一ID来实现一条一条的更新,这个不知道有麻烦,而且一边有,一边没有时,更麻烦了
  5、不做即时同步,就是说一台机器数据更新并不马上就同步到另一台机器上去,而是由人工操作(比如,一个按扭,命令,他是不会做数据库备份,还原,.需要用程序来实现,只是运行由他控制)  6、数据复杂度,表的关联,让我有点恐惧,所以先看看下面的数据组成关系,还有权限设计上的难度
数据库设计; 比如:我就用管理人员来说明,这个数据库的相关性;人员是基本数据; 几个人员组成一个家庭,几个家庭组成一个镇。几个镇组成一地区,地区可属于另一地区。比如: 中国
`````````|-->>重庆
`````````|     |---->>沙坪坝
`````````|     |       |--->>XX镇
`````````|     |              |--->>YY家庭
`````````|     |              |        |-->>某人(一些具体的属性:年龄,身高,血性等)
`````````|     |              |        |-->>某人2
`````````|     |              |            .....
`````````|     |              |-->>ZZ家庭
`````````|     |                      |-->>某人
`````````|     |                      |-->>某人2
`````````|     |                          .....
`````````|     |---->>九龙破
`````````|           |---->>MM镇
`````````|                  |---->>11家庭
`````````|                  |          |-->某某1
`````````|                  |           .........
`````````|                  |---->>22家庭
`````````|                             |-->某某人
`````````|
`````````|-->>北京
`````````        |-->北京西
                        |-->>N镇
                        |     |-->>00家庭....//下面还有N个人
                        |-->>M镇
                              |-->>99家庭....//下面还有N个人
                              |-->>NN家庭....//下面还有N个人就是如上所示内容,要管理的数据,其实我要做的比这个还要复杂点,每个家庭有N某人,一个人下面还分几种子类型
 ,子类型还有具体的属性,
麻烦就麻烦在,设计权限,每个用户佣有权限,他有没有对地区有权限,如果有那么对这个地区下所有地区,镇,家庭,
              即人,子类型,子类型属性都有权限,,当然也可以拒绝就是所有相关的全拒绝 如果还是统一设置权限(就是只对地区或镇或家庭)还好点,现在可以单独设置每个子类型,每个子类型属性是否有权限。  事实上子类型的权限不只是有还没有权限,它还包括N个操作,对N个操作是否有权限,
     比如:每个子类型属性有:可见,可防问,可修改,可删除,等等,这只是最低层的子类型属性。
     还有对子类型的权限,而子类型的权限 除了要有子类型属性的所有权限 还要包括是否可添加。
  
    同样,子类型的上级(家庭,镇,子地区)还佣有不同的权限,相对于 最低层(子类型属性)的权限,他的上级的上级   并不是一味包含权限的,比如:地区,只有添加,修改,删除,可见这几个权限,地区并没有防问这样的权限.   就是这样一个关系  现在还需要加入 角色,用户可以属于角色,角色可以属于角色。角色的权限可以继承,类型于WINDOWS操作系统用户权限[color=#FF0000]权限设计难点:
    1、如何让一个用户佣有的权限具体到 子类型属性的子操作 权限上,这个对应关系太庞大了
    2、如何设计权限对应表。
    3、需要使用继承来实现默认佣有权限,而具体拒绝的权限单独记录一条,不可能把每个子类型的属性的子操作权限都
        记录一条,那样的话,就算数据库没有崩溃,我先崩溃了
 权限对应表:现在我的做法是,一个表;
  包括了,用户ID,角色ID,地区ID,镇ID,家庭ID,人ID, 权限值字段(就是由0和1组成的二进制字符串)
          0000101010100101 其中每个0或1代表一个权限,0为拒绝,1为允许。          除了权限值字段不能为空外,前面的所有字段值有一个不能空,这样才满足一个用户权限具体到每一个可能被
    设权限的节点上。     但是我这样的做法,对于角色继承,和地区包含继承,在获取权限时需要很费力,很费力的查找。效率很低的就算查出来了,程序还需要解析每个权限。后面的操作就不说了,可以费力做出来,但是权限设计上,始终觉得我的做法不是很好,或者有隐患,因为我还没有实现的,只是想这样做,怎么实现我还未想通哟
就是在编代码上,我还未做出思路,如何获取到权限 让它对应查询出来的数据上。[/color]

解决方案 »

  1.   

    http://blog.csdn.net/soft_wsx/archive/2009/09/04/4521091.aspx
      

  2.   

    不好意思,我再改吓
    共两个问题:
       1、权限设计,主要设计对应表,用户与具体的操作权限;
      2、多台机器同步数据;;同步是一台机器上的所有数据同步到中心机器某个节点上
      
    一、同步数据问题说明 
       两同机器数据库间的同步,不是简单的全部同步,是有点复杂的关系;   先说说数据库里面将要实现方式;  >>有一台大机中心,它装得有所有数据;这些数据像树一样的, 
    先是一个顶级根,根下面有些节点,而这么节点下面还会有节点,每个节点下可以有无数的数据; 
    就是说真的数据有一个ID指向了节点,表明它属性哪个节点;  >>除了一台大机中心,其它全是分中心,分中心也有数据库,它的根节点就是大机上面的子节点。  所以,同步的话是将分中心的所有数据,同步到大机中心上的某个节点上去。 大机上可以更改数据,分中心也可以更改数据,且可以互相同步。(晕,做为实现来说感觉很为难啊) 
    数据库设计;    比如:我就用管理人员打比方说明,这个数据库的相关性;    人员是基本数据; 几个人员组成一个家庭,几个家庭组成一个镇。几个镇组成一地区,地区可属于另一   地   区。  比如: 中国 
    `````````|-->>重庆 
    `````````|    |---->>沙坪坝 
    `````````|    |      |--->>XX镇 
    `````````|    |              |--->>YY家庭 
    `````````|    |              |        |-->>某人(一些具体的属性:年龄,身高,血性等) 
    `````````|    |              |        |-->>某人2 
    `````````|    |              |            ..... 
    `````````|    |              |-->>ZZ家庭 
    `````````|    |                      |-->>某人 
    `````````|    |                      |-->>某人2 
    `````````|    |                          ..... 
    `````````|    |---->>九龙破 
    `````````|          |---->>MM镇 
    `````````|                  |---->>11家庭 
    `````````|                  |          |-->某某1 
    `````````|                  |          ......... 
    `````````|                  |---->>22家庭 
    `````````|                            |-->某某人 
    `````````| 
    `````````|-->>北京 
    `````````        |-->北京西 
    |-->>N镇 
    |    |-->>00家庭....//下面还有N个人 
    |-->>M镇 
      |-->>99家庭....//下面还有N个人 
      |-->>NN家庭....//下面还有N个人 

     就是如上所示内容,要管理的数据,其实我要做的比这个还要复杂点,每个家庭有N某人,一个人下面还分几种子类型 
    ,子类型还有具体的属性, 
    麻烦就麻烦在,设计权限,每个用户佣有权限,他有没有对地区有权限,如果有那么对这个地区下所有地区,镇,家庭, 
      即人,子类型,子类型属性都有权限,,当然也可以拒绝就是所有相关的全拒绝  如果还是统一设置权限(就是只对地区或镇或家庭)还好点,现在可以单独设置每个子类型,每个子类型属性是否有权限。    事实上子类型的权限不只是有还没有权限,它还包括N个操作,对N个操作是否有权限, 
    比如:每个子类型属性有:可见,可防问,可修改,可删除,等等,这只是最低层的子类型属性。 
    还有对子类型的权限,而子类型的权限 除了要有子类型属性的所有权限 还要包括是否可添加。 
      
    同样,子类型的上级(家庭,镇,子地区)还佣有不同的权限,相对于 最低层(子类型属性)的权限,他的上级的上级    并不是一味包含权限的,比如:地区,只有添加,修改,删除,可见这几个权限,地区并没有防问这样的权限.  数据就是这样一个关系 
    再说我为难的因素: 

      1、我还没有找到一个好的方法来同步数据。    2、我还不知道如何把一台机器上的数据,同步另一台机器上的子节点去;    3、同步时候,如果是将原来的数据,再把新的数据全部重新添加进来实现同步,那么我维持表内的惟一ID将受到重创。    4、同步时,通过惟一ID来实现一条一条的更新,这个不知道有麻烦,而且一边有,一边没有时,更麻烦了    5、不做即时同步,就是说一台机器数据更新并不马上就同步到另一台机器上去,而是由人工操作(比如,一个按扭,命令,他是不会做数据库备份,还原,.需要用程序来实现,只是运行由他控制)    6、因为是多台对应一个中心,所有分中心全向主中心同步数据,因为这个具体的人是用一个表来
      记录的,所有人员都记录到一张表内,而这些表中的数据 是分别来自不同分中心的,  所以这个ID 惟一性就麻烦了,如果全是在中心添加的,ID肯定惟一,或者全是某个子中心添加的
    ID也可以惟一,但是几个子中心同更新了,再更新到主中心上,ID就全乱了,要么冲突了。   只能保证所有子中心上的数据 有惟一的ID,当子中心上传到了主中心,主中心也可以更改,更改
    过后又要反上传给子中心,让子中心知道数据有变动。 这里很绞啊,两边都要改,如何同步? (要么就是每次修改后,主中心上删除原来,重新添加所有 要同步那个子中心的数据。
      要么就是每次修改后,根本ID来对应每一条记录,这样好像行不通,因为ID不能保证惟一)
      7、数据复杂度,表的关联,让我有点恐惧,所以先看看下面的数据组成关系,还有权限设计上的难度 
     
    二、权限设计问题说明   现在还需要加入 角色,用户 . 用户可以属于角色,角色可以属于角色。角色的权限可以继承,类型于WINDOWS操作系统用户权限   权限设计难点: 
    1、如何让一个用户佣有的权限具体到 子类型属性的子操作 权限上,这个对应关系太庞大了 
    2、如何设计权限对应表。 
    3、需要使用继承来实现默认佣有权限,而具体拒绝的权限单独记录一条,不可能把每个子类型的属性的子操作权限都 
    记录一条,那样的话,就算数据库没有崩溃,我先崩溃了    权限对应表:现在我的做法是,一个表; 
    包括了,用户ID,角色ID,地区ID,镇ID,家庭ID,人ID, 权限值字段(就是由0和1组成的二进制字符串) 
      0000101010100101 其中每个0或1代表一个权限,0为拒绝,1为允许。  表中除了权限值字段不能为空外,前面的所有字段值有一个不能空,这样才满足一个用户权限具体到
    每一个可能被    设权限的节点上。  但是我这样的做法,对于角色继承,和地区包含继承,在获取权限时需要很费力,
    很费力的查找。效率很低的     就算查出来了,程序还需要解析每个权限。后面的操作就不说了,可以费力做出来,  但是权限设计上,始终觉得我的做法不是很好,或者有隐患,因为我还没有实现的,只是想这样做,
    怎么实现我还未想通哟    就是在编代码上,我还未做出思路,如何获取到权限 让它对应查询出来的数据上。
      

  3.   

    太长了Q
    你部分可以用bom
      

  4.   

    http://blog.csdn.net/soft_wsx/archive/2009/09/04/4521091.aspx
      

  5.   


    长篇短说:问题归纳如下:
     1、现有N张表,其中有直接关联的,有间接关联的;(a~z 编号 代表表缩写 )
          
          一、类型表
          
          a、Group表( ID, Name, ParentID); ParentID也就是 Group表的 ID; 
          (Group可以属于Group)   //分组表
             
          b、BigClass( ID, Name, GroupID ); GroupID就是 Group表的 ID;
          ( BigClass 属于Group ) //大类表
          
          c、SmallClass( ID, Name, BigClassID); BigClass就是BigClass表的 ID );
          ( SmallClass 属于 BigClass );//小类表
          
          二、数据
          
          d、Device( ID, Name, P1,P2,P3 , SmallClassID ); 
             SmallClassID-->SmallClass.ID //设备表
          
          e、SubDev1( ID, Name, SD1, DeviceID );  
             DeviceID --> Device.ID; //子设备1 表
          
          f、SubDev2( ID, Name, SD2, DeviceID ); 
             DeviceID --> Device.ID;  //子设备2 表
          
          依赖关系
           (f,e)-----> d -----> c ------> b -----> a [a-->a];
           
          三、权限表
          
          g、PS_Type( ID, Name );      //权限类型
          
          h、PS ( ID, Name, PST_ID ); 
             PST_ID ---> PS_Type.ID; //具体权限表
          
          j、Usr( ID, Name, PWD );   //用户
          
          k、UsrRole( ID, Name );      //角色
          
          m、UsrToRole( ID, UsrID, RoleID );  
             UsrID---> Usr.ID, RoleID ---> UsrRole.ID; 
                //用户属于角色表,用户 与 角色是 多对多的关于
                
          
          备注: 
             1、权限类型 示例数据
                PS_Type ( ID, Name )
                
                g ( 0, '全局权限' );   --->即 对所有组,大小类型,设备,子设备统一佣有的权限
                g ( 1, '分组权限' );   --->即可以控制 表 a,就是 Group这个的内容
                g ( 2, '设备权限' );   --->即可以控制 表 d,就是 Device这个的内容
                g ( 3, '子设备1权限');   --->> e, SubDev1
                g ( 4, '子设备2权限');  --->> f, SubDev1
                
             2、权限示例数据
                PS( ID, Name,   PST_ID );
                h ( 1 , '添加',    1     )   ;   //分组 添加权限
                h ( 2 , '删除',  1     ) ;   //分组 删除权限
                h ( 3 , '修改',  1     ) ;   //分组 修改权限
                
                h ( 4 , '防问',    2     ) ;   //设备 防问权限
                h ( 4 , '删除',  2     ) ;   //设备 删除权限
                h ( 4 , '修改',  2     ) ;   //设备 修改权限
                ...
                ...
                类似以上的权限,还有包括对 e(SubDev1), f(SubDev2), 
                   b(BigClass) c(SmallClass) 的权限,一些数据
          
          
          提问:
             
             1、怎样设计出来权限对应表?
                
                要求:
                   a、权限可以是 用户或角色 到 a(分组) 或 b(大类型) 或 
                   c(小类型) 或 d(设备) e(子设备1) f(子设备2)
                            
                      提示:   其中 a,b,c,d,e,f 佣有相同的权限,也存在不同的权限;
                            
                            比如:可见 权限,对所有对象都具有的权限,而 X功能 
                         控制 只有 子设备1 才具有的权限
                                                             Y功能 控制 只有 子设备2 才具有的权限
                                                             
                   b、权限细分程度,可以具体到 子设备1/子设备2 的具体的某个功能上;
                   
                      比如:用户A 有对 A分组下面的 A大类 下面的 A小类 下面的 
                         A设备 下面的 A子设备1 佣有 X功能 的控制权限
                         
                           用户B 没有对 A分组下面的 A大类 下面的 A小类 下面的
                          A设备 下面的 A子设备1 佣有 X功能 的控制权限
                   
                   c、权限设置方便性
                      举例说明:
                         A分组,下面多个大类型,同时大类型下面又有很多小类型,
                         小类型又包括N多设备,子设备等
                         
                         但是 因为a,b,c,e,d,f权限并不统一,
                         所以设置权限时,(A分组只具有 可见 这个权限 ),只能设置
                          A分组的可见 权限,虽然它下面所有
                            
                            对象都具有可见属性,而对于A分组下面的设备的权限,
                            要一个一个的设置相当麻烦;
                         
                         因为一个分组 包含的相关设备相当多;不可能一个设备
                         一个设备的设置权限;
                         
                         所以:在设置分组时,可以同时设置 设备的权限, 子设备的权限;
                         
                         如: 分组 具有 可见 权限属性, 子设备1 具有 
                         X功能控制 权限属性;
                                                子设备2 具有 Y功能控制 权限属性;
                            现有记录;
                               A分组 , A子设备1,A子设备2; A子设备1和A设备2
                                是属于A分组下面的设备(间接属于,中间还夹着大,小类型)
                               
                               当 对A分组 设置权限时,除了可设置 可见,
                               还同时可以设置 X功能控制,Y功能控制;
                               
                               用户只要对A分组 有 X功能控制权限 ,那么  
                            自动佣有了A子设备1的 X功能控制权限
                               
                               (虽然,对分组来说并没有 X功能这个权限,
                            但是它可以代理设置下面的对象权限)
                         
                   
             2、怎么体现出权限的继承关系?
              
                a、用户 属于 角色 时,自动佣有角色的权限
                
                b、角色 属于 角色 时,自动佣有父角色的权限
                
                c、当 角色 或者 用户 对 分组(Group) 有某些 权限 时
                   
                   那么他 同时 佣对这个分组下面所有 大类(BigClass),
                      小类(SmallClass),设备,子设备
                   
                   都佣有相同的权限
                
                d、同时考虑 子设备 或设备 或 大小类 随时可以不使用继承权限;
                   比如: A子设备1,B设备1 属于 T设备; 同时继承了 T设备的权限
                         现在可以去掉A子设备1 的继承权限,单独为 A子设备1 设置不同
                         于 T设备的权限;
                         
                      用过WINDOWS 用户权限的人都应该清楚吧,
                      或者 WINDOWS NTFS 文件夹权限, 文件可以不继承文件夹权限,单独设置权限