自己理了理,总是搞不清,准备做这几张表
每次自动从题库随机抽题组成一张卷子,每张卷子20题选择,6道简答,选择题电脑批改,简答题老师给分总觉得最后的试卷表很臃肿,但是又没有想到好方法去解决,我觉得在查询时是需要输出整张试卷的(包括学生答错的),不保存在一起会要查询多张表,有没有别的设计方法。新手发言,大家请指教!SQLServer 表 关系图
每次自动从题库随机抽题组成一张卷子,每张卷子20题选择,6道简答,选择题电脑批改,简答题老师给分总觉得最后的试卷表很臃肿,但是又没有想到好方法去解决,我觉得在查询时是需要输出整张试卷的(包括学生答错的),不保存在一起会要查询多张表,有没有别的设计方法。新手发言,大家请指教!SQLServer 表 关系图
如果是实实在在的表的话,那你的冗余字段太多了。
1.有了学生编号,其他的姓名等,直接按照编号在学生表中读。
2.每一道选择题,只要在1列中写入选择题编号,然后在题库表中读取全部内容。
3.得分新建一个表,存入该生的得分。
试卷明细表 每道题一条记录 字段:试题id,所属试卷id,分类,序号,每题题目,分数,答案学生表 学生id学生答卷头表 每人每卷一条记录 字段:答卷id,学生id,试卷id,参与时间,总分,
学生答卷明细表 每道题一条记录 字段:答卷明细id,答卷id,试题id,答题内容,得分,老师评点,。试卷相当于是树的模板(明细是题目)
答卷相当于是同一个树模板套出来的一个个实例树(每人一个实例,节点明细是答案)
--==================试题===============
--题目主表
CREATE TABLE #Question
(
Id int primary key identity(1,1),
[Subject] int not null,--科目
Question nvarchar(max) not null,--题干
[Type] int not null --题目类型:0、选择题,1、简答题
)
--选择题扩展表
CREATE TABLE #OptionQuestion
(
Id int primary key identity(1,1),
QuestionId int not null,--Question表的主键
[Content] nvarchar(max) not null, --选择题的选择项
[Option] char(1) not null, --选项编号:A、B、C、D、E...
[IsSignle] char(1) default('Y') --是否单选:Y-单选,N-多选
)--选择题的标准答案(如果是多选题,则该表中将存在多条记录)
CREATE TABLE #OptionStandard
(
Id int primary key identity(1,1),
QuestionId int not null,--Question表的主键
OptionId int not null --OptionQuestion表的主键
)--==================试卷==================
--试卷主表
CREATE TABLE #Paper
(
Id int primary key identity(1,1),
[Subject] int not null,--科目
Scores decimal(5,1)--满分
)--试卷题目
CREATE TABLE #PaperQuestion
(
Id int primary key identity(1,1),
PaperId int not null,--Paper主键
[Number] int not null,--题号
QuestionId int not null,--Question主键
Scores decimal(5,1) --本题满分
)--==================答卷==================
--答卷主表
CREATE TABLE #Answer
(
Id int primary key identity(1,1),
StudentId char(10), --学号
PaperId int not null,--Paper主键
Scores decimal(5,1) --本卷最终得分
)--答卷详细表
CREATE TABLE #AnswersDetail
(
Id int primary key identity(1,1),
AnswerId int not null,--Answer表主键
PaperQuestionId int not null,--PaperQuestion主键
Answer nvarchar(max),--答案(该题为简答题时即学生答案,为选择题时即为A、B、C、D...选项,多选题各选项间用,隔开)
Scores decimal(5,1) --本题最终得分
)