在WEB中要建立/管理企业的组织图和职员间的上下级管理关系. 要用什么类型的数据库或者DBMS中怎么设计表结构?
因为有一些其它内容要用到关系型数据库, 所以想利用DBMS来实现.
但是考虑到组织的可扩充性和程序的简单性, 类似LDAP的结构可能会简单些.
请过来人给个建议, 谢谢! 253了
一般来说这种关系就是一种树形关系,所以呢,我采用的是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
ldap是好东西, 可惜win下的可用产品不多, 用AD奢侈了一点
目前的项目这样计划:
Employee: 员工基本信息
Department: 部门组织信息 考虑到部门层次,级别不是很多的情况, 用10位的string来表示. 比如01代表业务部, 010代表北京业务, 011代表上海业务...
0110代表上海静安业务部...
Position: 职位表(含总管理者, 副管理者, 成员)
Department对Position是一对多. 一个部门有多个职位.
Position对Employee是多对多. 员工可以兼职.
这样各种查询都可以满足. 而且速度不慢
这种应用采用 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