日期:2014-05-18  浏览次数:20539 次

面试题目:sql 设计表,过来晒晒你们会怎么设计!
说明:总经理有2个
总经理下有隶属经理N个
每个隶属经理掌握1个或以上业务.但是所有业务的目标金额是一样的

架构
 
      总经理      2
       |       |
     ---------------------------
    |     |    |   ....
    |     |    |   ....
   隶属经理   2    3  .....
    目标    目标  目标  ......
  ————————————————————
  |  |  |  .......  |   .....
 业务 业务 业务 ....  业务   ........
---------------------------------------------------
本月目标金额
本月完成金额
本月完成率
--------------------
1-8月目标总金额
1-8月完成总金额
1-8月完成率
--------------------------------------------------
本年度目标总金额
本年度完成总金额
本年度完成率
-----------------------------





我是这样设计的:
表名:总经理
字段  类型    主键   外键   索引  是否为空
姓名  varchar(12) T              NOT
ID   INT(1,1)


表名:隶属经理
字段  类型    主键   外键   索引  是否为空
姓名  varchar(12) T               NOT
上级  varchar(12)     T(总经理:姓名)     NOT
ID    INT(1,1)

表名:目标
字段  类型    主键   外键   索引  是否为空
目标金额  money                NOT
负责人  varchar(12)     T(隶属经理:姓名)   NOT
年月   varchar(6)                NOT
ID    INT(1,1)

表名:实际
字段  类型    主键   外键   索引  是否为空
业务  varchar(20)               NOT
完成金额  money                 NOT
负责人  varchar(12)     T(隶属经理:姓名)     NOT
年月   varchar(6)                NOT
ID    INT(1,1)

 



------解决方案--------------------
经理,隶属经理一个表,就叫经理表。 有一个自关联ID足以
目标,实际,一个表。本来就是一一对应的没必要分两个表

所以最终就两个表,经理表和 业务表
------解决方案--------------------
建议,后面3张一张表
------解决方案--------------------
总经理和隶属经理作为一个表,两者关系可以通过自连接实现。 其实就是用楼主的第二个表就够了,只不过总经理的上级这里为空。这个表可以归结为员工信息表。

目标单独一个表,这个是为了方便更新目标,如果业务和目标放在一个表,以后业务很多了。数据量很多要更新目标,就得更新所有记录,效率不高。

业务描述表 如果业务有描述,所属部门等这些描述信息。得需要一个业务描述表。

业务业绩表 就如楼主的第四个表,不过可能得考虑一下这个表的时间粒度,也就是记录基于每天,还是每月,每年。按照楼主给出的描述,应该到每月就好了,但是还是考虑多些好。

有所不妥之处,还请谅解。
PS:表的数量并不是越少越好(当然也不是越多越好),关键是合理,易用,易于扩展等等。
所以考虑就得多些。