协助数据库设计

时间:2012-03-15 07:24:20

标签: mysql database database-design

我有一份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    |
|----|------|

我希望你们明白我想要达到的目标,否则,问一个问题,我会尽我所能回答! :)

感谢。

1 个答案:

答案 0 :(得分: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    | 
|-----------------|------------|------------|--------| 

在这里你可以看到Dave从05年5月到05年8月被聘为学生,然后他于06年5月作为合同雇员回来,直到2010年2月底。然后在2010年3月1日,鲍勃被聘为永久雇员,他仍然在工作(最大整理日期意味着“直到另行通知”)。

这种设计的巨大优势在于,您只需在发生变化时输入/编辑数据,而不是每月为您拥有或曾经拥有的每位员工输入/编辑数据。您还可以通过非常简单的SQL查询查看您的员工在任何给定日期(而不仅仅是几个月)的样子。