1

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

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

这使得可以有多个级别的分支......

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

4

3 回答 3

3

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

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

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

于 2012-05-17T22:22:45.643 回答
3

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

我看到三个表:Employee、Company 和 Department。

假设您仅对当前就业进行建模,则一名员工只能属于一家公司。(一次一份工作 - 没有兼职。)公司可以有一个或多个员工,所以员工有公司的外键。

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

建模分支只是稍微复杂一些。如果一个部门是另一个部门的下属,我会给部门一个外键。顶级部门将具有其他部门的空外键,因为它是顶级部门。

于 2012-05-17T22:22:59.547 回答
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
于 2012-05-17T22:24:46.947 回答