(难)一道数据表的设置有关问题,有请数据库专家,邹老师帮助

(难)一道数据表的设置问题,有请数据库专家,邹老师帮助下面的数据是两列IDname--------------------1食品和

(难)一道数据表的设置问题,有请数据库专家,邹老师帮助
下面的数据是两列
      ID                       name
----------       ----------
1                 食品和饮料
      11                 初级品
            111                 主要用于工业
            112                 主要用于家庭消费
      12                 加工品
            121                 主要用于工业
            122                 主要用于家庭消费
2                 未列名的工业供应品
      21                 初级品
      22                 加工品
3                 燃料和润滑油
      32                 加工品
            322                 其他
4                 资本货品(运输设备除外)及其零件和附件
      41                 资本货品(运输设备除外)
      42                 零件和附件
5                 运输设备及其零件和附件
      52                 其他
            522                 非工业用
      53                 零件和附件
6                 未列名的消费品
      61                 耐用品
      62                 半耐用品
      63                 非耐用品
我想回推

如何设置数据表(可设置多个表,有主外键关系即可)

才能更快更好地用select   查询语句得出上面的结果

1                 食品和饮料
      11                 初级品
            111主要用于工业
            112主要用于家庭消费
      12                 加工品
            121主要用于工业
            122主要用于家庭消费


2                 未列名的工业供应品
      21                 初级品
      22                 加工品




[解决办法]
直接定义两列即可.
ID varchar(3),name varchar(50)

[解决办法]
--拷贝成文本显示不好,请在查询分析器里面看.

create table tb(ID varchar(3),name varchar(50))
insert into tb values( '1 ', '食品和饮料 ')


insert into tb values( '11 ', '初级品 ')
insert into tb values( '111 ', '主要用于工业 ')
insert into tb values( '112 ', '主要用于家庭消费 ')
insert into tb values( '12 ', '加工品 ')
insert into tb values( '121 ', '主要用于工业 ')
insert into tb values( '122 ', '主要用于家庭消费 ')
insert into tb values( '2 ', '未列名的工业供应品 ')
insert into tb values( '21 ', '初级品 ')
insert into tb values( '22 ', '加工品 ')
insert into tb values( '3 ', '燃料和润滑油 ')
insert into tb values( '32 ', '加工品 ')
insert into tb values( '322 ', '其他 ')
insert into tb values( '4 ', '资本货品(运输设备除外)及其零件和附件 ')
insert into tb values( '41 ', '资本货品(运输设备除外) ')
insert into tb values( '42 ', '零件和附件 ')
insert into tb values( '5 ', '运输设备及其零件和附件 ')
insert into tb values( '52 ', '其他 ')
insert into tb values( '522 ', '非工业用 ')
insert into tb values( '53 ', '零件和附件 ')
insert into tb values( '6 ', '未列名的消费品 ')
insert into tb values( '61 ', '耐用品 ')
insert into tb values( '62 ', '半耐用品 ')
insert into tb values( '63 ', '非耐用品 ')
go

select id =
case len(id) when 1 then id
when 2 then ' ' + id
when 3 then ' ' + id
end,
name =
case len(id) when 1 then name
when 2 then ' ' + name
when 3 then ' ' + name
end
from tb
drop table tb

/*
id name
------- ------------------------------------------------------
1 食品和饮料
11 初级品
111 主要用于工业
112 主要用于家庭消费
12 加工品
121 主要用于工业
122 主要用于家庭消费
2 未列名的工业供应品
21 初级品
22 加工品
3 燃料和润滑油
32 加工品
322 其他
4 资本货品(运输设备除外)及其零件和附件
41 资本货品(运输设备除外)
42 零件和附件
5 运输设备及其零件和附件
52 其他
522 非工业用
53 零件和附件
6 未列名的消费品
61 耐用品
62 半耐用品
63 非耐用品

(所影响的行数为 24 行)
*/



[解决办法]
你看看这个结果是不是开玩笑的?
[解决办法]
愚见:
如果层数固定且不多,最好的办法是有几层用各个字段+1个id,上级直接列在字段中;如果每层的数据较多最分成多表也是可以的(如下关联)
如果层数不定或多层,最好用三个字段,1id,1名称,1父id,不过查询会复杂