• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Oracle動態交叉表生成

    來源:懂視網 責編:小采 時間:2020-11-09 09:32:24
    文檔

    Oracle動態交叉表生成

    Oracle動態交叉表生成:Oracle動態交叉表生成 正在看的ORACLE教程是:Oracle動態交叉表生成。Oracle是應用最廣的大型數據庫,而在范式下進行Oracle數據庫設計則可以大大減少數據冗余,使數據庫維護更方便,可惜范式下的數據表一般不能直接輸出。今天我們就來探討一下范式下的數據表
    推薦度:
    導讀Oracle動態交叉表生成:Oracle動態交叉表生成 正在看的ORACLE教程是:Oracle動態交叉表生成。Oracle是應用最廣的大型數據庫,而在范式下進行Oracle數據庫設計則可以大大減少數據冗余,使數據庫維護更方便,可惜范式下的數據表一般不能直接輸出。今天我們就來探討一下范式下的數據表

    Oracle動態交叉表生成

    正在看的ORACLE教程是:Oracle動態交叉表生成。Oracle是應用最廣的大型數據庫,而在范式下進行Oracle數據庫設計則可以大大減少數據冗余,使數據庫維護更方便,可惜范式下的數據表一般不能直接輸出。今天我們就來探討一下范式下的數據表的動態交叉表生成的方法。

      范式下的Oracle數據庫設計

      數據關系的復雜性導致了表中數據冗余的存在,數據冗余增加了維護數據庫的負擔,也占用了大量的磁盤空間,直接造成性能下降。為了消除這些負面影響,就應該對數據庫表格進行規范化,使其遵守一定的規則的,尤其是數據庫設計范式。

      關系必須是規范化的,簡單說來,就是在結構表設計時,消除冗余性和不協調的從屬關系。即每一個分量必須是不可分的數據項,但是這只是最基本的規范化。規范化理論就是研究如何將一個不好的關系模式轉化為好的關系模式的理論,規范化理論是圍繞范式而建立的。規范化理論認為,一個關系數據庫中所有的關系,都應滿足一定的規范(約束條件)。規范化理論把關系應滿足的規范要求分為幾級,滿足最低要求的一級叫做第一范式(1NF),在第一范式的基礎上提出了第二范式(2NF),在第二范式的基礎上又提出了第三范式(3NF),以后又提出了BCNF范式,4NF,5NF,以及“域/關鍵字”范式。范式的等級越高,應滿足的約束集條件也越嚴格。規范的每一級別都依賴于它的前一級別,例如若一個關系模式滿足2NF,則一定滿足1NF。

      在Oracle上設計數據庫時更要符合范式的要求,如果把一個不符合規范的數據庫放在Oracle中,是不會突出Oracle的性能的,甚至是非常糟糕。

      例如:學生的成績表,我們一般都要求打印一目了然。

      這也是符合1NF的,但如果是在數據庫中定義的表結構也這樣,則是不完善的,是有潛在沖突的。如要增加考試科目,就得更改表結構,特別是大學,專業多、科目多,而有些科目是選學的,這將會使表結構變得相當復雜,有多少科目就得有多少個科目的字段,有部分字段值必然為空;這個表是指某次測驗的還是期中或期末考試的成績呢?分辨不出,于是每一次成績都要造一張類似的表,必然表格較多。不僅浪費大量的磁盤空間,還會給程序的編寫帶來極大的困難。

      在數據范式理論的指導下,對數據庫表格進行規范化,使其結構更合理,消除存儲異常,使數據冗余盡量最小,便于插入、刪除和更新,進一步保持了數據的完整性。經過探索,我在成績管理系統的設計上采用了如下的表結構,這個表結構能以不變應用多變,不管是科目的增加,還是教師的變動,都能適應,符合數據的規范要求。 

    由此看出,經數據規范化的數據雖然使數據冗余小,便于插入、刪除和更新,但如果直接輸出是不符合人們觀看習慣的,必需要把其輸出為上面表1的格式才行,這就是列向表生成橫向表的問題,即交叉表的生成。

    動態交叉表的生成

      為了簡述起見,在學生基本信息表中,只建兩個字段,學號、姓名,其他的諸如性別、科代碼等則略。其中班、教師代碼庫、考試次數標志(即第幾次測驗,還是期中、期末考試)等也略,只保留下面數據結構足以能說明交叉表生成的過程。

      各表結構簡化如下:

      學生基本信息表:JBXX

      xh char(13) //學號

      xm char(8) //姓名,針對不同情況,可用變長字符。

      科目代碼表:KMDM

      no number(3) //科目代號,現可用900多科目可用,若不夠,可定義四位。

      mc varchar(20) //科目中文名稱。

      成績表: CJ

      xh char(13) //學號,關聯JBXX的XH。

      xq number(2) //學期,指該學生所在校的學期。

      km number(3) //科目代號。

      cj number(3) //該科成績。

      至此,數據表結構已全部建好,此時的任務是把下面表3的數據進行生成交叉表,表4。
      
      交叉表的生成,在Oracle中可以用SQL語句實現。

      select jbxx.xh,jbxx.xm , (select cj.cj from cj where cj.xh=jbxx.xh and cj.xq=1 and cj.km=1) as km1 , (select cj.cj from cj where cj.xh=jbxx.xh and cj.xq=1 and cj.km=2) as km2 , (select cj.cj from cj where cj.xh=jbxx.xh and cj.xq=1 and cj.km==3) as km3 from jbxx where <班級或專業條件> order by jbxx.xh

      Java語言有“編寫一次,隨處運行”的跨平臺能力,具有強大的網絡能力。Oracle是一種關系型的大型數據庫,可在多種硬件平臺上運行,支持多種操作系統,支持大數據庫、多用戶的高性能的事務處理,以其強大的功能和穩定性而著稱。因此建議用Java結合Oracle編寫程序。下面給出在Java語言中的具體實現過程。

      注:為了簡述方便,下面的程序已簡略,在實踐應用中,還要考慮很多問題,并且一般把它做成bean來用。

      程序如下:

      import java.sql.*;//導入類庫
      public class sjk{
       public static void main(String[] args) throws Exception {
      Connection conn;
       try
       {
       Class.forName("oracle.jdbc.driver.OracleDriver");
       String sourceURL="jdbc:oracle:thin:@server:1521:orcl";
       String user="scott";
       String password="tiger";
       conn=DriverManager.getConnection(sourceURL,user,password);
       Statement stmt = conn.createStatement();
       Statement stmt1 = conn.createStatement();
       String sql_km="select no,mc from km";
       // String bb_tj="0441010101";以后實際使用要加上班或級或專業條件.
       ResultSet rs_km = stmt.executeQuery(sql_km);
       String title=" 學號 姓名 ";
       String sql1="( select cj.cj from cj where cj.xh=jbxx.xh and cj.xq=1 and cj.km=";
       String sql=" select jbxx.xh,jbxx.xm ,";
       while (rs_km.next())
       {
       String sql_sum=" select sum(cj) as s1 from cj where "+
       " cj.xq=1 and cj.km="; //在實際使用中要加上班級條件
       sql_sum=sql_sum+rs_km.get

    [1]

    正在看的ORACLE教程是:Oracle動態交叉表生成。String(1);//統計該班該科目的總成線。
       ResultSet rs_sum = stmt1.executeQuery(sql_sum);
       rs_sum.next();
       //統計符合班級條件的成績CJ總和,如果為0則認為該班不開設該科目,略掉。
       if (rs_sum.getInt(1)>0)
       {
       title = title + rs_km.getString(2);
       sql = sql + sql1 + rs_km.getString(1) + ") as km" + rs_km.getString(1)+" ,";
      //構造動態語句.
       }
       rs_sum.close();
       } //獲取動態科目及名稱
       sql=sql.substring(1,sql.length()-1); //去掉最后一個逗號。
       sql=sql+"from jbxx order by jbxx.xh"; //在實際使用中要加上班級條件
       ResultSet rs=stmt.executeQuery(sql);
       ResultSetMetaData data = rs.getMetaData();
       int col=data.getColumnCount(); //獲取所有曾生成的字段,實行動態輸出。
       System.out.println(title);
      
       while (rs.next())
       {
       for (int i=1;i<=col;i++)
       {
       if (i==col)
       System.out.println(rs.getString(i));
       else
       System.out.print(rs.getString(i)+" ");
       }
       }
      System.out.println("數據已打印完成!");
      rs_km.close();
      rs.close();
      stmt1.close();
      stmt.close();
      conn.close();
      
       ///////////////////////////
       }
       catch (Exception e) {
       System.err.println(e);
       }
      }
      }
      
      以上代碼已在j2sdk1.4.2,Oracle 8.1.7編譯通過,在應用中,一般需要把其做成bean去使用,還可加入學期、班級的動態變量,即可獲得全動態的的數據了。

    [2]

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Oracle動態交叉表生成

    Oracle動態交叉表生成:Oracle動態交叉表生成 正在看的ORACLE教程是:Oracle動態交叉表生成。Oracle是應用最廣的大型數據庫,而在范式下進行Oracle數據庫設計則可以大大減少數據冗余,使數據庫維護更方便,可惜范式下的數據表一般不能直接輸出。今天我們就來探討一下范式下的數據表
    推薦度:
    標簽: 創建 生成 動態
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久93精品国产91久久综合| 无码精品人妻一区二区三区人妻斩| 精品中文高清欧美| 久久久久久亚洲Av无码精品专口 | 日韩专区亚洲精品欧美专区| 亚洲国产精品嫩草影院| 国产麻豆精品一区二区三区v视界 国产麻豆一精品一AV一免费 | 亚洲一区爱区精品无码 | 亚洲国产精品13p| 国产精品爽爽ⅴa在线观看| 97久久精品国产精品青草| 四虎国产精品永久在线观看| 四虎国产精品永久在线看| 国内精品国产成人国产三级| 午夜精品美女写真福利| 51视频国产精品一区二区| 日韩精品无码久久久久久| 一本一本久久a久久综合精品蜜桃 一本一道精品欧美中文字幕 | 国产精品一香蕉国产线看观看| 久久99精品国产99久久| 精品福利一区二区三区免费视频| 中文字幕一区二区三区日韩精品| 九九久久精品国产| 国产精品香蕉在线观看| 91精品视频观看| 久久久精品免费国产四虎| 国产91精品一区二区麻豆网站| 国产欧美日韩精品a在线观看| 亚洲AV无码精品无码麻豆| 亚洲欧美精品SUV| 亚洲精品无码永久中文字幕| 一本色道久久88—综合亚洲精品| 人妻一区二区三区无码精品一区| 久久精品女人天堂AV麻| 久久国产综合精品五月天| 久久九九久精品国产免费直播| 国内精品伊人久久久久网站| 精品国产一区二区22| 久久综合精品国产一区二区三区| 久久亚洲国产成人精品无码区| 亚洲福利精品电影在线观看|