本人在开发一个小项目——“学生毕业设计管理”,其中有学生选题模块,如图1所示,我要求的功能是当鼠标放置到题目上时动态显示该题目的相关信息,如“课题简介”、“选题要求”、“允许选题人数”、“已选人数”等信息比较好处理,关键是“已选该题的学生名单”。
图1 思路1:设计一个已选该题学生名单字段(nvarchar(max)),动态修正该字段内容,添加选题学生比较容易,直接拼接字符串即可,删除比较麻烦,可以使用string.Replace(string oldValue, string newValue)对字符串进行解析处理。但这样设计不符合1NF要求,并且多有不便。
思路2:设计表结构如图2所示,该设计完全符合1NF、2NF、3NF,问题是如何按照题目(title_id)汇总选该题的学生(student_no)?形成如图3效果:
图2 图3 我的做法如下:
首先写一个汇总函数:
然后再创建一个视图:
即可得到如图3的结果。
以上是俺的做法,可能不是最好,希望抛砖引玉,或对同仁有启发作用。