• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于冗余數(shù)據(jù)動態(tài)生成數(shù)據(jù)表的設計及實現(xiàn)

      2017-10-18 07:03:29盧江興
      現(xiàn)代計算機 2017年25期
      關(guān)鍵詞:字段數(shù)據(jù)表語句

      盧江興

      (肇慶市第一中學,肇慶 526060)

      基于冗余數(shù)據(jù)動態(tài)生成數(shù)據(jù)表的設計及實現(xiàn)

      盧江興

      (肇慶市第一中學,肇慶 526060)

      數(shù)據(jù)庫設計規(guī)范化理論與軟件開發(fā)中實際的數(shù)據(jù)庫設計有差別,根據(jù)開發(fā)中的實際問題,提出基于反規(guī)范冗余技術(shù)的數(shù)據(jù)庫設計方法,并就需使用眾多小表格的教務管理系統(tǒng)統(tǒng)進行剖析,提出動態(tài)增加表格的設計,在教學管理中付諸實踐取得較好的效果。

      數(shù)據(jù)庫原理;冗余;動態(tài)

      0 引言

      在教學管理中,會涉及到較多相似小表格的應用,例如:學生成績表、選修課成績表、文科、理科成績表、職業(yè)學校中不同專業(yè)的成績表,或者隨著時間學期的變更,會不斷產(chǎn)生上學期成績表、下學期成績表等。這些表格都有相類似的結(jié)構(gòu),行、列數(shù)都較少,數(shù)據(jù)量不大,需實現(xiàn)相類似的功能,但是各表格的字段名稱、字段數(shù)目多少存在差異。如果每個表都使用SQL語句create table實現(xiàn)添加表操作會很麻煩,首先不同的表有不同的結(jié)構(gòu),字段需要定義屬性,而且管理不斷新添加的表也需要額外的開銷。

      能否通過數(shù)據(jù)庫的設計,使得對一張大表添加數(shù)據(jù)行就能實現(xiàn)類似于新增表的功能,如果可行,應該怎么設計?

      為了方便應用設計、開發(fā)簡單快捷,可以作一些簡單的假設:

      (1)大表中的字段全部為字符類型,如果在實際應用中應該是數(shù)值型的,這由程序才檢驗并實現(xiàn),數(shù)據(jù)庫設計不作規(guī)則限制。

      (2)設置一個數(shù)據(jù)表允許動態(tài)新增加字段數(shù)的上限(例如:15),這個數(shù)字可以增加,但是需要在設計時要確定。

      (3)為每一個新增表設置一個字段計數(shù)cols,每增加一個字段,cols+1,直到上限值。

      (4)數(shù)據(jù)表可以刪除字段,為簡化設計,刪除字段時,cols值不變,所以,當cols達到上限值時,可能會存在:新增數(shù)據(jù)表的實際字段數(shù)<上限值的情況。

      這實現(xiàn)上述功能,需設計以下3張表:

      tname:id,tname,cols //用于定義新增的表名,新表已有字段數(shù)

      tStruc:id,tnameid,oShowName,iShowName//用于定義新增表的字段名稱

      btable:id,tnameid,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15//大表

      1 創(chuàng)建新表操作

      Insert into tname(tname,cols)values(‘新表名一’,0);//此時,新建表字段數(shù)=0,假設添加后產(chǎn)生的id=10

      2 為新表添加字段

      Update tname set cols=cols+1 where id=10 //10為上述id

      Insert into tStruc(tnameid,oShowName,iShowName)values(10,’第一個字段’,cols);

      //oShowName為對用戶可見的字段名,iShowName為數(shù)值型字段,只增不減,添加每一個字段為1,第二個字段為2,如此類推,作為指向btable的字段索引。

      完成字段添加后,tStruc如下表類似

      iShowName字段使用數(shù)值型,通過+1操作,方便字符”A”+iShowName字段連接后,可以指向btable表的A1、A2、A3、A4 不同字段。

      表1

      3 為大表添加數(shù)據(jù)

      查詢tStruc表,求目標表的字段內(nèi)容,生成SQL語句,完成添加操作

      Select*from tStruc where tnameid=10 Sql=“insert into btable(“

      do while not rs.eof

      sql=sql+“A”+trim(rs(“iShowName”))+“,”

      rs.movenext

      loop

      sql=sql+“tnameid)values(“ ...

      通過循環(huán)語句后,sql語句為:

      insert into btable(A1,A2,A3,A4)values(...

      4 刪除字段

      Delete from tStruc where id=3

      如果將某一字段(例如:數(shù)學)刪除,后又重新添加字段(數(shù)學),按照上述規(guī)則,cols值只增不減,新增字段后,tStruc如下表類似:

      表2

      可見,對新增的“數(shù)學”字段添加數(shù)據(jù)時,會添加到A5字段,而之前是A3字段,兩者是不同的。這時通過上述循環(huán)語句后,生成的sql語句改變?yōu)椋?/p>

      insert into btable(A1,A2,A4,A5)values(...

      Cols的上限最大值:colsMax

      colsMax與btable表的字段數(shù)有關(guān),等于btable表的字段數(shù)-2,而btable表在設計前應該確定,所以cols?Max是確定的。

      cols值只增不減,也是簡化程序設計的手段。

      5 顯示大表數(shù)據(jù)

      (1)顯示數(shù)據(jù)同樣需要查詢tStruc表,生成SQL語句。

      (2)查詢btable的數(shù)據(jù)需要使用oShowName作為別名,不直接使用A1、A2作為字段名Select*from tStruc where tnameid=10 Sql=“select“

      do while not rs.eof

      sql=sql+“A”+trim(rs(“iShowName”))+“as“+rs(“oShowN?ame”)+“,”rs.movenext

      loop

      sql=sql+“tnameid,id from btable where tnameid=10“

      通過循環(huán)語句后,sql語句為:select A1 as英語,A2 as語文,A4 as信息,A5 as數(shù)學,tna?

      6 修改及刪除大表數(shù)據(jù)

      可以直接對根據(jù)btable的id進行操作。

      為方便使用,可以將上述過程寫成存儲過程或者封裝成為類。以下是一個存儲過程的例子,將由分隔符分隔的多個字符作為字段添加到tStruc表。create proc AddStrucName

      @fieldname varchar(8000),

      @Splits varchar(100),

      @tname varchar(100)as

      begin

      Declare@i Int

      Declare@id Int

      季經(jīng)理是個禿子,忌諱很多,有人說兔子跑了或燈泡亮了,季經(jīng)理的臉色便陰得像要下雨一樣。季經(jīng)理經(jīng)常戴一頂帽子。這天,忽然一陣風把帽子吹落了,季經(jīng)理以為是什么預兆,心里很不爽。開會時,恰巧有個生馬蛋子把季經(jīng)理的姓念錯了,念成了李某某,季經(jīng)理勃然大怒,終于發(fā)火了:誰敢把老子頭上的帽子摘了,老子就把他的職務擼了。

      Declare@cols Int

      Declare@fn varchar(100)

      Set@fieldname=RTrim(LTrim(@fieldname))

      Set@i=CharIndex(@Splits,@fieldname)

      While@i>=1

      Begin

      @fn=Left(@fieldname,@i-1)

      Select@id=id from tname where tname=@fn

      Update tname set cols=cols+1 where id=@id

      Select@cols=cols from tname where id=@id

      Insert into tStruc(tnameid,oShowName,iShowName)values(@id,@fn,@cols);

      Set@fieldname=SubString(@fieldname,@i+1,Len(@fieldname)-@i)

      Set@i=CharIndex(@Splits,@fieldname)

      End

      end

      go

      例:使用存儲過程對表2017高一3班,添加字段“語文,數(shù)學,英語,信息,化學”

      exec AddStrucName"語文,數(shù)學,英語,信息,化學",",","2017高一3班"

      按照數(shù)據(jù)庫設計理論,一個好的數(shù)據(jù)庫設計應當滿足第3范式的要求,減少數(shù)據(jù)冗余。但是,在實際生產(chǎn)中,有時為了提高某些查詢或應用的性能而破壞規(guī)范規(guī)則,即反規(guī)范。在進行反規(guī)范操作之前,要充分考慮數(shù)據(jù)的存取需求、常用表的大小、一些特殊的計算數(shù)據(jù)的物理存儲位置等。要使設計的數(shù)據(jù)庫表結(jié)構(gòu)有一定的可擴展性、靈活性和動態(tài)特性。使數(shù)據(jù)庫系統(tǒng)能夠滿足未來功能升級的需要,可以在設計過程中充分考慮使用反規(guī)范的冗余技術(shù)。

      上述btable表使用預留字段的設計,不滿足第3范式,會產(chǎn)生冗余數(shù)據(jù),但是,由于每一個的數(shù)據(jù)量不大,而且能方便程序設計,所以犧牲小量的存儲空間,換取程序簡化設計,還是可取的。

      [1]數(shù)據(jù)庫系統(tǒng)基于冗余的數(shù)據(jù)庫設計方法.http://www.92to.com/xinli/2016/01-31/1112398.html.

      [2]Sql Server存儲過程對分割字符串.http://blog.csdn.net/blocksom/article/details/7676002.

      [3]宋金玉,陳萍,陳剛.數(shù)據(jù)庫原理與應用.ISBN:9787302372424.

      Abstract:Database design specifications have different database design theory and practice in the development of software,according to the actual problems in the development,puts forward a database design method based on redundancy technology standard,and analyzes the require?ment using a large number of small table educational management system are,puts forward the form design of dynamic increase in teaching management in practice has achieved good results.

      Keywords:Database Principle;Redundancy;Dynamic

      Design and Implementation of Dynamic Data Table Generation Based on Redundant Data

      LU Jiang-xing
      (Zhaoqing No.1 Middle School,Zhaoqing 526060)

      1007-1423(2017)25-0045-03

      10.3969/j.issn.1007-1423.2017.25.012

      盧江興(1970-),男,福建永定人,碩士,高級教師,研究方向為計算機網(wǎng)絡、計算機安全、教學管理軟件開發(fā)

      2017-06-27

      2017-08-15

      猜你喜歡
      字段數(shù)據(jù)表語句
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      重點:語句銜接
      湖北省新冠肺炎疫情數(shù)據(jù)表
      黨員生活(2020年2期)2020-04-17 09:56:30
      基于列控工程數(shù)據(jù)表建立線路拓撲關(guān)系的研究
      精彩語句
      CNMARC304字段和314字段責任附注方式解析
      圖表
      無正題名文獻著錄方法評述
      如何搞定語句銜接題
      語文知識(2014年4期)2014-02-28 21:59:52
      基于VSL的動態(tài)數(shù)據(jù)表應用研究
      河南科技(2014年24期)2014-02-27 14:19:25
      根河市| 双流县| 大余县| 沂水县| 沽源县| 巫山县| 女性| 花垣县| 沧源| 文昌市| 清河县| 通州市| 饶平县| 榆林市| 舒兰市| 玉山县| 封开县| 台江县| 饶平县| 瑞丽市| 通州市| 苍南县| 南江县| 万荣县| 县级市| 保山市| 和龙市| 黔江区| 巩留县| 德安县| 阿勒泰市| 含山县| 阳朔县| 阿坝县| 永靖县| 吴桥县| 兴和县| 大方县| 桐梓县| 若尔盖县| 安塞县|