2021資料庫系統專題: 政大課程評價系統 === [TOC] ### 專題題目、組名 ### 組長及組員姓名學號與系級 ### 每位成員負責之任務分工、貢獻百分比 ### 需求分析 政大的學生目前在選課的時候,若是想知道某堂課的評價,目前的做法有2種 1. 加到追蹤清單後,查看使用政大官方上傳的評價 2. 自己google 我們認為政大缺乏一個統一的課程評價平台, 所以我們決定開發一個統整所有政大課程資訊的平台 希望能解決同學在選課時資訊不足的問題 ### 系統功能 主要的功能包含瀏覽課程跟課程評價,上傳修改跟刪除課程評價, 另外,與一般課程評價網站不同的是多了以下幾個功能: 1.留言板(課程底下有留言板可以交流) 2.貼文版(使用者可以發布貼文) 3.收藏課程(使用者可以將課程收藏) 4.課程尋找過濾器(提供親切的圖形介面供使用者過濾出自己想找的課程) 5.課程資源分享(同學能分享筆記跟考古題) 6.二手書交易(此功能的前端尚未實作,不過有先規劃資料庫,未來可能會移除此功能) ### ER Model //畫圖 ### Relational Schema //畫圖 ### 系統架構 //放圖 ### 心得 ## 成員 資科三 謝惟寧 資科三 李順斌 資科三 郭沛澐 資科四 鄭家宇 金融四 陳冠全 資科四 張昱威 資科四 陶亮清 ## 工作分配 謝惟寧、李順斌:12/12前 資料需求分析、系統功能分析 陶亮清、陳冠全:12/19前 ER model, Relational Schema設計報告 鄭家宇、張昱威、郭沛澐:12/26前 系統架構(系統功能、開發的程式語言、DBMS與工具、系統模組) ## 開發問題 1. 政大課程查詢抓下來excel檔沒有照 "必/選修"、"整開"、"通識"、"體育/國防" 分 需要自己分類 2. 抓不到過去幾學年的資料 3. 沒有系上教授資料 4. Professor ### 基本feature 一個web app 提供政大學生(有@g.nccu.edu.tw帳號的人才行) 課程評價跟課程資源分享, 功能包含上傳跟瀏覽課程評價(統計過的) 還有分享課程資源(上傳/下載檔案) (課程資料是齊全且整理過的) ### 進階feature 為GDSC選課系統專案提供課程評價(提供資料庫裡的資料) 學生可以crud自己的發表跟分享並幫其他貼文按讚(類似FB) //以下目標還在計畫當中,不會實作 學生彼此可以聊天(政大選課+交流平台)(類似可以聊天的DCARD) 學生彼此可以交易(政大電商平台)(類似蝦皮) ## Schema user course courseFeedBack professor: name, self_URL, lab_URL, 職位, e-mail, 學歷, 大頭照, department department: name, URL, location, professors ------------------------------ ## 簡單的開發進度時間表 **1/11期末考** ![進度追蹤](https://i.imgur.com/erDdk0j.jpg) ![Requirement](https://i.imgur.com/ueRVHuC.jpg) ## PDF [12/12](https://github.com/niummxvy/Course_Evaluation/blob/main/Introduction.pdf) [12/19](https://github.com/niummxvy/Course_Evaluation/blob/main/ER%20Model%20%26%20Relational%20Schema%20Design%20Report.pdf) [12/26](https://github.com/niummxvy/Course_Evaluation/blob/main/System%20Architecture.pdf) -------------------------------- # 以下資料供上台ppt跟作業pdf製作參考: 系統架構 系統功能 程式語言 DBMS 工具 系統模組 開發上的問題: ### 前端: 使用 React.js + material UI.js ### 後端: 使用 express.js ### DBMS: 使用mongo db 使用 mongoose.js 進行資料CRUD ### 使用到的第三方API: google AUTH(google 第三方認證登入API) ### 使用到的cloud hosting service 暫時使用heroku的免費方案放置前端web app跟後端server 正在嘗試改為使用AWS 使用mongo atlas免費方案作為雲端資料庫 ### 架構圖: (待補.. 12/25號前會補上 by 惟寧) ### 系統功能/來源: 以從政大課程查詢網抓下來的excel課程檔為核心,加上使用者登入登出系統, 拼湊成一個課程評價網,主要的功能包含瀏覽課程跟課程評價,上傳修改跟刪除課程評價, 另外,與一般課程評價網站不同的是多了以下幾個功能: 1.留言板(課程底下有留言板可以交流) 2.貼文版(使用者可以發布貼文) 3.收藏課程(使用者可以將課程收藏) 4.課程尋找過濾器(提供親切的圖形介面供使用者過濾出自己想找的課程) 5.二手書交易(此功能的前端尚未實作,不過有先規劃資料庫,未來可能會移除此功能) ### 開發難點: ##### 1.資料來源: 1-A.目前需要個電算中心要過去年份的課程excel檔,不然目前只有110學年上學期的課程資料 1-B.更完整的資料,我們希望能有教授(professor)跟系所(department)的完整詳細資料,這樣本網站便可以提供關於修課更詳細的資料並給使用者做討論 ##### 2.經費: 免費的cloud hosting server速度慢,影響使用者體驗 ##### 3.使用者行為 因為有提供檔案上傳功能,對超出預期的使用者行為目前沒有對應的處理方法(例如:使用者張貼教授不希望公開的東西) ##### 4.資訊安全: 無法保證本網站不會被駭入,所以使用第三方登入系統,仍然有學號,頭貼,EMAIL等私密資料會被本網站存取 ### DEMO網址: ([點此](https://nccucourseguide.herokuapp.com/integrated)) ### 資料處理: 從政大課程excel檔開始,觀察9碼科目代碼的編碼規律,先簡單將課程分類成係開 整開 通識 體育 後,再細分成不同子類別 e.g.通識可再分成人文/社會/自然 然而,若要擴展成一個能提供教授跟系所等其他詳細資料的網站,只靠此課程表的資料仍遠遠不足,所以在資料庫規劃跟實作上有不同,不同的地方詳細如下: 1.規劃: 共有 Department(系所) professor(教授) 以department為外來鍵(一個教授僅屬於一個科系) course(課程) 以department跟professor為外來鍵 user(使用者) userFeedback(課程評價) 以user跟course為外來鍵 userResource(課程資源) 以user跟course為外來鍵 userPost(使用者貼文) 照上面的規劃: 使用course join professor跟department 即可保證提供的課程資料是最新的, 且教授資料更新時,僅需要更新professor這張table,不需要連同更新course 若為效能考量,不想要每次查詢課程時需要等待join資料表的時間,也可定期執行query將完整的課程資料寫入一張快取資料表,省去大query的等待時間 2.實際情況: 共有 course(課程) user(使用者) userFeedback(課程評價) 以user跟course為外來鍵 userResource(課程資源) 以user跟course為外來鍵 userPost(使用者貼文) 因為沒有跟學校要到教授跟系所得詳細資料,所以照規劃設計資料庫,它的department跟professor是沒有資料的 所以我們直接將課程資料excel檔轉成csv檔後再放入資料庫,使得這張資料表沒有外來鍵也沒有其他資料表可以join, 使得本網站可以提供的資料僅有課程,沒有教授跟系所等資料 ## 1/1 小組會議:分配code Google API:向Google發送request,得到response MVC(Model, View, Controller): 舉廚房的例子, Model=models:食材; View=router:點菜/客人:提出request,接收廚師的response; Controller=controllers:後台/廚師:接收客人的request,用models的食材做出客人的需求,再response給客人 有一些js檔是MVC都有,形成pipeline `Course.find({type:type, semester}) // find回傳多個,findOne回傳一個` ->`SELECT type, semester FROM Course` ~~user: GoogleSignIn~~ xlsx -> csv -> js 每人:資料庫、API規劃與設計、大家一起做功能設計 ~~code是其他組員協助完成的~~ 已分工,看最下面 course, courseFeedBack. courseResource是最主要的 順斌:Professor, department 主要執行檔為`index.js` `index.js` `app.use('/course', courseRoutes); // 有關/course的連接是由courseRoutes這個路由器負責()` `course.js` `router.post('/department', getCoursesByDepartment); // 有關於/department的資料取得,是由getCoursesByDepartment負責` `.post`把資料放body `.get`直接把資料放到網址上(`?`後面的東西) `router.use(function(req, res, next) {` ` res.header("Access-Control-Allow-Origin", "*"); ` ` // update to match the domain you will make the request from` ` // res.header("Access-Control-Allow-Headers", Origin, X-Requested-With, Content-Type, Accept");` ` next();` ` }); // 可以進來的網域有哪些` `mongoose`: 和資料庫連接 ## 小組分工表 惟寧: 前端 亮清: courseFeedBack 昱威: courseResource 冠全: user 順斌: csv 沛澐: post 家宇: course