郁海峰
(張家口市城鄉(xiāng)規(guī)劃局園冶信息中心,河北張家口075000)
新聞?dòng)懻摻M一般要有“討論主題”、“討論看板”及“參與討論”,它們所顯示的內(nèi)容分別如下:
討論主題:包含討論主題的發(fā)起人、發(fā)起人的E-mail、發(fā)起日期、主題內(nèi)容.
討論看板:其它人參與討論的內(nèi)容,也包含參與討論者的姓名、E-mail、參與討論日期、主題及內(nèi)容.
參與討論:此區(qū)段為一輸入窗體,可讓參與討論者輸入自己的基本個(gè)人信息及意見.
根據(jù)以上需求新聞?dòng)懻摻M基本模塊設(shè)計(jì)應(yīng)該有:主題總表及發(fā)起討論 (Title.asp)、保存新發(fā)起的討論 (TitleNew.asp)、進(jìn)入某一討論主題 (Detail.asp)、保存某一主題新加入的討論 (Det New.asp)、保存討論信息的數(shù)據(jù)庫(kù) (New.mdb).其關(guān)系如圖1所示[1].
至于TitleNew.asp及DetNew.asp則分別是上網(wǎng)者在 Title.asp及Detail.asp輸入自己的討論主題時(shí),用來保存討論數(shù)據(jù)的程序.
圖1 基本模塊關(guān)系圖
瀏覽Title.asp網(wǎng)頁(yè)可以發(fā)起新的討論主題.首先在窗體中輸入相關(guān)的數(shù)據(jù),然后按下“送出討論主題”按鈕,接著會(huì)啟動(dòng) TitleNew.asp.此模塊會(huì)將所輸入的數(shù)據(jù)保存在News.mdb數(shù)據(jù)庫(kù)的 Titles數(shù)據(jù)表中;如果想?yún)⑴c已有主題的討論,則是按下想?yún)⑴c之主題的超級(jí)鏈接,接著便會(huì)進(jìn)入Detail.asp網(wǎng)頁(yè).
在Detail.asp模塊中,如果想?yún)⑴c討論,首先在窗體中輸入數(shù)據(jù),然后按下“送出討論內(nèi)容”,接著會(huì)啟動(dòng)DetNew.asp.這個(gè)ASP程序會(huì)將所輸入的數(shù)據(jù)保存在News.mdb數(shù)據(jù)庫(kù)的Details數(shù)據(jù)表中,如果想結(jié)束討論,則是按下“返回討論組主畫面”超級(jí)鏈接,返回Title.asp網(wǎng)頁(yè).
應(yīng)討論數(shù)據(jù)存儲(chǔ)需要,在數(shù)據(jù)庫(kù)設(shè)計(jì)中應(yīng)含有“主題總表 (Titles)”及“討論內(nèi)容 (Detials)”兩個(gè)數(shù)據(jù)表,其字段結(jié)構(gòu)如下主題總表 (Titles)和討論內(nèi)容 (Detials)數(shù)據(jù)表.
從結(jié)構(gòu)中,不難看出兩個(gè)數(shù)據(jù)表的關(guān)系.假設(shè)某一討論主題的 TitleID字段值等于N,一開始參與這一討論的“則數(shù)”(Title數(shù)據(jù)表的Number字段)等于0,那么Details數(shù)據(jù)表中 TitleID等于N的記錄條數(shù)等于0.后來假設(shè)有5個(gè)人參與這一討論主題,則Details數(shù)據(jù)表中便會(huì)有5條等于N的記錄,但 Title數(shù)據(jù)表卻永遠(yuǎn)只有一條TitleID等于N的記錄:
由于 Titles及Detials有著以上的關(guān)系,所以習(xí)慣上稱 Titles為“主表”,而Detials則是 Titles的“明細(xì)表”.
表1 主題總表(Titles)
表2 討論內(nèi)容表(Details)
在討論組設(shè)計(jì)中,Titles數(shù)據(jù)表應(yīng)與“主題總表”所定義的字段相一致,為此設(shè)計(jì)以下模塊[2]:
(1)將 Titles記錄按照LastNewsDate字段遞減排序
一般來說,新聞?dòng)懻摻M總把后發(fā)生的討論主題放在較前面的位置,所以要按照Last News Date(討論主題最后被討論的日期)字段做遞減排序,以實(shí)現(xiàn)這個(gè)要求.
(2)嚴(yán)格控制產(chǎn)生“mm/dd-mm/dd”的日期格式
主題總表的“日期”字段 (mm/dd/-mm/dd)是由CreateDate以及LastNewsDate兩個(gè)字段的“月”及“日”所構(gòu)成的,其控制格式如下:
(3)順序顯示“日期、作者、則數(shù)、主題”標(biāo)題
〈TD則數(shù) 〈/TD〉
〈TD〉 主題 〈/TD〉
(4)合理排定記錄內(nèi)容顯示
〈TRValign=TOP〉
〈TDNo Wrap〉 〈%=DateRange%〉 〈/Td〉
〈TD〉 〈%=rs(“Name”)%〉 〈/TD〉
〈TDAlign=Right〉 〈%=rs(“Number”)%〉 〈/TD〉
〈TD〉 〈A HREF=Detail.asp?TitleD= 〈%=rs(“TitleD”)%〉〉 〈%=rs(“Subject”)%〉 〈/A〉 〈/TD〉
〈/TR〉
由于以上Title.asp中的SQL并沒有使用“Where條件”來篩選記錄,所以當(dāng)討論主題越來越多時(shí),所需下載的記錄就會(huì)越來越多,執(zhí)行速度也就會(huì)越來越慢.用以下兩種方法解決這一問題:[3]
(1)限定記錄的條數(shù),假設(shè)將記錄條數(shù)限定在50條,則選取數(shù)據(jù)的SQL指令應(yīng)修改如下:Select Top50*From Titles Order By LasNewsDate Desc
(2)只選取若干天以內(nèi) (例如兩周=14天)被新發(fā)起或討論過的主題,遇選取數(shù)據(jù)的SQL指令應(yīng)修改如下:
Select*From Titles Where LastNews Date>
DateAdd(“d”,-14,Date())Order By LastNewsDate Desc
DetNew.asp:保存討論內(nèi)容
當(dāng)上網(wǎng)者進(jìn)入某一個(gè)討論主題,并且發(fā)表意見之后,Det New.asp除了要將討論內(nèi)容保存于Details數(shù)據(jù)表之外,也會(huì)同時(shí)更新Titles數(shù)據(jù)表的以下兩個(gè)字段:
表3 更新后的主題總表(Details)
更新語句如下:
Setcmd=Server. CreateObject(“ADODB. Command”)
Setcmd. Activecommection=rs.ActiveConnection
SQL=“Update Titles Set LastNewsDate=Now(),[Number]=[Number]+1”
SQL=SQL&“Where TitleID=”&TitleID
cmd.Command Text=SQL
cmd.Execute
以上語句解釋如下:
(1)Set cmd.Active commection=rs.ActiveConnection沒有使用 GetMdbconnection來取得Connection對(duì)象,而是直接使用rs.ActiveConnection.這是因?yàn)閞s對(duì)象已經(jīng)是一個(gè)打開New s.mdb數(shù)據(jù)庫(kù)的Recordset對(duì)象,所以rs.ActiveConnection與重新打開News.mdb數(shù)據(jù)庫(kù)的Connection對(duì)象沒有什么兩樣.
(2)Update Titles Set LastNewsDate=Now().[Number]= [Number]+1:有兩個(gè)地方值得注意:Now是VBScript的函數(shù),可以使用于存取Access數(shù)據(jù)庫(kù)的SQL指令;Number是SQL的保留字,要存取名稱為Number的字段,須在名稱前后加上 [],使之成為 [Number].
(3)“Where TitleID=”&TitleID:別忽略了這個(gè)條件式.若省略,則 Title數(shù)據(jù)表的所有記錄將會(huì)全部被更新,而實(shí)際上,我們只要更新被討論的那一條記錄.
[1] 劉國(guó)華,張忠平,岳曉麗.數(shù)據(jù)庫(kù)新理論方法及技術(shù)導(dǎo)論 [M].電子工業(yè)出版社,2006:12-14
[2] 王珊,薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論 (第四版)[M].北京:高等教育出版社,2006:25-35
[3] 羅軍.淺談網(wǎng)絡(luò)流量控制在校園網(wǎng)中的作用 [J].湖北廣播電視大學(xué)學(xué)報(bào):工業(yè)技術(shù)版,2009,(02):154-154