注册 登录
编程论坛 SQL Server论坛

建表思路求助

一番宝瓶 发布于 2007-12-17 18:09, 824 次点击
在VC中需要用到按照数据库动态建树。。。

比如树的形式是:

+语言
    -编程语言
       ●VB
      ●C++
    -自然语言
       ●汉语
       ●英语
         ...


普通节点只包含本身信息,而每个最小节点的语言都有具体属性。如节点自然语言包含的信息是“人类通过语音进行交流的方式,分为汉语和英语”,子节点汉语包含信息是“中国人使用的语言;汉字表示等”

我在数据库中建表的时候应该如何分配呢,象下面这样建好像不行

第一章表为语言,主键为“类别”,包含三行数据“编程语言”和“自然语言”

第二张表是自然语言,主键是“类别”包含两行数据“汉语”和“英语”,外键是语言类别,都属于自然语言

第三章表是编程语言,主键是“类别”包含两行数据“C++”和“VB “,外键是语言类别,都属于编程语言
。。。

达人们帮出出注意如何建表。  THX  
1 回复
#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 行)

*/
1