You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中能否将Quiz游戏试题选项存为数组以支持动态数量选项需求

首先可以在MySQL中实现动态选项的存储,支持两种常用方案,分别适配不同的业务场景:

方案1:JSON类型存储选项数组(适合小型简单项目)

MySQL 5.7及以上版本支持原生JSON类型,可以直接将选项以数组形式存在单表中,改造成本最低。

操作步骤

  • 调整原Questions表结构,删除固定选项字段,新增JSON类型的选项字段:
ALTER TABLE Questions 
DROP COLUMN Option_A, 
DROP COLUMN Option_B, 
DROP COLUMN Option_C, 
DROP COLUMN Option_D,
ADD COLUMN options JSON NOT NULL COMMENT '存储选项数组,格式示例:["选项1","选项2","选项N"]',
MODIFY COLUMN answer VARCHAR(255) NOT NULL COMMENT '存储正确选项内容或对应数组下标';
  • 插入数据示例:
INSERT INTO Questions (id, Question, options, answer) 
VALUES (
  1, 
  '以下属于MySQL支持的数据类型的是?', 
  '["INT","VARCHAR","JSON","OBJECT"]', 
  'JSON'
);

优缺点

  • 优点:改造成本极低,单表查询无需关联,选项数量可任意调整
  • 缺点:不符合关系型数据库三范式,对选项做复杂统计、模糊查询时性能较差,无法灵活扩展选项的额外属性(如选项排序、选项解析、多正确选项支持等)

方案2:一对多关联表设计(推荐,适配中大型项目/扩展需求多的场景)

这是关系型数据库处理一对多关系的标准实现,一道题对应多个选项,单独建选项表关联,扩展性最强。

操作步骤

  • 第一步:清理原Questions表的冗余字段,仅保留题目核心属性:
ALTER TABLE Questions
DROP COLUMN Option_A,
DROP COLUMN Option_B,
DROP COLUMN Option_C,
DROP COLUMN Option_D;
-- 调整后表字段:id(题目唯一ID)、Question(题目内容)
  • 第二步:新建Question_Options选项表,和题目表通过question_id关联:
CREATE TABLE Question_Options (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '选项唯一ID',
    question_id INT UNSIGNED NOT NULL COMMENT '关联题目表的id',
    option_content VARCHAR(255) NOT NULL COMMENT '选项内容',
    is_correct TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否为正确选项,1=是,0=否,支持多选',
    sort_order INT NOT NULL DEFAULT 0 COMMENT '选项排序值,控制前端展示顺序',
    FOREIGN KEY (question_id) REFERENCES Questions(id) ON DELETE CASCADE
) COMMENT '题目选项表,存储每道题的所有选项';

使用示例

  1. 新增题目
INSERT INTO Questions (id, Question) VALUES (1, '以下属于关系型数据库的是?');
  1. 新增对应选项(可任意新增数量)
INSERT INTO Question_Options (question_id, option_content, is_correct, sort_order)
VALUES 
(1, 'MongoDB', 0, 1),
(1, 'MySQL', 1, 2),
(1, 'Redis', 0, 3),
(1, 'PostgreSQL', 1, 4),
(1, 'SQLite', 1, 5);
  1. 查询某道题的完整信息
SELECT q.Question, qo.option_content, qo.is_correct 
FROM Questions q
LEFT JOIN Question_Options qo ON q.id = qo.question_id
WHERE q.id = 1
ORDER BY qo.sort_order ASC;

优缺点

  • 优点:完全符合数据库设计规范,支持多选、选项排序、选项扩展属性新增、选项相关统计等各类需求,性能稳定
  • 缺点:需要操作两张表,比单表JSON方案多一次关联查询

选型建议

如果是小型个人项目,业务逻辑简单无扩展需求,选JSON方案即可;如果是正式上线的项目,后续有功能扩展可能,优先选关联表方案。

内容的提问来源于stack exchange,提问作者Science Meetup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:54:03