在实际工作中,经常碰到需要多级目录的情况,例如设计一个论坛,它的版面是分级的,而且为了灵活扩展,这种分级是没有限制的,也就是说设计者,不限制用户设定多少级目录。
针对这种情况,我提出的设计方案如下,先设计如下的Table(以SQL Server为例)
CREATE TABLE [版面表] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[版面名称] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[版面级别] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[上级版面id] [int] NOT NULL
) ON [PRIMARY]
其中顶级版面的上级版面id就是它自己的版面id
输入如下数据:
id
版面名称 版面级别
上级版面id
1
英语学习
1
1
2
四六级学习
2
1
3
GRE
2
1
4
GRE作文
3
3
5
GRE词汇
3
3
6
GRE阅读
3
3
7
GRE填空
3
3
8
GRE作文互评
4
4
9
GRE作文提纲
4
4
10
TOEFL
2
1
11
TOEFL作文
3
10
12
TOEFL听力
3
10
13
TOEFL阅读
3
10
14
TOEFL语法
3
10
15
体育
1
15
16
足球
2
15
17
中国足球
3
16
18
世界足球
3
16
19
篮球
2
15
20
CBA
3
19
21
NBA
3
19
创建如下的存储过程来读取某版面的所有上级版面id
--创建某版面遍历上级目录的存储过程
CREATE PROCEDURE TraverseByName
@name varchar(30) --版面名称
AS
declare @i int --级别循环变量
declare @str varchar(30)--临时字符串变量