设计一个能存放部门信息的数据表 ,实际情况是:任意一个部门都有可能有子部门,或子部门下还有子部门。(要求可以支持1到n个层次, 10级以内也可以 )。
请讲出你的设计依据或想法,这样设计有什么好处?帮我想想办法了~~
谢谢!

解决方案 »

  1.   

    就一个表就好。
    比如这样
    orgid int
    superid int
    orgname varchar(64)
    ...等等其它字段其中orgid,部门id,主键
    superid,指向它的上级部门的orgid,如果这个部门没有上级部门(即是说是第一层)可以设为0-------
    以后你可能想得到某一个部门下的第一层部门,可以通过
    select * from org where superid=xxx来得到。
    然后写个递归调用的自定义函数,这样用select orgid from GetAllSubOrg(xxx) 就能得到xxx部门下的所有子部门。
     
    CREATE FUNCTION [dbo].GetAllSubOrg (@orgId int)  
    RETURNS @orglist TABLE (orgid int) 
    AS  
    BEGIN
    DECLARE @subOrgId int
    insert into @orglist select orgid from org where superid=@orgId --查询子机构的用户
    DECLARE orgs CURSOR LOCAL FOR
    select orgid from org where superid=@orgId
    /* 打开游标 */
    OPEN orgs
    WHILE @@ERROR=0 BEGIN
    FETCH NEXT FROM orgs INTO @subOrgId;
    if @@FETCH_STATUS <> 0
    break;
    insert into @orglist select orgid from GetAllSubOrg(@subOrgId) 
    end
    --关闭、释放游标
    CLOSE orgs
    DEALLOCATE orgs
    return
    END
      

  2.   

    还是两个表比较好吧。
    一个存放关系的,比如父id和子id
    比如表内容为:
    0  1
    0  2
    1  3
    1  4
    ....另一个表存放信息的,如id、.......(通过id关联)
      

  3.   

    一个表
    table department{
    id,
    parentid,
    ...
    department information
    ...
    }
    但是查询起来不方便