2012-03-15 12 views
1

私は、私の会社で働いていて、まだ私たちのために働いているすべての従業員を含むExcelシートを持っています。約200行のシートです。各行には、姓、名前、所在地、資格などの基本情報があります。基本情報の16列。今、難しい部分はこれです。 16列後には、月があります(5月5日から現在まで(4月12日))。毎月の列の下で、従業員は0(契約)、1(永久)、2(契約終了)または3(学生)のいずれかを取得します。データベース設計支援

これを行うにはどうすればよいでしょうか?私は4つのテーブル(以下に列挙)を考えていました。そこでは、1つのテーブルが永久に終了した人を決定します(誰がどのタイプの雇用になったのかを知るため)。

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

idの代わりにemployee_numberなどを使用します。何が起こっているのかを理解しやすくします。 –

+0

ええ、私は働くことができるデザインを取得したら、名前を変更します! :)しかし、提案をありがとう! :) – Albert

+0

私はプレフィックスを好む。 e_id、e_name、e_sur、....、s_id、s_employee、s_date ...など。ジョインでは役立ちます。 –

答えて

0

データ入力を簡略化し、正規化されている限り、Excelのようなリレーショナルデータベースです。ここで

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 | 
|-----------------|------------|------------|--------| 

あなたはデイブは8月'05まで月'05から学生としての雇われたことがわかりますが、その後、彼は「2月末までとして働いていた契約社員として月'06に戻ってきました10。その後、2010年3月1日にボブは常勤従業員として雇用され、彼はまだ働いています(最大照合日は「今後の通知まで」を意味します)。

この設計の大きな利点は、何か変わったときにデータを入力/編集すればよいということです。非常にシンプルなSQLクエリーを使用して、特定の日付(数カ月だけでなく)での従業員の見た目を確認することもできます。

+0

ありがとうございます。私が思いついたよりも簡単に見えます。私が欲しいものを正確にコーディングすることは簡単です。私は本当にいくつかのデータベース設計を学び始める必要があります...あなたが提案できる良いリソース? – Albert

+0

@DarkRanger - 私は、C.J. Dateの古典的な「データベースシステムの紹介」から難しい方法を学びました。あなたはWikipedia http://en.wikipedia.org/wiki/Normalization_(database)で正規化を読むことができます。それはここのデータベースデザインタグに従うことを傷つけることはありませんし、http://dba.stackexchange.comでもあります。 SOとDBA.SEにはここで良いアドバイスをしてくれる多くのスマートな人がいます。 –

+0

ジョエルに感謝します。私は本当にあなたの助けに感謝します! :) – Albert