我经历过许多线索,无法弄明白。对不起,如果这是一个重复的问题。请考虑以下设置。
1)员工=> (ID,姓名)
2)部门=> (ID,名称,位置,秘书,会计,中的管理程序,组的管理程序,区域管理器,活动)
部门可以有很多文员,会计师,中层管理人员等。他们只是Employee表中的员工。对于没有数据重复,没有更新异常和无/更少联结表的部门实体,需要一个更好的数据库模式(灵活的,如分区管理器必须容易添加一个新列)。
提前致谢! :)
答案 0 :(得分:1)
你有多对多的关系,所以你需要第三个关联(联结)表 - 你无法避免它。
DepartmentMember => (DepartmentId,EmployeeId,MembershipRole)
你为什么不想要这个?
答案 1 :(得分:1)
你需要这样的东西;
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
答案 2 :(得分:0)
部门=>(ID,employeeID,位置,有效) Employee =>(EmployeeID,名称,职位)
我认为这是组织表格的更好方法。这假定active是部门的属性,否则将其移动到employee表。
答案 3 :(得分:0)
Employee =>(ID,name, department_ID, position_ID, Active)
Position =>(ID, name, Active)
Department => (ID,Name,location,Active)
答案 4 :(得分:0)
假设一名员工只能在一个部门工作。如果没有,那么是的,你需要第三个表来避免重复
员工
ID, Name, EmployeeType, DepartmentID
(pk on ID, EmployeeType)
部门
ID, Name, Active
答案 5 :(得分: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 )
如果位置/标题固定为 员工而不是Department.i.e。一个 职员谁是职员,可以在 那个位置到一个或多个部门, 我们该怎么办呢?
您是说在极端情况下,许多员工可以拥有自己的特殊头衔吗?他们属于很多部门?如果是,则假设员工ID 123具有称为“特殊一号”的特殊标题,并且它属于IT,帐户和销售部门。您首先在Position
表格中创建此标题(即“The Special One”)并获取Position.PositionID
。
然后使用此EmployeePosition
以及IT,帐户,销售部门的部门ID将Employee.EmployeeID 123的3条记录插入Position.PositionID
表。