双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

请教一个数据库设计的问题

SilverNet SilverNet 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
现在我要改变的系统的数据库是一个答题教学系统,现在遇到了一个数据库设计方面的问题。
系统中的答题为选择题,以往的数据库设计如下:

IF OBJECT_ID('Question') IS NOT NULL DROP TABLE Question
CREATE TABLE SUBJECT(
SubjectID INT PRIMARY KEY IDENTITY,
SubjectName VARCHAR(1000), --题目内容
AnswerA VARCHAR(1000), --答案A
AnswerB VARCHAR(1000), --答案B
AnswerC VARCHAR(1000), --答案C
AnswerD VARCHAR(1000), --答案D
RightAnswer CHAR(4) --可以为A,也可以为ABCD等……即满足单选和多选
)


这样设计就将将一道题目存在一行数据中,程序调用起来很方面,很容易就能对题目数据进行操作。

现在因为以上设计有2个缺陷不足:
1.虽然系统中暂时一道题目最多只能设置4个答案,但是用户有时候只填写2个或3个答案,这样其他答案就是空白,这样导致数据库字段没有充分的利用。
2.考虑到系统中如果用户以后需要一道题目填入更多的答案就会造成现有的设计无法支持(暂时不存在这个问题)。

现在我想使用如下的设计方式:

//题目表
IF OBJECT_ID('Question') IS NOT NULL DROP TABLE Question
CREATE TABLE Questions(
queID INT PRIMARY KEY IDENTITY,
queContent VARCHAR(1000) --题目内容
)
GO
//答案表
IF OBJECT_ID('ANSWERS') IS NOT NULL DROP TABLE ANSWERS
CREATE TABLE ANSWERS
(
ansID INT PRIMARY KEY IDENTITY,
ansContent VARCHAR(1000), --答案内容
isRight BIT --是否正确
)
GO
//题目答案关联表
IF OBJECT_ID('QA') IS NOT NULL DROP TABLE QA
CREATE TABLE QA(ID INT PRIMARY KEY IDENTITY,queID INT,ansID INT)
GO


这样就没有以上的缺陷了,一个题目可以根据关联它的答案来算出这道题有多少选择答案,以及对的答案。
但是这样一来程序这边做起来就麻烦多了,需要调用3个表才能返回一道题的数据。并且插入一道题都要先写题目名到题库,然后写该题的答案到答案表,然后再写关系到题目答案的关联表,对程序方面的效率和数据库的效率不知道有没有影响。

请问下各位高手我需不需要把我以前的数据结构改成现在的。或者各位高手有更好的方法。
...全文
评论 9
收藏 已收藏
分享
返回顶部
SilverNet
MS-SQL Server 34,876 成员 254,635 内容