对于可变记录的程序应如何设计?(50分)

  • 主题发起人 主题发起人 fee
  • 开始时间 开始时间
F

fee

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要设计一段程序来记录学生的应考科目,补考科目,但科目的
长度不一样,有的是三门,有的是两门,
请问如何设计数据结构及程序?
 
四个表:学生表,科目表,应考学生及科目,补考学生及科目表
学生表: s_id,s_name,....
科目表:item_id,item_name,....
应考学生及科目:s_id,item_id,.....
补考学生及科目:s_id,item_id,.....
后两个表可合并,加一个标志.


 
这样行不行:

补考科目表结构:

姓名 科目
==============
cAkk 语文
fee 语文
fee 计算机
cAkk 算术
cAkk 计算机


得到cAkk需要补考科目:
select 科目 from 补考科目表 where 姓名='cAkk'
 
我觉得GXG8816的方法不错,我是这样的:
1,首先将某考生的补考科目用tMEMO记录下来,
2。再fieldbyname('补考科目').asinteger:=memo1.text;
但在DBGRID中显示的记录含有||符号,如 语文||数学||
政治等,
如果,又想就用这些记录,应该如何滤除符号,及还应当注意些啥?
 
注意:后两个表只存储学生编号和科目标号,名称是显示时用查询连接出来的.
至于你现在的记录,可用相应的数据库操作.(比如查找,替换)
做数据库应用系统,库结构很重要,影响到所有功能的设计.库结构要严格遵守关系数据库的第三范式,避免数据冗余.
 
你的问题是典型的数据库设计的范式问题,如果采用你的方法,确实存在很大的问题,
比如说,对某个学生的应考科目的查询,统计,增加,删除,修改,gxg8816的数据库设计
就很容易应付,但在你的设计中就很难处理,这就是不同范式存在的差别。
由于你的数据是1:n的,所以,数据库也要是1:n的。即1个学生对应n个科目。

至于科目表和学生表,也应该存在,否则也会存在数据增删改异常的问题。
当然,如果程序很小,以上两个表可以不要,直接在学生和科目表中存放学生和科目信息。
再简化,就作一个足够大的科目表,满足1nf
姓名 科目 成绩 科目 成绩..... 科目 成绩
nhes 语文 100 数学 0 ..... 英语 70
可是这种1:n关系处理起来就太糟糕了。
 
接受答案了.
 
后退
顶部