APP下载

新闻讨论组开发的关键技术研究

2010-01-18郁海峰

关键词:讨论组总表数据表

郁海峰

(张家口市城乡规划局园冶信息中心,河北张家口075000)

1 新闻讨论组需求

新闻讨论组一般要有“讨论主题”、“讨论看板”及“参与讨论”,它们所显示的内容分别如下:

讨论主题:包含讨论主题的发起人、发起人的E-mail、发起日期、主题内容.

讨论看板:其它人参与讨论的内容,也包含参与讨论者的姓名、E-mail、参与讨论日期、主题及内容.

参与讨论:此区段为一输入窗体,可让参与讨论者输入自己的基本个人信息及意见.

2 新闻讨论组基本模块

根据以上需求新闻讨论组基本模块设计应该有:主题总表及发起讨论 (Title.asp)、保存新发起的讨论 (TitleNew.asp)、进入某一讨论主题 (Detail.asp)、保存某一主题新加入的讨论 (Det New.asp)、保存讨论信息的数据库 (New.mdb).其关系如图1所示[1].

至于TitleNew.asp及DetNew.asp则分别是上网者在 Title.asp及Detail.asp输入自己的讨论主题时,用来保存讨论数据的程序.

图1 基本模块关系图

浏览Title.asp网页可以发起新的讨论主题.首先在窗体中输入相关的数据,然后按下“送出讨论主题”按钮,接着会启动 TitleNew.asp.此模块会将所输入的数据保存在News.mdb数据库的 Titles数据表中;如果想参与已有主题的讨论,则是按下想参与之主题的超级链接,接着便会进入Detail.asp网页.

在Detail.asp模块中,如果想参与讨论,首先在窗体中输入数据,然后按下“送出讨论内容”,接着会启动DetNew.asp.这个ASP程序会将所输入的数据保存在News.mdb数据库的Details数据表中,如果想结束讨论,则是按下“返回讨论组主画面”超级链接,返回Title.asp网页.

3 数据库设计

应讨论数据存储需要,在数据库设计中应含有“主题总表 (Titles)”及“讨论内容 (Detials)”两个数据表,其字段结构如下主题总表 (Titles)和讨论内容 (Detials)数据表.

从结构中,不难看出两个数据表的关系.假设某一讨论主题的 TitleID字段值等于N,一开始参与这一讨论的“则数”(Title数据表的Number字段)等于0,那么Details数据表中 TitleID等于N的记录条数等于0.后来假设有5个人参与这一讨论主题,则Details数据表中便会有5条等于N的记录,但 Title数据表却永远只有一条TitleID等于N的记录:

由于 Titles及Detials有着以上的关系,所以习惯上称 Titles为“主表”,而Detials则是 Titles的“明细表”.

表1 主题总表(Titles)

表2 讨论内容表(Details)

4 物理实现

4.1 字段一致性问题

在讨论组设计中,Titles数据表应与“主题总表”所定义的字段相一致,为此设计以下模块[2]:

(1)将 Titles记录按照LastNewsDate字段递减排序

一般来说,新闻讨论组总把后发生的讨论主题放在较前面的位置,所以要按照Last News Date(讨论主题最后被讨论的日期)字段做递减排序,以实现这个要求.

(2)严格控制产生“mm/dd-mm/dd”的日期格式

主题总表的“日期”字段 (mm/dd/-mm/dd)是由CreateDate以及LastNewsDate两个字段的“月”及“日”所构成的,其控制格式如下:

(3)顺序显示“日期、作者、则数、主题”标题

〈TD则数 〈/TD〉

〈TD〉 主题 〈/TD〉

(4)合理排定记录内容显示

〈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〉

4.2 流量控制

由于以上Title.asp中的SQL并没有使用“Where条件”来筛选记录,所以当讨论主题越来越多时,所需下载的记录就会越来越多,执行速度也就会越来越慢.用以下两种方法解决这一问题:[3]

(1)限定记录的条数,假设将记录条数限定在50条,则选取数据的SQL指令应修改如下:Select Top50*From Titles Order By LasNewsDate Desc

(2)只选取若干天以内 (例如两周=14天)被新发起或讨论过的主题,遇选取数据的SQL指令应修改如下:

Select*From Titles Where LastNews Date>

DateAdd(“d”,-14,Date())Order By LastNewsDate Desc

DetNew.asp:保存讨论内容

4.3 数据更新

当上网者进入某一个讨论主题,并且发表意见之后,Det New.asp除了要将讨论内容保存于Details数据表之外,也会同时更新Titles数据表的以下两个字段:

表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对象,而是直接使用rs.ActiveConnection.这是因为rs对象已经是一个打开New s.mdb数据库的Recordset对象,所以rs.ActiveConnection与重新打开News.mdb数据库的Connection对象没有什么两样.

(2)Update Titles Set LastNewsDate=Now().[Number]= [Number]+1:有两个地方值得注意:Now是VBScript的函数,可以使用于存取Access数据库的SQL指令;Number是SQL的保留字,要存取名称为Number的字段,须在名称前后加上 [],使之成为 [Number].

(3)“Where TitleID=”&TitleID:别忽略了这个条件式.若省略,则 Title数据表的所有记录将会全部被更新,而实际上,我们只要更新被讨论的那一条记录.

[1] 刘国华,张忠平,岳晓丽.数据库新理论方法及技术导论 [M].电子工业出版社,2006:12-14

[2] 王珊,萨师煊.数据库系统概论 (第四版)[M].北京:高等教育出版社,2006:25-35

[3] 罗军.浅谈网络流量控制在校园网中的作用 [J].湖北广播电视大学学报:工业技术版,2009,(02):154-154

猜你喜欢

讨论组总表数据表
湖北省新冠肺炎疫情数据表
文献讨论组与康复治疗师继续教育浅谈
基于列控工程数据表建立线路拓扑关系的研究
2016年西藏自治区一般公共预算收支决算总表
2016年宁夏回族自治区一般公共预算收支决算总表
2016年浙江省一般公共预算收支决算总表
《离散数学》课程教学改革与实践
图表
基于VSL的动态数据表应用研究
2011年十家拍卖公司秋拍成交拍品总表