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

放在一个表中,坏处:数据冗余,好处:查询速度快,是这样吗?谢谢大家!
我的一位同学做了一个“管家婆“管理软件,有一个功能模块是记录自己的收入,其中,收入有 3 种类型: 工资、奖金、公积金,用户在前台操作完之后,将数据记录在数据库的表中是下面这样的:

日期       钱数     收入类型
2007-09-01   100      奖金
2007-09-02   100      奖金
2007-09-03   100      奖金
2007-09-04   100      奖金
2007-09-05   100      奖金
2007-09-06   100      奖金
2007-09-07   100      奖金
2007-09-08   100      奖金
2007-09-09   100      工资
2007-09-10   100      公积金
……
……
……
……
……
……

老师说:这样不好,应该专门做一个“收入类型表”,如:

ID    收入类型
1     工资
2     奖金
3     公积金

这样用户在前端,我们设置一个 ListBox ,里面显示的有 3 项:工资、奖金、公积金,

工资 对应的 value 值是:1
奖金 对应的 value 值是:2
公积金对应的 value 值是:3

这样用户在选择完之后,一按确定,就将 value 的值写入表中,即:

日期       钱数     收入类型
2007-09-01   100      2
2007-09-02   100      2
2007-09-03   100      2
2007-09-04   100      2
2007-09-05   100      2
2007-09-06   100      2
2007-09-07   100      2
2007-09-08   100      2
2007-09-09   100      1
2007-09-10   100      3
……
……
……
……
……
……

这样就好非常好!

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
我的疑惑:

(1).这样做的好处是:避免了数据的大量重复,即避免了数据的冗余,对吗?

(2).这样做的坏处是:在前端的程序界面中的表格中我们要显示这样的数据:

日期       钱数     收入类型
2007-09-01   100      奖金
2007-09-02   100      奖金
2007-09-03   100      奖金
2007-09-04   100      奖金
2007-09-05   100      奖金
2007-09-06   100      奖金
2007-09-07   100      奖金
2007-09-08   100      奖金
2007-09-09   100      工资
2007-09-10   100      公积金
……
……
……
……
……


那就要将这 2 个表合在一起进行连接查询,速度决定没有将数据放在一个表中查询速度快,这是放在 2 个表中的坏处,是这样吗?



------解决方案--------------------
我个人赞同你老师的做法,这样确实比较规范.
查询速度其实并不会慢.
------解决方案--------------------
我也赞同你老师的做法,一般这样的功能设计都是这样的,例如页面可以做个下拉选择框:
1     工资 
2     奖金 
3     公积金
这样你要是以后添加一个选项,例如4:加班工资,只要直接在配置表添加,灵活多了。。。。。。个人理解哈:) 

------解决方案--------------------
老师的做法更符合数据库设计的范式要求。
------解决方案--------------------
都不用说,看看数据库设计的三范式就知道了
------解决方案--------------------
都是超人啊
我的异常网推荐解决方案:软件开发者薪资,http://www.aiyiweb.com/other/1391128.html