首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

分布式数据库的设计与兑现

2012-12-30 
分布式数据库的设计与实现现在需要有一个数据库的分布式方案,分布为国家-省-市-县;数据存放于省级数据中心

分布式数据库的设计与实现
现在需要有一个数据库的分布式方案,分布为国家-省-市-县;数据存放于省级数据中心、国家需要对各省的整个数据进行统计分析

我看了一些理论的东西,但是真正的设计与实现还没有一点眉目?

大家有经验的分享下
[解决办法]

这个可以设计成BOM结构
--参考
--测试数据   深度排序     
  DECLARE   @t   TABLE(ID   char(3),PID   char(3),Name   nvarchar(10))   
  INSERT   @t   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','小分市'   
    
  --深度排序显示处理   
  --生成每个节点的编码累计(相同当单编号法的编码)   
  DECLARE   @t_Level   TABLE(ID   char(3),Level   int,Sort   varchar(8000))   
  DECLARE   @Level   int   
  SET   @Level=0   
  INSERT   @t_Level   SELECT   ID,@Level,ID   
  FROM   @t   
  WHERE   PID   IS   NULL   
  WHILE   @@ROWCOUNT>0   
  BEGIN   
  SET   @Level=@Level+1   
  INSERT   @t_Level   SELECT   a.ID,@Level,b.Sort+a.ID   
  FROM   @t   a,@t_Level   b   
  WHERE   a.PID=b.ID   
  AND   b.Level=@Level-1   
  END   
    
  --显示结果   
  SELECT   a.*   
  FROM   @t   a,@t_Level   b   
  WHERE   a.ID=b.ID   
  ORDER   BY   b.Sort   
  /*--结果   
  ID       PID       Name                 
  ------   ---------   ----------     
  001     NULL   山东省   
  002     001       烟台市   
  004     002       招远市   
  003     001       青岛市   
  005     NULL   四会市   


  006     005       清远市   
  007     006       小分市   
  --*/

--查询指定节点及其所有子节点的函数   
  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     招远市   
  --*/

 

--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t 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','小分市'

--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
    FROM @t a,@t_Level b
    WHERE a.PID=b.ID
        AND b.Level=@Level-1
END

--显示结果
SELECT SPACE(b.Level*2)+'
[解决办法]
--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort


/*--结果

[解决办法]
--山东省
  
[解决办法]
--烟台市
    
[解决办法]
--招远市
  
[解决办法]
--青岛市

[解决办法]
--四会市
  
[解决办法]
--清远市
    
[解决办法]
--小分市
--*/


[解决办法]
引用:
现在需要有一个数据库的分布式方案,分布为国家-省-市-县;数据存放于省级数据中心、国家需要对各省的整个数据进行统计分析

我看了一些理论的东西,但是真正的设计与实现还没有一点眉目?

大家有经验的分享下

你按照国家统一的行政编码进行数据的管理就行了.

http://www.ahip.cn/tsg/zyly/xzqdm.htm
GB2260中华人民共和国行政区划代码

[解决办法]
另外,各省需要将数据定时上报到你所谓的国家信息中心.
[解决办法]
学习中.........
[解决办法]
数据集成,数据同步
[解决办法]
引用:
SQL code这个可以设计成BOM结构--参考
--测试数据   深度排序DECLARE@tTABLE(IDchar(3),PIDchar(3),Namenvarchar(10))INSERT@tSELECT'001',NULL   ,'山东省'UNIONALLSELECT'002','001','烟台市'UNIONALLSELECT'004','002','招远市'UNIONALLSELECT?-

貌似跑題了
[解决办法]
分布式数据库?学习。
[解决办法]
乌龟可以分享这方面的经验
[解决办法]
期待。

貌似有什么水平分布,垂直分布这东西吧。
[解决办法]
期待乌龟大侠出手
[解决办法]
帮顶

[解决办法]
你这个应该建立水平式分布,按照国家数据管理规定建立.

你可以看看下面的例子,为水平式分布和垂直分布:

比如学生表student:
---------------------
该数据位于A:
id  name  class
1   a1    c1
2   a2    c2
3   a3    c3

该数据位于B:
id  name  class
4   a4    c4
5   a5    c5
6   a6    c6

以上为水平式分布

---------------------------
id  name  class
1   a1  
[解决办法]
  c1
2   a2  
[解决办法]
  c2
3   a3  
[解决办法]
  c3
4   a4  
------解决方案--------------------


  c4
5   a5  
[解决办法]
  c5
6   a6  
[解决办法]
  c6

左边位于A,右边位于B,这就是垂直分布。

以上只是一个个人见解。

热点排行
Bad Request.