第一个难题:两同机器数据库间的同步,不是简单的全部同步,是有点复杂的关系;先说说数据库里面将要实现方式;>>有一台大机中心,它装得有所有数据;这些数据像树一样的,
先是一个顶级根,根下面有些节点,而这么节点下面还会有节点,每个节点下可以有无数的数据;
就是说真的数据有一个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、权限设计,主要设计对应表,用户与具体的操作权限;
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为允许。 表中除了权限值字段不能为空外,前面的所有字段值有一个不能空,这样才满足一个用户权限具体到
每一个可能被 设权限的节点上。 但是我这样的做法,对于角色继承,和地区包含继承,在获取权限时需要很费力,
很费力的查找。效率很低的 就算查出来了,程序还需要解析每个权限。后面的操作就不说了,可以费力做出来, 但是权限设计上,始终觉得我的做法不是很好,或者有隐患,因为我还没有实现的,只是想这样做,
怎么实现我还未想通哟 就是在编代码上,我还未做出思路,如何获取到权限 让它对应查询出来的数据上。
你部分可以用bom
长篇短说:问题归纳如下:
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 文件夹权限, 文件可以不继承文件夹权限,单独设置权限