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

计算方法中的经典数据结构怎么在数据库中保存,例如最短路径

2012-03-23 
计算方法中的经典数据结构如何在数据库中保存,例如最短路径在学习的时候,了解了许多的经典数据结构、计算方

计算方法中的经典数据结构如何在数据库中保存,例如最短路径
在学习的时候,了解了许多的经典数据结构、计算方法。目前在工作中,一个业务系统需要描述许多节点的前后次序,有些像那个工作流。不知道有没有业界比较认可的针对此种问题的经典解决方案,主要是如何设计数据库结构来保存这些信息。
  谢谢!

[解决办法]

SQL code
--参考一下实例--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL DROP TABLE [tb]GOCREATE TABLE [tb](GUID INT IDENTITY,[col1] NVARCHAR(10),[col2] NVARCHAR(20))INSERT [tb]SELECT N'A','01' UNION ALLSELECT N'B','01.01' UNION ALLSELECT N'C','01.01.01' UNION ALLSELECT N'F','01.01.01.01' UNION ALLSELECT N'E','01.01.01.02' UNION ALLSELECT N'D','01.01.01.03' UNION ALLSELECT N'O','02' UNION ALLSELECT N'P','02.01' UNION ALLSELECT N'Q','02.01.01' GO--SELECT * FROM [tb]-->SQL查询如下:---另一种方法;WITH T AS(   SELECT *,PATH=CAST([COL1] AS VARCHAR(1000)) FROM TB A       WHERE NOT EXISTS(        SELECT 1 FROM TB      WHERE A.COL2 LIKE COL2+'%'    AND LEN(A.COL2)>LEN(COL2))   UNION ALL   SELECT A.*,CAST(PATH+'-->'+A.COL1 AS VARCHAR(1000))   FROM TB A    JOIN T B         ON A.COL2 LIKE B.COL2+'%'            AND LEN(A.COL2)-3=LEN(B.COL2))SELECT * FROM T ORDER BY LEFT(COL2,2)/*GUID        COL1        COL2                  PATH----------- ---------- -------------------- --------------------1           A          01                   A2           B          01.01                A-->B3           C          01.01.01             A-->B-->C4           F          01.01.01.01          A-->B-->C-->F5           E          01.01.01.02          A-->B-->C-->E6           D          01.01.01.03          A-->B-->C-->D7           O          02                   O8           P          02.01                O-->P9           Q          02.01.01             O-->P-->Q(9 行受影响)*/;WITH T AS(    SELECT *,CAST(COL1  AS VARCHAR(1000)) AS PATH    FROM  TB     WHERE COL2 NOT LIKE '%.%'    UNION ALL    SELECT A.*,CAST(B.PATH+'-->'+A.COL1 AS VARCHAR(1000))    FROM TB A,T B    WHERE A.COL2 LIKE B.COL2+'.[01-99][01-99]')SELECT * FROM T ORDER BY LEFT(COL2,2)/*GUID        COL1        COL2                  PATH----------- ---------- -------------------- --------------------1           A          01                   A2           B          01.01                A-->B3           C          01.01.01             A-->B-->C4           F          01.01.01.01          A-->B-->C-->F5           E          01.01.01.02          A-->B-->C-->E6           D          01.01.01.03          A-->B-->C-->D7           O          02                   O8           P          02.01                O-->P9           Q          02.01.01             O-->P-->Q (9 行受影响)*/ 

热点排行