0

我经历了很多线程,无法弄清楚。对不起,如果这是一个重复的问题。考虑以下设置。

1)员工=>(ID,姓名)

2)部门=>(ID,姓名,位置,文员,会计,中层经理,集团经理,区域经理,活跃)

部门可有多名文员、会计师、中层管理人员等。他们只是 Employee 表中的雇员。对于没有数据重复、没有更新异常和没有/更少的联结表的部门实体,需要一个更好的数据库模式(灵活,例如添加一个新列作为部门经理必须很容易)。

提前致谢!:)

4

6 回答 6

1

你有一个多对多的关系,所以你需要第三个关联(联结)表——你无法避免它。

DepartmentMember => (DepartmentId, EmployeeId, MembershipRole)

你为什么不想要这个?

于 2011-05-05T13:59:57.793 回答
1

你需要这样的东西;

部门员工ERD

CREATE TABLE department(
    dept_id      int    NOT NULL,
    dept_name    char(10)    NULL,
    CONSTRAINT PK1 PRIMARY KEY NONCLUSTERED (dept_id)
)
go


CREATE TABLE department_employee(
    id         int    NOT NULL,
    dept_id    int    NOT NULL,
    emp_id     int    NOT NULL,
    CONSTRAINT PK3 PRIMARY KEY NONCLUSTERED (id)
)
go


CREATE TABLE employee(
    emp_id      int    NOT NULL,
    emp_name    char(10)    NULL,
    CONSTRAINT PK2 PRIMARY KEY NONCLUSTERED (emp_id)
)
go


ALTER TABLE department_employee ADD CONSTRAINT Refdepartment1 
    FOREIGN KEY (dept_id)
    REFERENCES department(dept_id)
go

ALTER TABLE department_employee ADD CONSTRAINT Refemployee2 
    FOREIGN KEY (emp_id)
    REFERENCES employee(emp_id)
go
于 2011-05-05T14:04:55.523 回答
0

部门 =>(ID,employeeID,location,active) 员工 =>(EmployeeID,name, position)

我认为这将是组织表格的更好方法。这假定 active 是部门的属性,否则将其移动到员工表。

于 2011-05-05T13:58:13.850 回答
0
Employee =>(ID,name, department_ID, position_ID, Active)
Position =>(ID, name, Active)
Department => (ID,Name,location,Active)
于 2011-05-05T14:01:48.943 回答
0

假设一名员工只能在一个部门工作。如果不是,那么是的,您需要第三张表以避免重复

员工

ID, Name, EmployeeType, DepartmentID
(pk on ID, EmployeeType)

部门

ID, Name, Active
于 2011-05-05T14:02:38.797 回答
0

职位/职位与部门非常相关。一个人可以是一个部门的区域经理,还可以在另一个部门担任顾问职位。

然后,部门和员工是多对多的。该职位的员工也是多对多的。如果您需要灵活性,例如为部门添加新标题,则连接表是必需的。你无法避免它。

可以参考如下表结构供参考:

Employee 
-----------------------
EmployeeID (PK)
EmployeeName
Active

Department 
-------------------------
DepartmentID (PK)
DepartmenName
Location

Position 
----------------------------
PositionID (PK)
PositionDescription (eg.Clerk, Accountant etc)

EmployeePosition 
----------------------------
EmployeeID  (FK to Employee.EmployeeID )
DepartmentID (FK to Department.DepartmentID)
PositionID (FK to Position.PositionID )

如果职位/头衔固定为员工而不是部门。即一名员工是文员并且可以在一个或多个部门担任该职位,我们该怎么做?

你的意思是在极端情况下,许多员工可以拥有自己的特殊头衔?他们属于许多部门?如果是,假设员工 ID 123 有一个名为“The Special One”的特殊头衔,它属于 IT、客户和销售部门。您首先在表格中创建此标题(即“The Special One”)Position 并获得Position.PositionID.

然后,您将 Employee.EmployeeID 123 的 3 条记录插入到EmployeePosition 表中,使用它Position.PositionID和 IT 、 Account 、 Sales 部门的部门 ID。

于 2011-05-05T14:15:19.063 回答