寫(xiě)作業(yè)的思考。假如有這么一個(gè)簽到系統(tǒng)
按照范式設(shè)計(jì)有
學(xué)院表
課表(學(xué)院課表一對(duì)多)
老師表
學(xué)生表
教課表(老師課表多對(duì)多)
上課表(學(xué)生課表多對(duì)多)
排課表(課表排課一對(duì)多)
簽到表(排課簽到一對(duì)多)
簽到記錄表(簽到,簽到記錄一對(duì)多)
假如設(shè)定兩個(gè)查詢
學(xué)生由學(xué)號(hào)和課號(hào)查詢簽到
教師由教工號(hào)和課號(hào)查詢
而在我實(shí)現(xiàn)這個(gè)系統(tǒng)時(shí),隨便一個(gè)查詢動(dòng)作都建立了好多張表,為了獲取排課,課程,老師,學(xué)院信息。
我覺(jué)得這樣做,,有點(diǎn)麻煩?可是把它放到代碼實(shí)現(xiàn)也要不斷發(fā)起查詢很多次呀。。
比如這是我剛剛寫(xiě)的,,一個(gè)獲取這個(gè)學(xué)生本周需要簽到的課程,我想看看瞎幾把寫(xiě)可以聯(lián)立成什么樣子,。功能的目的我達(dá)到了
SELECT
att.user_usr_id, att.course_coz_id,
sch.sch_id, sch.sch_year, sch.sch_term, sch.sch_start_week, sch.sch_end_week,
sch.sch_fortnight, sch.sch_day, sch.sch_start_time, sch.sch_end_time, sch.course_coz_id, sch.location_loc_id,
loc.loc_id, loc.loc_name,
coz.coz_id, coz.coz_name, coz.coz_size, coz.coz_act_size, coz.coz_att_rate,
tea.user_usr_id tea_user_usr_id, tea.course_coz_id,
tch.usr_name tea_user_usr_name,
coz_sch.sch_id coz_sch_id, coz_sch.sch_year coz_sch_year, coz_sch.sch_term coz_sch_term,
coz_sch.sch_start_week coz_sch_start_week, coz_sch.sch_end_week coz_sch_end_week, coz_sch.sch_fortnight
coz_sch_fortnight,
coz_sch.sch_day coz_sch_day, coz_sch.sch_start_time coz_sch_start_time, coz_sch.sch_end_time coz_sch_end_time,
coz_sch.course_coz_id coz_sch_course_coz_id, coz_sch.location_loc_id,
coz_sch_loc.loc_id coz_sch_loc_id, coz_sch_loc.loc_name coz_sch_loc_name,
si_id, si_week, si_time, si_auto,
sir_id, sir_time, sir_leave, sir_approve, sir_voucher, sir.sign_in_${curYear}_${curTerm}_si_id sir_id,
sir.user_usr_id sir_user_usr_id
FROM attendance att
JOIN schedule sch ON att.course_coz_id = sch.course_coz_id
LEFT OUTER JOIN location loc ON loc.loc_id = sch.location_loc_id
<!-- sch coz -->
JOIN course coz ON sch.course_coz_id = coz.coz_id
LEFT OUTER JOIN teaching tea ON coz.coz_id = tea.course_coz_id
LEFT OUTER JOIN schedule coz_sch ON coz.coz_id = coz_sch.course_coz_id
LEFT OUTER JOIN location coz_sch_loc ON coz_sch.location_loc_id = coz_sch_loc.loc_id
JOIN user tch ON tea.user_usr_id = tch.usr_id
<!-- history sign in -->
JOIN sign_in_${curYear}_${curTerm} si ON sch.sch_id = si.schedule_sch_id
LEFT OUTER JOIN sign_in_rec_${curYear}_${curTerm} sir ON
si.si_id = sir.sign_in_${curYear}_${curTerm}_si_id AND
att.user_usr_id = sir.user_usr_id
<where>
sir.sir_id IS NULL <!-- 還沒(méi)簽到de -->
AND att.user_usr_id = #{usrId} <!-- 用戶id -->
</where>你回寫(xiě)這么多字段,很難說(shuō)都是當(dāng)前用戶需要的。可以考慮兩點(diǎn)建議, 一是可以根據(jù)具體查詢場(chǎng)景對(duì)字段分解下。二是對(duì)部分聯(lián)合查詢建立視圖,對(duì)視圖再加上條件查詢,業(yè)務(wù)邏輯更清晰,同時(shí)權(quán)限也好控制。還有就是對(duì)改動(dòng)不多的字段進(jìn)行適當(dāng)冗余,保存在多個(gè)表里,這樣可以提高查詢效率。
個(gè)人認(rèn)為遵守范式前提保證查詢效率和開(kāi)發(fā)時(shí)間,得到的好處是便于維護(hù)和減少存儲(chǔ)空間(誰(shuí)還在乎這個(gè)?)。需要做的就是好處和成本之間做均衡。
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。