请教,这个数据库该如何建???????????????????????

citysoft 2007-10-31 09:36:25
问题:对十所学校的教师的教学质量进行调查,让学生投票!
1、学生通过姓名和学号进行登陆!
2、每个学生可以对教他的所有老师进行投票!
3、每个学生只能投一次!投过不能登陆!
我是这样设计的数据库!
学生表:
字段:学号 姓名 学校 班级 是否投票

投票表:
字段:id 学校 教师名 班级 课目 投票总数 满意率
1 二小 张三 三(1) 语文 1 94(百分比)

现在可以实现一般的功能,但是有两个问题

流程是:
1、学生登陆。
2、登陆后列出教他的所以老师。
3、点击老师姓名进入投票表。(这个表有十条,每条四个选项10分,8分,6分,4分)
4、投完票后把投票总数+1,存入满意率。

现在有两个问题:
1.如何限制一个学生只能投一次。(因为学生是一个一个的老师投票,如果投了两个老师关掉了IE,如何可以让他继续投其它没投过的老师,而投过票的老师不能再投)
2.比如投票表中的一条数据,后面的只存了一个学生投这个老师的满意率,如何存储多个学生对这个老师的满意率?
3.数据库如何设计效率高一些?
就是个多对多的关系,这个数据库怎么设计呢?有没有高手给个解决思路!!
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rydanliu 2007-11-04
  • 打赏
  • 举报
回复
ls厉害
fcuandy 2007-11-01
  • 打赏
  • 举报
回复
加上参数,上面已经是个完整的系统了.

如果再加上分支处理, 并改为存储过程, 你只用传参数进来, aspx程序里就是做输出工作了.
fcuandy 2007-11-01
  • 打赏
  • 举报
回复
随手乱敲,不排除手误


CREATE TABLE student
(id INT IDENTITY(1,1),Name VARCHAR(20) NOT NULL,ClassID INT NOT NULL,hasVoted BIT NOT NULL DEFAULT 0)

CREATE TABLE school
(id INT IDENTITY(1,1),Name VARCHAR(50) NOT NULL)

CREATE TABLE class
(id INT IDENTITY(1,1),schoolID INT NOT NULL,ClassName VARCHAR(20) NOT NULL)
/*若无必要,则可将 school 与 class 合二为一, 唯一健,也即标识用class.id来表示,school.Name从属于class的列*/


CREATE TABLE vote
(id INT IDENTITY(1,1),classID INT NOT NULL,teacher VARCHAR(20) NOT NULL,subject VARCHAR(10) NOT NULL,voteNum INT NOT NULL DEFAULT 0,degree DECIMAL(10,2) DEFAULT 100)

CREATE TABLE vote_item
(id INT IDENTITY(1,1),studentID INT NOT NULL,voteID INT NOT NULL,degree DECIMAL(10,2))

/*(引用lz原话"这个表有十条,每条四个选项10分,8分,6分,4分")
这些东西,你可以建表,或用xml存,或在前台html页写死. 最后用程序取得一个学生对一个老师的满意度存为vote_item.degree
如果用html页写死,注意程序检测提交的数据是否合法
*/

--student login. 需不要要加密码,你自己确定
DECLARE @id INT,@Name VARCHAR(20),@classID INT
SELECT @id=id,@Name=Name,@classID=classID FROM student WHERE Name=@loginName AND hasVoted=0 -- AND Password=@loginPassword
--这里我将id,name存放@id,@Name,@classID即指代,student login后它的session中的id和name,以后可以传给sqlString或SqlParameters

--能否对某个老师进行投票, @teacherid 为页面传入参数,即点对某个老师进行投票时,传入,也即对应的 vote.id
IF EXISTS(SELECT 1 FROM vote_item WHERE @teacherid=voteID AND @id=stuedntID)
--不能投票,给出提示
PRINT '已经投过票了'
ELSE
--需要检则@classID是否是当前选中的老师的classID,略去
--对这个老师进行投票,并算出单个degree,值为 @degree
--插入单个degree记录
INSERT vote_item SELECT @id,@teacherid,@degree
--更新teacher的总degree,即更新vote.degree
UPDATE a SET degree=degreeAVG
FROM vote a
INNER JOIN (
SELECT voteID,AVG(degree) degreeAVG
FROM vote_item
GROUP BY voteID
) b
ON a.voteID=b.voteID
--若学生已给其classid所有老师投过票
IF NOT EXISTS(SELECT 1 FROM vote a WHERE classID=@classid
AND NOT EXISTS(SELECT 1 FROM vote_item WHERE @id=studentID AND voteID=a.voteID)
)
--上面这条语句写的有点烦索.
/*可换用
IF (SELECT COUNT(*) FROM vote WHERE classid=@classid) != (SELECT COUNT(*) FROM vote_item WHERE studentid=@id)
若系统数据处理的严谨程度不高,或并发处理不完善,且勿用此句
*/
--更新student.hasVoted为1
UPDATE student SET hasVoted=1 WHERE id=@id
END



citysoft 2007-10-31
  • 打赏
  • 举报
回复
嗯,这个方法可行,就是两张实体表,一张关系表,我当时也是这个想法,但是我就觉得对关系表的数据量太大有些遗憾!数据量应该是=学生数*老师师*课目数吧?
lishijie910123 2007-10-31
  • 打赏
  • 举报
回复
这是个多对多的管理,
需要三张表,
一张学生表,
字段:学号,姓名,学校,班级 ,
一张老师表,
字段:老师ID,老师名称,学校
关系表:
字段:学号,老师ID,满意度
问题1:学生投票的时候就根据学号和老师ID这两个条件判断关系表中是否存在这条记录,如果有则不能在投
问题2:根据老师ID,求出关系表中的满意度的平均值就是他的满意度

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧