2012-05-17 119 views
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 

這使得有分支機構的多層次......

但我懷疑這是否是做的方式它..

+0

每個分支只能屬於另一個分支嗎?員工只能屬於一個分支嗎? –

+0

每個分支都是唯一的,只能屬於另一個分支。一名員工可以屬於多個分支機構。例如,當一些人有兩個工作:)或者當有人切換工作,我想存儲它也(與枚舉(當前,歷史) – stUrb

回答

2

如果員工只能屬於一個分支,分支只能是一個孩子一個分支,那麼你可以考慮添加一列來表示此信息,而不是全新的表:

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

如果您對員工/分行和分行/分行有多對多的關係,那麼我認爲您的原始結構很好。

3

不,他們不應該在同一個表中。

我看到三個表:員工,公司和部門。

員工只能屬於一家公司,假設您僅對當前的就業進行建模。 (一次一份工作 - 不得有月光照。)公司可以有一個或多個員工,所以員工擁有公司的外鍵。

公司可以有許多部門,但一個部門只能屬於一個公司。所以部門將有一個公司的外鍵。

建模分支僅稍微複雜。如果一個部門是另一個部門的話,我會給部門一個外部部門。頂級部門對其他部門將有一個空外鍵,因爲它是最高級別。

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