我经历了很多线程,无法弄清楚。对不起,如果这是一个重复的问题。考虑以下设置。
1)员工=>(ID,姓名)
2)部门=>(ID,姓名,位置,文员,会计,中层经理,集团经理,区域经理,活跃)
部门可有多名文员、会计师、中层管理人员等。他们只是 Employee 表中的雇员。对于没有数据重复、没有更新异常和没有/更少的联结表的部门实体,需要一个更好的数据库模式(灵活,例如添加一个新列作为部门经理必须很容易)。
提前致谢!:)
我经历了很多线程,无法弄清楚。对不起,如果这是一个重复的问题。考虑以下设置。
1)员工=>(ID,姓名)
2)部门=>(ID,姓名,位置,文员,会计,中层经理,集团经理,区域经理,活跃)
部门可有多名文员、会计师、中层管理人员等。他们只是 Employee 表中的雇员。对于没有数据重复、没有更新异常和没有/更少的联结表的部门实体,需要一个更好的数据库模式(灵活,例如添加一个新列作为部门经理必须很容易)。
提前致谢!:)
你有一个多对多的关系,所以你需要第三个关联(联结)表——你无法避免它。
DepartmentMember => (DepartmentId, EmployeeId, MembershipRole)
你为什么不想要这个?
你需要这样的东西;
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
部门 =>(ID,employeeID,location,active) 员工 =>(EmployeeID,name, position)
我认为这将是组织表格的更好方法。这假定 active 是部门的属性,否则将其移动到员工表。
Employee =>(ID,name, department_ID, position_ID, Active)
Position =>(ID, name, Active)
Department => (ID,Name,location,Active)
假设一名员工只能在一个部门工作。如果不是,那么是的,您需要第三张表以避免重复
员工
ID, Name, EmployeeType, DepartmentID
(pk on ID, EmployeeType)
部门
ID, Name, Active
职位/职位与部门非常相关。一个人可以是一个部门的区域经理,还可以在另一个部门担任顾问职位。
然后,部门和员工是多对多的。该职位的员工也是多对多的。如果您需要灵活性,例如为部门添加新标题,则连接表是必需的。你无法避免它。
可以参考如下表结构供参考:
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。