2012-03-15 208 views
1

我有一張Excel表,其中包含所有爲我公司工作並仍在爲我們工作的員工。它是大約200行的一張。每行有基本信息,如姓氏,名字,職位,資格等等。16欄基本信息。現在,棘手的部分是這樣的。在16列後,有幾個月(05年5月至今(4月-12日))。在每個月的專欄中,員工可以獲得0(合同),1(永久),2(合同終止)或3(學生)。幫助數據庫設計

這樣做的最好方法是什麼?我想到了4張桌子(下面列出),其中一張桌子確定永久性終止的人(爲了知道誰是在哪種類型的工作)。

MySQL Table: hr_employees 
|-----------------|-------|----|----|----| 
| employee_number | name | sur| etc| etc| 
|-----------------|-------|----|----|----| 
| 1    | Dave | F | xx | xx | 
|-----------------|-------|----|----|----| 

MySQL Table: hr_month 
|----|--------| 
| id | month | 
|----|--------| 
| 1 | May-05 | 
| 2 | Jun-05 | 
|----|--------| 

MySQL Table: hr_status 
|----|------|------|--------| 
| id | e_no | date | status | 
|----|------|------|--------| 
| 1 | 1 | 1 | 1 | 
| 2 | 1 | 2 | 1 | 
|----|------|------|--------| 

MySQL Table: hr_terminated 
|----|------| 
| id | e_no | 
|----|------| 
| 1 | 1 | 
| 2 | 1 | 
|----|------| 

我希望你們明白我想達到什麼目的,否則問一個問題,我會盡我所能回答! :)

謝謝。

+0

我會使用employee_number等代替id。使它更容易理解正在發生的事情。 – 2012-03-15 07:28:55

+0

是的,我會改變名字,一旦我得到一個可以工作的設計! :) 還是)感謝你的建議! :) – Albert 2012-03-15 07:33:20

+0

我更喜歡前綴。 e_id,e_name,e_sur,....,s_id,s_employee,s_date ... etc ....在JOIN中它可以提供幫助。 – 2012-03-15 07:34:51

回答

0

下面是一個簡化數據輸入的設計,並且更像是關係數據庫,就像它的規範化一樣。

MySQL Table: hr_employee 
|-----------------|-------|----|----|----| 
| employee_number | name | sur| etc| etc| 
|-----------------|-------|----|----|----| 
| 1    | Dave | F | xx | xx | 
|-----------------|-------|----|----|----| 
| 2    | Bob | M | xx | xx | 
|-----------------|-------|----|----|----| 

MySQL Table: hr_employee_status 
|-----------------|------------|------------|--------| 
| employee_number | from_date | to_date | status | 
|-----------------|------------|------------|--------| 
| 1    | 2005-05-01 | 2005-08-31 | 3 | 
|-----------------|------------|------------|--------| 
| 1    | 2006-05-01 | 2010-02-28 | 0 | 
|-----------------|------------|------------|--------| 
| 2    | 2010-03-01 | 9999-12-31 | 1 | 
|-----------------|------------|------------|--------| 

在這裏你可以看到,戴夫被聘爲作爲從五月'05學生到05月,然後他回來在五月'06作爲他擔任直到二月底「合同工10。然後在2010年3月1日,鮑勃被聘爲永久僱員,他仍在工作(最大整理日期的意思是「直到另行通知」)。

這種設計的巨大優勢在於,您只需在出現變化時輸入/編輯數據,而不是每個員工每月都有一次。您還可以通過一個非常簡單的SQL查詢來查看您的員工在任何給定的日期(不僅僅是幾個月!)的樣子。

+0

非常感謝。看起來比我想出的更簡單。編碼它做我想要的將是一件輕而易舉的事情。我真的需要開始學習一些數據庫設計...你可以建議任何好的資源? – Albert 2012-03-15 14:03:43

+0

@DarkRanger - 我從C.J. Date的經典着作「數據庫系統介紹」中學到了這一點。您可以閱讀維基百科http://en.wikipedia.org/wiki/Normalization_(database)上的規範化 - 至少這將是一個更短的閱讀!遵循SO上的數據庫設計標籤以及http://dba.stackexchange.com也不會有什麼壞處。有很多聰明的人在這裏和DBA.SAE上給出了很好的建議。 – 2012-03-15 14:57:59

+0

謝謝喬爾。我非常感謝你的幫助! :) – Albert 2012-03-19 10:27:10