放在一个表中,坏处:数据冗余,好处:查询速度快,是这样吗?谢谢大家!
我的一位同学做了一个“管家婆“管理软件,有一个功能模块是记录自己的收入,其中,收入有 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