在WEB中要建立/管理企业的组织图和职员间的上下级管理关系. 要用什么类型的数据库或者DBMS中怎么设计表结构?

因为有一些其它内容要用到关系型数据库, 所以想利用DBMS来实现.
但是考虑到组织的可扩充性和程序的简单性, 类似LDAP的结构可能会简单些.
请过来人给个建议, 谢谢! 253了
[107 byte] By [steeven-亚洲最有食用价值的专家] at [2008-5-24]
# 1
一般来说这种关系就是一种树形关系,所以呢,我采用的是ORACLE的数据库

这其实关键就是一个数据库结构的建立问题,这是我的数据库结构,只 有部分的,员工的数据就是以这个表为基础进行扩展的:

-- Start of DDL script for DEPARTMENT
-- Generated 18-十月-02 12:35:24 pm
-- from oracled-FRANS:1

-- Table DEPARTMENT

CREATE TABLE department
(
accountid VARCHAR2(10) NOT NULL,
deptid VARCHAR2(10),
deptinid VARCHAR2(10) NOT NULL,
deptname VARCHAR2(50),
address VARCHAR2(50),
phone VARCHAR2(20),
leader VARCHAR2(20),
area NUMBER(8,2) DEFAULT 0,
preday NUMBER(5) DEFAULT 0,
parentid VARCHAR2(10),
fullpath VARCHAR2(200)
)
PCTFREE 10
PCTUSED 40
INITRANS 1
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 131072
NEXT 131072
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 4096
)
/

-- Comments for DEPARTMENT

COMMENT ON TABLE department IS '部门信息'
/

-- Column Comments for DEPARTMENT

COMMENT ON COLUMN department.accountid IS '帐套号'
/
COMMENT ON COLUMN department.address IS '部门地址'
/
COMMENT ON COLUMN department.area IS '面积'
/
COMMENT ON COLUMN department.deptid IS '部门编号'
/
COMMENT ON COLUMN department.deptinid IS '部门内码'
/
COMMENT ON COLUMN department.deptname IS '部门名称'
/
COMMENT ON COLUMN department.fullpath IS '全路径'
/
COMMENT ON COLUMN department.leader IS '部门负责人'
/
COMMENT ON COLUMN department.parentid IS '上级部门'
/
COMMENT ON COLUMN department.phone IS '电话'
/

-- Indexes for DEPARTMENT

CREATE UNIQUE INDEX unique_department_deptid
ON department
( deptid )
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 131072
NEXT 131072
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 4096
)
/

CREATE UNIQUE INDEX unique_department_deptname
ON department
( deptname )
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 131072
NEXT 131072
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 4096
)
/

-- Constraints for DEPARTMENT

ALTER TABLE department
ADD CONSTRAINT pk_department PRIMARY KEY (deptinid)
USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 131072
NEXT 131072
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 4096
)
/

ALTER TABLE department
ADD CONSTRAINT unique_department_deptid UNIQUE (deptid)
/

ALTER TABLE department
ADD CONSTRAINT unique_department_deptname UNIQUE (deptname)
/

-- End of DDL script for DEPARTMENT
# 2
我在sqlserver中用过,实现的结构更楼上的差不多。
zyx_csu-笑呵呵 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 3
可以用J2EE架构。数据操作管理用EJB实现。组织结构好象还是用LDAP比较好。理由:1)结构、使用、扩展。使用LDAP可以比较方便地和现有操作系统或数据库系统结合。比方说,如果用数据库实现的话,虽然你的组织结构存在里面,但是人员权限的问题就比较恶心;2)效率。很多信息系统中组织结构的信息是会最频繁的用到,用数据库管理效率好象会比较低;3)易用性和效率。LDAP有比较完善的API接口。自己去做会写很多代码,而且性能和正确性也不一定能够得到保证。
scalene-南瓜汤 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 4
谢谢楼上各位, ldap服务器是否支持事务?
# 5
LDAP:事务——好象没有关系呀。
scalene-南瓜汤 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 6
你说的情况,使用一般关系型数据库就可以完全解决了。
freezwy-网络自由人 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 7
对,使用一般关系型数据库就可以完全解决了!
WSDOTNET-摇钱树 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 8
不太懂LDAP是什么,有人能解释一下吗?
scarlet-清风淡月 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 9
组织结构和目录结构很相似,建议使用目录服务来做,如微软的AD。
e2san-一个人 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 10
ldap是好东西, 可惜win下的可用产品不多, 用AD奢侈了一点

目前的项目这样计划:
Employee: 员工基本信息
Department: 部门组织信息 考虑到部门层次,级别不是很多的情况, 用10位的string来表示. 比如01代表业务部, 010代表北京业务, 011代表上海业务...
0110代表上海静安业务部...
Position: 职位表(含总管理者, 副管理者, 成员)

Department对Position是一对多. 一个部门有多个职位.
Position对Employee是多对多. 员工可以兼职.

这样各种查询都可以满足. 而且速度不慢
# 11
这种应用采用 MySQL 或 PostgreSQL 都可以。
关键是数据的设计。

如果你要考虑可扩展性,应采用以下的数据库设计:
PartyType: paryTypeId, ...
Party: partyId, partyTypeId, ...
Person: partyId, ... (员工)
Organization: partyId, ... (机构)

角色设计:
RoleType: roleTypeId, ...
PartyRole: partyId, roleTypeId, ...
PartyRelation: fromPartyId, toPartyId, fromPartyRole, toPartyRole, ... (角色关系)

实现员工和机构的可变属性(描述性弹性域)通过以下实现:
PartyTypeAttribute: partyTypeId, attrName
PartyAttribute: partyId, attrName, attrValue
knoppix at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...
# 12
很累啊
这样可以吗?
depart:d_id, d_pid, name...
第一级就用0好了,子部门的pid为0,依此类推

员工类似了,不过如果是多重关系,上级id不用int型,用varchar,“,”分隔就好
cryz-娱乐而已 at 2007-10-29 > top of Msdn China Tech,企业开发,企业信息化...