摘要:前言近期在做一套答題系統(tǒng),參考了某教育機(jī)構(gòu)的設(shè)計(jì)。題庫名稱如上述表結(jié)構(gòu),題庫即為分類,所以沒有過度設(shè)計(jì)。試題試題應(yīng)該算是整個(gè)系統(tǒng)設(shè)計(jì)過程中比較繁瑣的一部分了。判分到判分這步算是整個(gè)考試完成了,那是不可能的,實(shí)際完成了不到的功能。
前言
近期在做一套答題系統(tǒng),參考了某教育機(jī)構(gòu)的設(shè)計(jì)。本章跟大家聊聊考試系統(tǒng)中的核心 - 如何考試?
簡單點(diǎn)說,所謂考試系統(tǒng)就是答題系統(tǒng),通過答題完成進(jìn)行判分后返回其答題結(jié)果即完成整個(gè)流程。
當(dāng)然過程中有些數(shù)據(jù)需要存儲,有些則可在后期查詢計(jì)算(個(gè)人理解),如有誤導(dǎo)請速噴
如上圖所示,一套試卷有N道試題,每道試題又是由題干與選項(xiàng)、答案組成,這樣才匯聚了完整的一套答題(考試)系統(tǒng)。
試卷一次考試(問卷)則使用一套試卷,考試(問卷)與考試則為一對一的關(guān)系,而試卷與考試(問卷)則是多對多的關(guān)系
CREATE TABLE `company_paper` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "試卷名稱", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
這只是一份簡單的設(shè)計(jì),具體要看實(shí)際需求,如果是考試相關(guān)需求需要添加
考試時(shí)間 (time)
考試及格分?jǐn)?shù) (grade)
而類似字段實(shí)際不應(yīng)加在試卷上,上面已經(jīng)說過了試卷與考試是多對多的關(guān)系,所以上述字段應(yīng)加入在考試表中。
CREATE TABLE `company_examine` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `paper_id` int(11) NOT NULL COMMENT "試卷編碼", `start_time` int(11) NOT NULL COMMENT "開考時(shí)間", `time_limit` int(11) NOT NULL COMMENT "限時(shí)", `score` double NOT NULL COMMENT "通過分?jǐn)?shù)", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
上述為考試表,考試表通過paper_id綁定對應(yīng)試卷。
題庫題庫與試卷沒有關(guān)系,是以試題為對象的分類管理罷了。將試題歸類后在添加試卷動作時(shí)選擇試題比較方便。
當(dāng)然,他也是一個(gè)多對多的關(guān)系。
CREATE TABLE `company_question_database` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "題庫名稱", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
如上述表結(jié)構(gòu),題庫即為分類,所以沒有過度設(shè)計(jì)。
試題試題應(yīng)該算是整個(gè)系統(tǒng)設(shè)計(jì)過程中比較繁瑣的一部分了。先來看下數(shù)據(jù)表
CREATE TABLE `company_question` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `database_id` int(11) NOT NULL COMMENT "所屬題庫", `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "題目", `option` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "選項(xiàng)", `answer` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "答案", `type` tinyint(4) NOT NULL DEFAULT "0" COMMENT "類型 0單選 1多選", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
首先按照傳統(tǒng)考試的試卷將試題分為三大部分
題干(題目)
選項(xiàng)
答案
這三大部分匯總為一道題,這里的option與answer選擇使用序列化方式去存儲
// 選項(xiàng) >>> serialize (["A"=>"選項(xiàng)A","B"=>"選項(xiàng)B"]) => "a:2:{s:1:"A";s:7:"選項(xiàng)A";s:1:"B";s:7:"選項(xiàng)B";}" // 答案 >>> serialize (["A"]) => "a:1:{i:0;s:1:"A";}"
沒有使用json方式存儲有倆點(diǎn)原因,自認(rèn)為mysql對json的查詢做的不夠完善,sql寫的太復(fù)雜,其后者則是擴(kuò)展性不夠強(qiáng),低版本不兼容。
判分到判分這步算是整個(gè)考試完成了80%,那是不可能的,實(shí)際完成了不到50%的功能。依舊引用電商相關(guān)文章的那句話
把能存儲的全部存起來
判分這里是這樣做的
CREATE TABLE `company_user_paper` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT "用戶編碼", `paper_id` int(11) NOT NULL COMMENT "試卷編碼", `answer` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "答案", `score` double(8,2) NOT NULL DEFAULT "0.00" COMMENT "得分", `correct` double(8,2) NOT NULL DEFAULT "0.00" COMMENT "正確率", `date_length` int(11) NOT NULL DEFAULT "0" COMMENT "考試用時(shí)長", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
見上表,將用戶每次考試的動作細(xì)節(jié)全部記錄,方便查詢,答案這塊依舊使用的序列化的方式。在檢查答案時(shí),直接反序列化計(jì)算數(shù)組差集既完成判分,獲取交集也是沒問題的。
$answerArr = unserialize($answer) $successAnswerArr = unserialize($successAnswer) array_diff($answerArr,$successAnswerArr)
考試畢竟不是一道題那么簡單,你可以選擇迭代去完成。如果題目數(shù)量比較大?;蛘哂脩粝鄬校ㄗh還是使用隊(duì)列去異步完成判分操作并通過socket或者其他方式通知到客戶端(web端)更保險(xiǎn)一些。
致謝本章的內(nèi)容到此結(jié)束,感謝你看到這里,希望本篇可以幫到你。謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71910.html
摘要:前言近期在做一套答題系統(tǒng),參考了某教育機(jī)構(gòu)的設(shè)計(jì)。題庫名稱如上述表結(jié)構(gòu),題庫即為分類,所以沒有過度設(shè)計(jì)。試題試題應(yīng)該算是整個(gè)系統(tǒng)設(shè)計(jì)過程中比較繁瑣的一部分了。判分到判分這步算是整個(gè)考試完成了,那是不可能的,實(shí)際完成了不到的功能。 showImg(https://segmentfault.com/img/bVbiNGI?w=720&h=449); 前言 近期在做一套答題系統(tǒng),參考了某教育...
摘要:下面就讓我們來看看你應(yīng)該考慮哪些最受歡迎的云計(jì)算認(rèn)證。是一個(gè)國際機(jī)構(gòu),負(fù)責(zé)推動云計(jì)算專業(yè)人員的標(biāo)準(zhǔn)培訓(xùn)和認(rèn)證。目前,提供一個(gè)認(rèn)證和五個(gè)云認(rèn)證,范圍從專業(yè)云管理員到專業(yè)云解決方案架構(gòu)師。關(guān)于IT,如果說有一點(diǎn)可以肯定的,那就是投資云永遠(yuǎn)也不晚。隨著云對IT和整個(gè)業(yè)務(wù)越來越重要,對云技能的需求也只會越來越大。但是,要證明你在這個(gè)競爭激烈的就業(yè)市場中具有所需的技能和知識,可能是一件很難的事情。如果...
摘要:請考生務(wù)必妥善保管個(gè)人網(wǎng)報(bào)用戶名密碼及準(zhǔn)考證居民身份證等證件,避免泄露丟失造成損失。自主劃線院校會在月陸續(xù)公布初試成績基本要求。鎖定時(shí)間到達(dá)后,如招生單位未明確受理意見,鎖定解除,考生可繼續(xù)填報(bào)其他志愿。 ...
摘要:持續(xù)合規(guī),持續(xù)迭代對于大多數(shù)學(xué)生來說,考試日是他們教育生涯中最緊張的經(jīng)歷之一。在您的生態(tài)系統(tǒng)中實(shí)現(xiàn)審計(jì)合規(guī)性可能是一個(gè)反復(fù)的過程,并且不必在審計(jì)到期前的五天內(nèi)進(jìn)行壓縮。迭代的范圍和執(zhí)行是事情容易崩潰的地方。持續(xù)合規(guī),持續(xù)迭代:對于大多數(shù)學(xué)生來說,考試日是他們教育生涯中最緊張的經(jīng)歷之一。考試是對你學(xué)習(xí)、吸收和反芻課程能力的半公開聲明,雖然及格的獎(jiǎng)勵(lì)相當(dāng)平凡,但失敗的后果是巨大的。我的教育經(jīng)驗(yàn)表...
閱讀 3165·2021-11-04 16:09
閱讀 3138·2021-09-23 11:49
閱讀 3654·2021-09-09 09:33
閱讀 3642·2021-08-18 10:22
閱讀 2050·2019-08-30 15:55
閱讀 3637·2019-08-30 15:53
閱讀 2662·2019-08-28 18:08
閱讀 903·2019-08-26 18:18