存储公司 - 分支机构 - 员工的数据库结构

时间:2012-05-17 22:15:40

标签: mysql database-design

我想将此信息存储在数据库中:

Company
   |
   |-- Dept 1--,
   |            \->Employee 1
   |             |->Employee 2
   |
   |-- Dept 2--,
   |            \->Employee 3
   |
   |-> Employee 4
   \-> Employee 5

我已经做到了这一点:我需要一张员工表,而且部门和公司的项目是一样的,所以他们应该在同一张桌子上......

employee // id | information...
branch  //  id | information....

每个员工都应该与分支机构相关联。每个分支都可以连接到另一个分支......

employeeBranch // employee.id | branch.id | enum(current, historical)
branchBranch   // branch.id   | branch.id

这样就可以拥有多个级别的分支......

但我怀疑这是 这样做的方法..

3 个答案:

答案 0 :(得分:3)

不,他们根本不应该在同一张桌子上。

我看到三个表:员工,公司和部门。

员工只能属于一家公司,假设您只对当前的工作进行建模。 (一次一个工作 - 没有兼职。)公司可以有一个或多个员工,因此员工拥有公司的外键。

公司可以拥有多个部门,但部门只能属于一个公司。因此,部门将拥有公司的外键。

建模分支只是稍微复杂一点。如果一个部门是另一个部门,我会给部门一个外键。顶级部门将拥有其他部门的空外键,因为它是最高级别。

答案 1 :(得分:2)

如果员工只能属于一个分支,而分支只能是一个子分支到一个分支,那么您可以考虑添加一列来表示此信息而不是整个新表:

employee // id | branchId | information
branch   // id | parentBranchId | information

如果您有员工/分支和分支/分支的多对多关系,那么我认为您的原始结构很好。

答案 2 :(得分:0)

这样做的最佳方式与你所说的相似,每一方都有自己的信息表。然后制作一个关系表。

table `branches`

Branch ID           Branch Name         Branch Location
---------------------------------------------------------------
    2                   sd                  west
    1                   no name             east

table `employee`

employee ID         employee name           employee birth
---------------------------------------------------------------
    1                   name                    2/2/1975

table `employee_branches`

employee ID     Branch ID
--------------------------
    1               2
    1               1