powerwind 发表于 2006-3-26 18:28

求软件工程课程设计项目的数据设计

题目要求:
一        毕业设计互选系统
1        需求
        系统为教师、学生、管理人员分别提供操作界面,三部分分别由不同的同学完成。
        能登记保存教师信息、学生信息,将信息存入文件。教师信息包括教师工号、姓名、年龄、职称、所在系、联系电话。学生信息包括学号、姓名、所在系、宿舍、联系电话。
        能为教师登记毕设课题信息,将课题存入文件。课题信息包括课题编号、课题名、主持老师、面向系、课题内容、课题要求。
        能为学生查看毕设课题资料。
        能为学生填写毕设志愿,每个学生可以填写三个课题志愿。学生填写志愿必须跟课题面向系匹配。如果学生没有确定毕设题目,则可以任意修改志愿。课题没有确定选题同学则可以被够资格的同学申请。
        填写完志愿后,能为教师筛选志愿,确定每个课题选题同学,每个课题只能由一个学生选题。
        教师筛选志愿完成后,将没有选定毕设课题的同学和没有被选的课题进行随机分配,直到每个学生分配到课题为止。
        提供每个同学选题统计的报表。
        其它使系统更完善的功能。


我们没有学过数据厍原理,表的设计要怎样才更合理?至少要符合第三范式吧!
虽然我大概设计了表的结构,但我很想知道学过数据厍原理后,会设计成怎样,如果精通SQL的人又会怎样设计?

有兴趣,大家一起讨论.

hjack 发表于 2006-3-26 22:01

先把你的想法说说吧。。。

powerwind 发表于 2006-3-26 23:00

我是这样想的:

三种不同用户,学生,教师,管理员,分别建立三个表,字段一样,为:
用户编号,用户名,密码

另外三个表是以上三种用用户的基本信息:

学生表:
学号,姓名,所在系,宿舍,联系电话

教师表:
教师工号、姓名、年龄、职称、所在系、联系电话

管理员表:
管理员编号,姓名,电话号码(注:这个表不重要)

课题信息表:
课题编号、课题名、主持教师编号、主持教师姓名、面向系、课题内容、课题要求,已选人数,已选确认。

学生选课后的临时表,叫它为已选课表:
学生编号,课题1编号,课题2编号,课题3编号

确定选课后的表,这里叫它为选课结果表:
学生编号,已选课题号

每个基本表我都选择编号为主键,其中用户编号就对应其它表的如学号,教师工号,管理员编号。
课题信息表中,通过主持教师编号就可以查到主持教师姓名,但为了不要在显示数据时执行查询,我选择让数据存在冗余。
对已选课表的设计,我是这样想的,以学生编号为主,三个课题编号,可尽量减少重复数据。
至于建立外键约束,我在SQL中不会操作。哎!

以上我的想法,我也确实这样去实现,可是遇到了难题。因为在表中设计的数据通常不能作为显示,每次显示更新都操作一个以上的表。这是因为我对SQL不懂,加上我也是初学JSP,用JSP+SQL设计,现在进退两难,不知是不是我的数据厍设计得不合理,还是我应该去学学SQL呢!

希望得到指正!

hjack 发表于 2006-3-26 23:09

今晚没时间了,要走了,
明天再详细看看。

powerwind 发表于 2006-3-28 18:39

原帖由 hjack 于 2006-3-26 23:09 发表
今晚没时间了,要走了,
明天再详细看看。
有空不要忘记了啊!期待中...

wool王 发表于 2006-3-28 19:04

角色表:
ID 角色名
你这个题目的数据有三条,分别是,老师,学生,管理员

用户表:
ID 用户名 密码 角色ID
这里用户表和角色表是一对多关联

用户信息表: (你可以根据特定的业务逻辑分为教室信息表,学生信息表,管理员信息表等等...)
ID 名字 年龄 等等....
用户表和用户信息表是一对一关联

课题表:
ID   课题名   教师编号(外键)   面向系(如果有院系表的话这里用外键)   课题内容   课题要求
教室编号和用户表一对多关联
如果要按照3nf设计,,,已选人数和已选确认不方便放入数据表,但可以放到持久化对象中统计...

选课表:
用户ID   课题ID选课状态(什么确不确定之类,用标志表示,比如1代表确定...)

wool王 发表于 2006-3-28 19:05

我按我理解这么设计...

大家讨论下...

hjack 发表于 2006-3-28 20:02

实体:系,学生,教师,课题                                 
关系:选题                                             
                                                      
系表                                                   
系号,系名                                             
                                                      
                                                      
教师表                                                
教师工号,系号,姓名,出生日期,职称,电话 (系号为外键)                  
                                                      
                                                      
学生表                                                
学号,系号,姓名,宿舍,电话 (系号为外键)                              
                                                      
                                                      
课题表                                                
课题号,课题名,主持老师工号,系号,内容,要求 (教工号为外键,系号为外键)            
                                                      
                                                      
选题关系表                                             
课题号,学号,选课状态(课题号,学号均为外键,
选课状态可以为已选,取消,系统安排.对于候选的课题学生可以选择,当选课时间结束后,根据一定的业务逻辑把已选的一个课题定给一个学生,比如先到先得或者选择后统一再分配,并把该生的另两条选课状态变为取消,对于没有选到题的学生,系统安排一个课题给他,并把选课状态设为系统安排)                                    

可以用程序逻辑控制一个学生选三个课题.也可以用数据约束来控制.

没有考虑密码的情况,要的话可以加张表.


|--------|                              |--------|
|      | 1      ------      n    |         |
| 系 表|-----(拥有) ----> | 教师表 |
|      |         ------         |             |
|--------|                               |--------|
   |1                                       |1
   |                                       |   
   ------                                     ------
( 拥有 )                              ( 拥有 )
   ------                                     ------
   |                                          |   
   |n                                        |n
   V                                       V   
|--------|                              |--------|
|         | n       ------      m   |         |
| 学生表 |-----(选课) ----> | 课题表 |
|      |         ------                |          |
|--------|                               |--------|



[ 本帖最后由 hjack 于 2006-3-28 20:06 编辑 ]

powerwind 发表于 2006-3-29 12:37

好,顶一下先!
有空再重新设计我的数据表

powerwind 发表于 2006-9-27 10:14

今天重做,问题仍在困扰.

因为学生可以选多个课题,而每个课题可以有多个老师负责,其中一个是主要负责人,其它两三个是合作者,而且一个课题面向一个或多个专业.这样,课题表的关系变得很复杂了.

课题和学生是多对多关系 (选课)
课题和系是多对多关系 (面向系)
课题和教师是多对多关系 (负责人)
这样,要查看一条课题信息,要求显示基本的题目,内容,要求外,也显示负责教师,面向系.
这样的SQL语句我写不出来.

为了解决这个"复杂的问题",有人将课题表的教师用名字而不用ID号,这样显示就不用连表查询;
对面向系,却把系号用分号格开,然后逐个查询;
而选课表,是 Wool 和 Hjack 所描述的那样的连接表,里面加上标记状态.

因为我们学院没有两个教师是同名字的,所以这样没有出现任何问题.
哪位有什么好的方法啊?请指点一二.
不然,这样的数据设计会让我变坏,以后遇到难题就想着为方便程序的编写而改变数据库的设计.

help!

iptton 发表于 2006-9-27 13:06

无甚概念的路过。。。。

PPT等一两年,我肯定给你个满意的答案。。。。

powerwind 发表于 2006-9-27 13:09

一两年后,没有IPv4了,只有IPv6啦!
呵呵~

善意灌水

thiswwww 发表于 2006-9-27 23:49

原帖由 powerwind 于 2006-9-27 10:14 发表
今天重做,问题仍在困扰.

因为学生可以选多个课题,而每个课题可以有多个老师负责,其中一个是主要负责人,其它两三个是合作者,而且一个课题面向一个或多个专业.这样,课题表的关系变得很复杂了.

课题和学生是多 ...

多表的关联可以做成视图的,

例:CREATE VIEW 视图名 ASselect a.*,b.* from table_a a,table_b b where a.condition=b.condition --oracle语法

这样就可以把视图名当表来用,但更新就要分开更新。

多表关联也一样的,只要加上关联条件就行。
一般不要用中文名做表的主键,因为多数系统会遇到中文编码问题。并且主键一般用数字类型,不用字符型。

powerwind 发表于 2006-9-28 00:13

视图当表来用,还真没试过.
试试看,结果似乎也挺复杂的.

谢谢提点.

thiswwww 发表于 2006-9-28 00:26

其实一句话,表分为基础数据和业务数据,你自己分类看看,分清就易办了。

深圳情缘 发表于 2006-9-28 20:03

根据WOOL和Hjack的设计,结合起来

由于此系统的角色权限并不复杂,所以不使用角色表。

1,系表                                                   
ID系号,系名

2,用户基表:(考虑到管理员可能不属于任何一个系的)
ID 用户名 密码 角色ID 名字手机电话权限标志(可用0,1,2表示管理员,学生,教师)(等等,一系列所有用户共同的信息)

3,教师表(继承用户基表)   与系表是多对一关系(或者也可以是多对多)
教师工号,系号,职称 (系号为外键)   

4,学生表 (继承用户基表)与系表是多对一关系
学号,系号,姓名,宿舍,选课上限,已选课数 (系号为外键)

5,课题表   
ID 课题号,课题名,内容,要求 , 选课上限 , 说明

6,选题关系表             与用户记表是多对多关系                                 
课题表ID,用户ID 选课状态

[ 本帖最后由 深圳情缘 于 2006-9-28 20:29 编辑 ]

powerwind 发表于 2006-9-28 22:59

首先感谢各位的热心帮助.

这个项目对我来说,主要的难点在:
课题和学生是多对多关系 (选课)
课题和系是多对多关系 (面向系)
课题和教师是多对多关系 (负责人)

这个复杂的关系里.

我现在对解决这个问题还觉得很头痛.

现在有这样的打算:

为解决课题和系是多对多关系 (面向系)的问题,我想在全局变量(application)中保存院系的信息,因为学院的系不会太多.

为解决课题和教师是多对多关系 (负责人)的问题,我想在课题表中加入主要负责教师和两个合作教师的ID,虽然这里限制了合作教师不能超过两个,但应该是合理的.

而选课关系表当然是以上几位所说的那样啦.

现在还没有动手更改,一直在想,因为对数据库了解不够,就是想不到什么好方法.
暂时让它这样.

PS:楼上很久没来了,忙什么? Spring?Hibernate?EJB?

深圳情缘 发表于 2006-9-29 13:05

唉 惨啊 好久没怎么学习了

进来公司后都没培训过就上马了    我的实力实在是太差了

一直都在改些头疼医头 脚疼医脚的BUG
和写Junit测试用例

BUG太多 系统不熟整天做些效率低下的工作都没学到什么新东西啊

很多东西都忘记了

现在开始搞开发,经验严重不足,进度比蜗牛还慢,实在是太羡慕WOOL和Hjack他们有大量项目经验的人啊

powerwind 发表于 2006-9-29 13:38

我是一点经验都没有,这是以前自找的,现在只能自己做点小东西,免得以后面试没话说.
可是自由地做,没有一点压力,进展很差,但感觉进步不少.
页: [1]
查看完整版本: 求软件工程课程设计项目的数据设计