![]() |
#2
purana2007-12-17 18:17
建议看看bom表.
[url]http://hi.bc-cn.net/19176/viewspace-8464[/url] CREATE TABLE t( 科目 NVARCHAR(60), --节点 隶属 NVARCHAR(60), --父节点 ) INSERT INTO t VALUES(N'网络应用',N'计算机') INSERT INTO t VALUES(N'网络安全',N'网络应用') INSERT INTO t VALUES(N'网络编程',N'网络安全') INSERT INTO t VALUES(N'图像设计',N'计算机') INSERT INTO t VALUES(N'PHOTOSHOP',N'图像设计') GO CREATE FUNCTION dbo.TreeResult(@Parent NVARCHAR(60)) RETURNS @T TABLE(科目 NVARCHAR(60),隶属 NVARCHAR(60), Level INT,SORT NVARCHAR(1000)) AS BEGIN DECLARE @Level INT SET @Level=1 INSERT INTO @T SELECT 科目,隶属,@Level,隶属+科目 FROM t WHERE 隶属=@Parent WHILE @@ROWCOUNT>0 BEGIN SET @Level=@Level+1 INSERT INTO @T SELECT a.科目,a.隶属,@Level,b.SORT+a.科目 FROM t a,@t b WHERE a.隶属=b.科目 AND b.Level=@Level-1 END RETURN END GO SELECT Level,SPACE(2*(Level-1))+'|--'+科目 AS 科目 FROM dbo.TreeResult(N'计算机') ORDER BY SORT DROP TABLE t DROP FUNCTION TreeResult /* Level 科目 ----------- --------------- 1 |--图像设计 2 |--PHOTOSHOP 1 |--网络应用 2 |--网络安全 3 |--网络编程 (所影响的行数为 5 行) */ |
比如树的形式是:
+语言
-编程语言
●VB
●C++
-自然语言
●汉语
●英语
...
-编程语言
●VB
●C++
-自然语言
●汉语
●英语
...
普通节点只包含本身信息,而每个最小节点的语言都有具体属性。如节点自然语言包含的信息是“人类通过语音进行交流的方式,分为汉语和英语”,子节点汉语包含信息是“中国人使用的语言;汉字表示等”
我在数据库中建表的时候应该如何分配呢,象下面这样建好像不行
第一章表为语言,主键为“类别”,包含三行数据“编程语言”和“自然语言”
第二张表是自然语言,主键是“类别”包含两行数据“汉语”和“英语”,外键是语言类别,都属于自然语言
第三章表是编程语言,主键是“类别”包含两行数据“C++”和“VB “,外键是语言类别,都属于编程语言
。。。
达人们帮出出注意如何建表。 THX
