教书愚人 毁人不倦
开发dotnet,走过人生的历程
posts - 159,comments - 939,trackbacks - 19

本人在开发一个小项目——“学生毕业设计管理”,其中有学生选题模块,如图1所示,我要求的功能是当鼠标放置到题目上时动态显示该题目的相关信息,如“课题简介”、“选题要求”、“允许选题人数”、“已选人数”等信息比较好处理,关键是“已选该题的学生名单”。


图1


思路1:设计一个已选该题学生名单字段(nvarchar(max)),动态修正该字段内容,添加选题学生比较容易,直接拼接字符串即可,删除比较麻烦,可以使用
string.Replace(string   oldValue,   string   newValue)对字符串进行解析处理。但这样设计不符合1NF要求,并且多有不便。

思路2:设计表结构如图2所示,该设计完全符合1NF、2NF、3NF,问题是如何按照题目(title_id)汇总选该题的学生(student_no)?形成如图3效果:


图2

图3

我的做法
如下:

首先写一个汇总函数:

 1ALTER function   [dbo].[getstr](@id   int)   
 2
 3 returns   varchar(2000)   
 4
 5 as     
 6
 7 begin   
 8
 9     declare   @str   nvarchar(2000)   
10
11     set   @str=''   
12
13     select   @str=@str+','+rtrim([student_name])   from   v_teacher_student   where   title_id=@Id   order   by   title_id   
14
15      set   @str=right(@str,len(@str)-1)   
16
17      return   @str   
18
19 end
20
21


然后再创建一个视图:

 

 1ALTER VIEW [dbo].[v_teacher_student_name]
 2
 3AS
 4
 5SELECT DISTINCT title_id, dbo.getstr(title_id) AS aaa
 6
 7FROM         dbo.v_teacher_student
 8
 9WHERE     (title IS NOT NULL)
10

 

即可得到如图3的结果。

以上是俺的做法,可能不是最好,希望抛砖引玉,或对同仁有启发作用。

posted on 2008-04-11 21:04 教书愚人 毁人不倦 阅读(722) 评论(9)  编辑 收藏 所属分类: dotnet技术

FeedBack:
2008-04-12 08:25 | 桑 [未注册用户]
俺不是你的同仁,看不懂你的做法好不好,弱弱地飘过。
  回复  引用    
2008-04-12 11:18 | 李战      
路过
  回复  引用  查看    
2008-04-12 14:18 | GuoYong.Che      
SQL SERVER 2005有个计算列功能,该列可以直接调用函数,这样可不用再创建视图来获取函数调用结果。
  回复  引用  查看    
2008-04-15 23:44 | PerfectDesign      
你这样做对执行计划没有好处。
自定义函数不可以结合外部计划被优化器优化的
  回复  引用  查看    
2008-04-16 00:06 | PerfectDesign      
另外楼主这句话:
select @str=@str+','+rtrim([student_name]) from v_teacher_student where title_id=@Id order by title_id
排序起来是不是有点多余啊?


使用计算列是个好想法,但是我始终没有想出来这个计算列的共识怎样写,还请GuoYong.Che指教。

我觉得写一个触发器可能是个比较好的办法,在有学生选课的时候,就直接更新
选课学生名字的字段,删除的时候也要相应的删除。
建议还是在存储过程里实现,不用触发器。
另外对于表的设计,我建议对于这个选课学生名字字段采用nvarchar(max),并且给这个表的填充因子指定到70或者80,不然可能会经常发生页拆分。
  回复  引用  查看    
2008-04-30 22:44 | 陈刚1 [未注册用户]
朋友,能否把代码和设计文档及数据库给我发一份。
让我参考学习一下,方便的话。

谢谢!!
  回复  引用    
2008-05-01 08:45 | m [未注册用户]
@陈刚1
数据库的表和代码全部在上面,没有其他的内容了

  回复  引用    
2008-05-02 22:23 | 玉米丰收      
楼主一定是个好老师呀,呵呵,好老师才敢用这样的昵称,嘿嘿,先赞一个!!!
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-16 08:30 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: