再次请教数据表的设计
http://expert.csdn.net/Expert/topic/2096/2096678.xml?temp=.7741205
接上面这个问题
本人在做一个学生缴费模块,在数据表设计过程中有点疑问想请教一下:
如果收费项目是固定的(只有学杂费、教材费、住宿费),数据表可以这样设计:
1、收费项目表(项目编号,项目名称)
0001 学杂费
0002 教材费
0003 住宿费
2、学杂费表(项目编号,专业名称, 收费标准)
0001 计算机及应用(专科) 5900
0001 工商管理(本科) 3600
...
3、教材费表(项目编号,专业名称, 收费标准)
0002 计算机及应用(专科) 300
0002 工商管理(本科) 200
...
4、住宿费表(项目编号,住宿类型,收费标准)
0003 4人间 1000
0003 6人间 800
...
5、学生缴费信息表(学号,姓名,专业, 班级, 是否住宿,应缴费,实缴费,找零,欠费,经办人,缴费日期)
00000000001 张三 计算机及应用(专科)计算机001 走读 6200 6200 0 0 王五 03/08/02
00000000002 李四 计算机及应用(专科)计算机001 寄宿 7000 6000 0 1000 王五 03/08/02
...
6、学生缴费清单表(学号,学杂费,教材费,住宿类型,住宿费)
00000000001 5900 300
00000000002 5900 300 6人间 800
说明:应缴费=学杂费+教材费+住宿费 (收费项目之和)
而现在的实际情况是收费项目每学期不是固定的,要由用户来定义。例如上面的收费项目包括学杂费、教材费、住宿费,用户也可能将收费项目定为学杂费、培养费、教材费、代办费等,且每个收费项目又可以有多个不同的收费标准,所以数据表不能像上面这样设计。请教一下数据表要如何设计比较好?
问题点数:50、回复次数:22Top
1 楼zjcxc(邹建)回复于 2003-08-01 21:52:04 得分 0
最好将收费项目归并为一个表设计:
1、收费项目表(项目编号,项目名称)
0001 学杂费
0002 教材费
0003 住宿费
2.收费项目明细表(项目编号,专业名称,收费标准)
0001 计算机及应用(专科) 5900
0001 工商管理(本科) 3600
...
0002 计算机及应用(专科) 300
0002 工商管理(本科) 200
...
0003 4人间 1000
0003 6人间 800
Top
2 楼zjcxc(邹建)回复于 2003-08-01 21:58:18 得分 0
明细表中还少了一个子编号:
2.收费项目明细表(项目编号,明细编号,专业名称,收费标准)
0001 01 计算机及应用(专科) 5900
0001 02 工商管理(本科) 3600
...
0002 01 计算机及应用(专科) 300
0002 02 工商管理(本科) 200
...
0003 01 4人间 1000
0003 02 6人间 800
3.学生信息表(学号,姓名,专业,班级,是否住宿)
00000000001 张三 计算机及应用(专科)计算机001 走读
00000000002 李四 计算机及应用(专科)计算机001 寄宿
4.学生费信息表(学号,项目编号,明细编号,应缴费,实缴费,找零,欠费,经办人,缴费日期)
00000000001 6200 0001 01 6200 0 0 王五 03/08/02
00000000002 7000 0003 02 6000 0 1000 王五 03/08/02
......
Top
3 楼zjcxc(邹建)回复于 2003-08-01 22:01:11 得分 0
6.学生缴费清单表(学号,学杂费,教材费,住宿类型,住宿费)
这个表不用建,根据上面表中的数据,写一个存储过程,将它计算出来就行了.
这个计算要用到动态生成交叉表的知识.
这样,你的收费项目就可以随时变动了.
对于每个表,要根据编号建立主键.
对于 收费项目明细表,要用:项目编号 和明细编号 建立联合主键.
Top
4 楼duola1(朵啦)回复于 2003-08-01 22:07:54 得分 0
按zjcxc朋友的设计,存在问题:在学生费信息表中一个学号将对应多条记录
例:学号, 项目编号,明细编号,应缴费,实缴费,找零,欠费,经办人,缴费日期
00000000001 0001 01 5900
00000000001 0002 01 300
00000000002 0001 01 5900
00000000002 0002 01 300
00000000002 0003 02 800
Top
5 楼newly_ignorant(不学无术)回复于 2003-08-01 22:14:29 得分 25
不考虑合理性,可以这么设置
学生表......
收费标准表
收费类型、收费标准名称、收费标准
收费定义表
收费类型、学期、关联字段名
其中关联字段名来自学生表的字段名
统计实现过程,先从收费定义表找到本学期的各收费类型、以及它的关联字段名
取关联字段的值,结合收费类型、收费标准,就得到某收费类型的收费标准
循环收费定义表则得到该学生应收费用
.....Top
6 楼newly_ignorant(不学无术)回复于 2003-08-01 22:19:59 得分 0
至于各种名称什么的就统一放到字典表里面
字典表
字段名、编号、名称等Top
7 楼golden24kcn(不甜)回复于 2003-08-01 22:22:16 得分 0
upTop
8 楼duola1(朵啦)回复于 2003-08-01 22:31:48 得分 0
newly_ignorant朋友能否用具体数据说明一下?谢谢!Top
9 楼newly_ignorant(不学无术)回复于 2003-08-01 22:40:21 得分 0
无聊透了:(
字典表
字段名 编号 名称
收费标准 01 学费
收费标准 02 教材费
收费标准 03 住宿费
收费标准 04 杂费
专业名称 01 机械
专业名称 02 计算机
专业名称 03 经济管理
住宿类型 01 走读
住宿类型 02 四人间
住宿类型 03 六人间
。。。
Top
10 楼zjcxc(邹建)回复于 2003-08-01 22:46:22 得分 25
回楼主:
按zjcxc朋友的设计,存在问题:在学生费信息表中一个学号将对应多条记录
这个不是问题吧?为什么一个学号只能对应一条记录?
这个学生有多少个收费项目,就对应多少条记录不好吗?
比如,你的收费项目有20项,如果有大部分的学生都只用到了其中的某几项.
如果照你的表设计,岂不是有十多项经常是空置不用的?
Top
11 楼newly_ignorant(不学无术)回复于 2003-08-01 22:49:10 得分 0
字典表
字段名 编号 名称
收费类型 01 学费
收费类型 02 教材费
收费类型 03 住宿费
收费类型 04 杂费
专业名称 01 机械
专业名称 02 计算机
专业名称 03 经济管理
住宿类型 01 走读
住宿类型 02 四人间
住宿类型 03 六人间
。。。
学生表
学号 姓名 专业名称 住宿类型 应交缴费
20030001 张三 01 02
20030002 李四 03 03
。。。
收费定义表
收费类型 关联字段名 学期
01 专业名称 2003年上学期
02 专业名称 2003年上学期
03 住宿类型 2003年上学期
04 专业名称 2003年上学期
01 专业名称 2003年下学期
03 住宿类型 2003年上学期
收费标准表
收费类型编号 子项目编号 收费标准
01 01 1000
01 02 2000
01 03 0
02 01 50
02 03 40
Top
12 楼newly_ignorant(不学无术)回复于 2003-08-01 22:54:34 得分 0
计算某人收费,比如张三
从收费定义表中获得2003年上学期要收费的有01~04标准
对01标准,发现关联字段为专业名称,从学生表中取专业名称的值得01
从收费标准表,收费类型编号01而且子项目编号01的收费标准为1000
这样得到01标准张三应该交1000大洋,依次找出02~04收费标准,求和得到张三2003年上学期应收费Top
13 楼duola1(朵啦)回复于 2003-08-01 23:00:29 得分 0
zjcxc朋友:
我觉得按你的想法,数据表要设计为:
1、收费项目表(项目编号,项目名称)
0001 学杂费
0002 教材费
0003 住宿费
2.收费项目明细表(项目编号,明细编号,专业名称, 收费标准)
0001 01 计算机及应用(专科) 5900
0001 02 工商管理(本科) 3600
...
0002 01 计算机及应用(专科) 300
0002 02 工商管理(本科) 200
...
0003 01 4人间 1000
0003 02 6人间 800
...
3、学生缴费信息表(学号,姓名,专业,班级,是否住宿,应缴费,实缴费,找零,欠费,经办人,缴费日期)
4、学生缴费清单表(学号,项目编号,明细编号,收费标准)
Top
14 楼duola1(朵啦)回复于 2003-08-01 23:01:49 得分 0
newly_ignorant朋友的方法我先消化一下再答复。Top
15 楼duola1(朵啦)回复于 2003-08-01 23:20:58 得分 0
newly_ignorant的方法是可行的,但存在一个问题:对于用户操作不是很友好。Top
16 楼newly_ignorant(不学无术)回复于 2003-08-01 23:26:35 得分 0
没有啊,显示的都是中文
计算可以考虑用存储过程实现
编程的时候稍复杂点而已Top
17 楼duola1(朵啦)回复于 2003-08-01 23:45:51 得分 0
首先用户要定义字典表就够让他们晕了。Top
18 楼newly_ignorant(不学无术)回复于 2003-08-01 23:48:45 得分 0
这种事情只需要做一次的,初始化数据这种工作有时候需要软件提供方协助完成的
客户只需要关心以后添加小量的东西就可以了
再说,界面做得合理点,客户仍然很容易理解的Top
19 楼duola1(朵啦)回复于 2003-08-01 23:51:54 得分 0
可是这个初始化工作是需要每学期做一次的,总不能每学期开学时软件提供方都去学校协助完成吧?Top
20 楼newly_ignorant(不学无术)回复于 2003-08-02 00:02:53 得分 0
字典表基本上不变,客户只需要每学期更新收费定义表而已
也就是填下这个学期要收哪些费用而已
Top
21 楼duola1(朵啦)回复于 2003-08-02 22:12:54 得分 0
字典表怎么会基本不变?字典表里有每个收费项目的名称、专业的名称,这些都是存在变化的。
Top



