2012-12-08 63 views
0

我正在爲我的公司開發一個Intranet應用程序。公司結構複雜,業務線,部門,部門,單位,團體多。我必須照顧所有這些事情。部分員工在部門層面工作,其中一些員工在部門層面工作等等。現在的問題是數據庫設計。我對如何設計數據庫感到困惑。在開始的時候,我決定把它設計如下:如何在數據庫設計中包含這些要求?

Employees: Username, Name, Title, OrgCode 
Departments: OrgCode, Name 
Divisions: OrgCode, Name 
Units: OrgCode, Name 

但問題正如我以前說過,有些員工在部門合作,因此如何使所有這些表之間的關係。是否有可能在Employees表中將OrgCode作爲Departments,Divisions和Units表中的OrgCode的外鍵?

能否請您推薦我如何設計它?

更新: @wizzardz把一個很好的數據庫設計。現在我需要的是一個適合數據庫設計的數據示例 以下是我在數據庫中使用的一組數據: 讓我們假設我們有員工提供以下信息: 用戶名:JohnA 名稱:John 標題:Engineer OrgCode:AA

讓我們假設我們有部門AA,我將如何將這些數據分佈到數據庫設計中?

+0

有多少部門? –

+1

將OrgCode存儲在employees表中意味着每個員工一次只能屬於一個部門;某些員工可能屬於多個部門,而且您不存儲任何從部門到部門的人員的歷史記錄。 –

+0

員工只能爲一個部門工作。但他可以從該部門轉到另一個部門。那麼哪種設計更好? –

回答

3

你可以做的設計是這樣的

,而不是去爲單獨的表的部門,分部等嘗試將它們存儲在一個表中有TYPEID到distingush部門,Divisitions等

能你試試這樣

enter image description here

設計在級別表中,您需要輸入如「部門工作人員,部門」,團體等的值(通過其保存在一個單獨的表你可以處理由組織新的水平的任何未來的補充。)

在你需要存儲部門名稱,部門名稱,該OrganisationLevels表組名等

EMPLOYEE表與表組織的一個關鍵forigen參考級別,這將存儲員工在組織中工作的級別。

如果您想要存儲特定僱員的工作經歷/有一個機會,僱員可以移動到一個層次到另一個,我建議你去這個設計

enter image description here

樣本數據WRT設計

級別

Id LevelType 
1 Department 
2 Division 
3 Group 

OrganisationLevels

Id Name LevelId Parent*(Give a proper name to this column)* 
13 AA 1  NULL 
. 
. 
21 B  2  13 (This column refer to the Id of department it belongs to.) 

僱員

Id UserName Name Title 
110 JohnA John Engineer 

EmployeeWorkDetails

Id EmployeeId OrganisationLevelId StartDate EndDate IsActive 
271 110   13   20/09/2011 NULL  true 

從Employee表OrgCode可以被移除,因爲我認爲這是該組織員工的員工代碼。

我希望這會有所幫助。

+0

感謝您的幫助。你能否通過例子詳細說明這一點?請看看我更新的問題。因爲我不知道如何將部門和部門分配到數據庫設計中。 –

+1

@TechLover: - 我用一些示例數據更新了我的答案。看看它是否有幫助。 – wizzardz

+0

非常感謝您的解釋。是的,它有很大的幫助。 –

0
Employees: Username, Name, Title, OrgCode 
Departments: OrgCode, Name 
Divisions: OrgCode, Name 
Units: OrgCode, Name 

向上述提到的DB的設計,有被稱爲組織含有OrgCode和另一列型(我們得到的見解在其上的有機的類型是什麼,即部,司和單位)多一個表

那麼你可以讓員工表的OrgCode引用組織表的OrgCode(父子關係)。

+0

您能否詳細說明一下?我無法理解你的意思 –

0

我建議你學習分析和設計的區別。當您設計數據庫時,您正在創造將影響數據如何存儲和檢索的表格,列和約束。您很關心更新和查詢的簡易性,包括稍後將瞭解的操作。

當你分析數據需求時,你並沒有參與發明事物,而是從事發現事物。而你發現的東西是關於主題應該代表的「現實世界」的東西。你把主題分解成「實體」和這些實體之間的關係。然後,將數據庫中存儲的每個值與屬性的實例關聯起來,將每個屬性關聯到實體或關係的某個方面。這產生了一個概念模型。

就你而言,員工,部門,單位等之間的關係聽起來相當複雜。提出一個能準確反映這種複雜現實的模型是值得的。

一旦您有了一個好的概念模型,就可以創建充分表示概念模型的SQL表,列和約束。這涉及可以學習的設計技能。但是,如果你有一個糟糕的概念模型,那麼無論你在設計上有多好,你都註定要失敗。

相關問題