工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3037|回复: 18

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

[复制链接]
发表于 2006-3-26 18:28 | 显示全部楼层 |阅读模式
题目要求:
  1. 一        毕业设计互选系统
  2. 1        需求
  3.         系统为教师、学生、管理人员分别提供操作界面,三部分分别由不同的同学完成。
  4.         能登记保存教师信息、学生信息,将信息存入文件。教师信息包括教师工号、姓名、年龄、职称、所在系、联系电话。学生信息包括学号、姓名、所在系、宿舍、联系电话。
  5.         能为教师登记毕设课题信息,将课题存入文件。课题信息包括课题编号、课题名、主持老师、面向系、课题内容、课题要求。
  6.         能为学生查看毕设课题资料。
  7.         能为学生填写毕设志愿,每个学生可以填写三个课题志愿。学生填写志愿必须跟课题面向系匹配。如果学生没有确定毕设题目,则可以任意修改志愿。课题没有确定选题同学则可以被够资格的同学申请。
  8.         填写完志愿后,能为教师筛选志愿,确定每个课题选题同学,每个课题只能由一个学生选题。
  9.         教师筛选志愿完成后,将没有选定毕设课题的同学和没有被选的课题进行随机分配,直到每个学生分配到课题为止。
  10.         提供每个同学选题统计的报表。
  11.         其它使系统更完善的功能。
复制代码


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

有兴趣,大家一起讨论.
发表于 2006-3-26 22:01 | 显示全部楼层
先把你的想法说说吧。。。
回复

使用道具 举报

 楼主| 发表于 2006-3-26 23:00 | 显示全部楼层
我是这样想的:

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

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

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

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

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

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

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

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

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

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

希望得到指正!
回复

使用道具 举报

发表于 2006-3-26 23:09 | 显示全部楼层
今晚没时间了,要走了,
明天再详细看看。
回复

使用道具 举报

 楼主| 发表于 2006-3-28 18:39 | 显示全部楼层
原帖由 hjack 于 2006-3-26 23:09 发表
今晚没时间了,要走了,
明天再详细看看。

有空不要忘记了啊!期待中...
回复

使用道具 举报

发表于 2006-3-28 19:04 | 显示全部楼层
角色表:
ID 角色名
你这个题目的数据有三条,分别是,老师,学生,管理员

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

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

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

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

使用道具 举报

发表于 2006-3-28 19:05 | 显示全部楼层
我按我理解这么设计...

大家讨论下...
回复

使用道具 举报

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

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

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


  1. |--------|                                |--------|
  2. |        | 1        ------      n    |           |
  3. | 系 表  |-----(  拥有  ) ----> | 教师表 |
  4. |        |           ------           |             |
  5. |--------|                               |------  --|
  6.      |1                                       |1  
  7.      |                                         |   
  8.    ------                                     ------
  9. ( 拥有 )                                ( 拥有 )
  10.    ------                                     ------
  11.      |                                          |   
  12.      |n                                        |n  
  13.      V                                         V   
  14. |-----  ---|                              |--------|
  15. |         | n       ------      m     |           |
  16. | 学生表 |-----(  选课  ) ----> | 课题表 |
  17. |        |         ------                |          |
  18. |--------|                               |--------|

复制代码

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

使用道具 举报

 楼主| 发表于 2006-3-29 12:37 | 显示全部楼层
好,顶一下先!
有空再重新设计我的数据表
回复

使用道具 举报

 楼主| 发表于 2006-9-27 10:14 | 显示全部楼层
今天重做,问题仍在困扰.

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

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

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

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

help!
回复

使用道具 举报

发表于 2006-9-27 13:06 | 显示全部楼层
无甚概念的路过。。。。

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

使用道具 举报

 楼主| 发表于 2006-9-27 13:09 | 显示全部楼层
一两年后,没有IPv4了,只有IPv6啦!
呵呵~

善意灌水
回复

使用道具 举报

发表于 2006-9-27 23:49 | 显示全部楼层
原帖由 powerwind 于 2006-9-27 10:14 发表
今天重做,问题仍在困扰.

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

课题和学生是多 ...


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

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

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

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

使用道具 举报

 楼主| 发表于 2006-9-28 00:13 | 显示全部楼层
视图当表来用,还真没试过.
试试看,结果似乎也挺复杂的.

谢谢提点.
回复

使用道具 举报

发表于 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 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2006-9-28 22:59 | 显示全部楼层
首先感谢各位的热心帮助.

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


这个复杂的关系里.

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

现在有这样的打算:

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

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

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

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

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

使用道具 举报

发表于 2006-9-29 13:05 | 显示全部楼层

唉 惨啊 好久没怎么学习了

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

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

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

很多东西都忘记了

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

使用道具 举报

 楼主| 发表于 2006-9-29 13:38 | 显示全部楼层
我是一点经验都没有,这是以前自找的,现在只能自己做点小东西,免得以后面试没话说.
可是自由地做,没有一点压力,进展很差,但感觉进步不少.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 07:10

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表