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