• 
    

    
    

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

      數(shù)據(jù)庫(kù)中表設(shè)計(jì)原則分析

      2016-03-07 00:55:40陳紅艷
      無(wú)線互聯(lián)科技 2015年18期
      關(guān)鍵詞:主鍵

      陳紅艷

      摘要:文章指出,數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)時(shí)任何一個(gè)應(yīng)用系統(tǒng)運(yùn)行的支撐,是整個(gè)應(yīng)用系統(tǒng)的基礎(chǔ),在設(shè)計(jì)過(guò)程中結(jié)構(gòu)設(shè)計(jì)存在缺陷,那么相對(duì)其進(jìn)行調(diào)整只通過(guò)數(shù)據(jù)庫(kù)的參數(shù)是遠(yuǎn)遠(yuǎn)不夠的。通常來(lái)講,需要清除用戶(hù)復(fù)雜表的結(jié)構(gòu)以及表中這樣的表的大小,從而拆開(kāi)幾個(gè)有關(guān)系的表結(jié)構(gòu)。不能單單將用戶(hù)標(biāo)原封不動(dòng)地進(jìn)行轉(zhuǎn)換,這樣的行為方式是非常不明智的。

      關(guān)鍵詞:數(shù)據(jù)庫(kù)邏輯設(shè)計(jì);表;主鍵;字段及類(lèi)型

      在Oracle應(yīng)用中,除了影響性能的大都是系統(tǒng)的配置參數(shù)等原因外,影響應(yīng)用系統(tǒng)性能的另一個(gè)原因是應(yīng)用程序的編寫(xiě)不當(dāng)。因而,調(diào)整應(yīng)用程序也是改善性能的一個(gè)方面。

      在對(duì)系統(tǒng)分析這個(gè)階段中,需要有工作經(jīng)驗(yàn)的分析員以及編程人員跟客戶(hù)一起討論商量。這個(gè)過(guò)程所需要做的工作就是聆聽(tīng)客戶(hù)的需求。當(dāng)全面理解客戶(hù)的初步需求之后,就需要分析員將客戶(hù)的這些需求以文檔的形式進(jìn)行歸檔,即是將數(shù)據(jù)的需求定義編寫(xiě)。然后根據(jù)E R圖進(jìn)行邏輯設(shè)計(jì)。設(shè)計(jì)應(yīng)盡量遵循如下原則。

      1主鍵字段的正確選擇

      在對(duì)主鍵字段選擇的時(shí)候,對(duì)其要求是非常重視的,要求其不能有重復(fù)的值現(xiàn)象發(fā)生,對(duì)于留空的一定要杜絕發(fā)生,這是主鍵選段的最基礎(chǔ)的要求。在這過(guò)程中還需要注意以下幾個(gè)方面內(nèi)容:(1)主鍵的選擇不能采用單位形式,不能過(guò)長(zhǎng)的采用列值。(2)主鍵的選擇建議采用字符或者數(shù)型。(3)不能使用類(lèi)似日期、浮點(diǎn)之類(lèi)的形式。(4)使用過(guò)程中出現(xiàn)主鍵重復(fù),那么可以選擇2個(gè)字段作主鍵,但是不推薦使用3個(gè)以上作為主鍵。

      2字段類(lèi)型以及長(zhǎng)度的選擇

      在設(shè)計(jì)的過(guò)程中,每個(gè)設(shè)計(jì)者的思維是不同的,在一個(gè)字段的表示上,不同的設(shè)計(jì)者給出的結(jié)果是不相同的,有時(shí)候定義的字段其實(shí)際意義各不相同。在這個(gè)程度上,目前的理論內(nèi)容還沒(méi)有完全給出一個(gè)定義來(lái)定義這種現(xiàn)象,所以,眾多人表示只要字段能夠滿足客戶(hù)要求就行。其實(shí)面對(duì)一個(gè)比較復(fù)雜的應(yīng)用系統(tǒng),在定義字段過(guò)程中需要考慮的變化因素是眾多的。筆者經(jīng)過(guò)多年實(shí)際工作經(jīng)驗(yàn)對(duì)應(yīng)用以及設(shè)計(jì)進(jìn)行分析,以供同行參考。

      2.1如果能用字符型就不要用數(shù)字型

      在設(shè)計(jì)過(guò)程,有很多的地方、很多字段都是可以用字符型以及數(shù)字型進(jìn)行表示,例如,工作員的身份證號(hào)。其內(nèi)容基本上都是以數(shù)字組成。身份證的每一個(gè)部位都包含特殊的含義,其在輸入以及查詢(xún)的過(guò)程中都會(huì)有一套嚴(yán)密的核查方法。例如:最后一位表示男(1)或女(2)。當(dāng)用字符型時(shí),可以在輸入中用where substr(per_id,15,1)=l'orsubstr(per_id,15,1)=2來(lái)檢查數(shù)據(jù)的正確性。如果采用數(shù)字這樣的判斷就不那么容易了。

      2.2運(yùn)算過(guò)程需求一致

      在定義字段的過(guò)程中,除了要求數(shù)字型能夠容納日后也許變化的數(shù)據(jù)之外,還有一部分內(nèi)容是值得重視的,即在可能參加運(yùn)算的字段中,其長(zhǎng)度和精度必須是保持一致的。

      這樣的處理方法,看上去會(huì)在一定程度上浪費(fèi)空間,但是,沒(méi)有必要去擔(dān)心空間的使用程度,因?yàn)?,假設(shè)其長(zhǎng)度以及精度相差不齊,那么在運(yùn)算過(guò)程中容易有算錯(cuò)的結(jié)果出現(xiàn)。

      例如,可以采取PRO*C進(jìn)行編程工作。當(dāng)表內(nèi)的數(shù)字字段的定義發(fā)生變量的時(shí)候,C編譯不會(huì)去檢查其中一致性的關(guān)系。舉個(gè)例子說(shuō)明:在表里面字段顯得大,而在C語(yǔ)言中能夠說(shuō)明其小,當(dāng)將表中的字段取出放到表量的過(guò)程中,語(yǔ)言沒(méi)有提示錯(cuò)誤的現(xiàn)象發(fā)生。在不經(jīng)過(guò)任何轉(zhuǎn)換的形式下進(jìn)行運(yùn)算,就會(huì)有不同的結(jié)果產(chǎn)生。

      2.3不能為節(jié)省空間隨意拆開(kāi)字節(jié)

      隨著科技的迅猛發(fā)展,目前的儲(chǔ)存硬件的發(fā)展進(jìn)步是相當(dāng)快的,在當(dāng)前的應(yīng)用設(shè)計(jì)階段不要講以往教科書(shū)里面的理論帶到現(xiàn)在的環(huán)境中。這里所說(shuō)的是指,實(shí)際的用戶(hù)需要就是字段的長(zhǎng)度需要。比如,有人經(jīng)常將日期分成3個(gè)字段來(lái)定義,可能寫(xiě)nian char(2),即2位的年;yue char(1)即1位的月,ri char(2),2位的日。這樣在年份只能存放2位,2000年存為00,2001年存為01;而月份就不同了,設(shè)計(jì)者要求用戶(hù)1月輸入成1,2月輸入成2,…而10月輸入成a;11月輸入成b等。

      這種設(shè)計(jì)形式好像節(jié)省了很多的空間,但實(shí)際上也沒(méi)有節(jié)省多少,一條記錄節(jié)省的也就是2個(gè)字節(jié),那么成千上萬(wàn)條的記錄也不過(guò)節(jié)省幾十兆字節(jié)而己,這樣的處理方式只會(huì)給程序的處理增加時(shí)間,對(duì)于優(yōu)化和未來(lái)的移植是起到阻礙作用的。

      2.4將LOB類(lèi)型的字段與其它的類(lèi)型分開(kāi)

      Oracle8i提供了許多可以用于存儲(chǔ)大對(duì)象數(shù)據(jù)的類(lèi)型,如LONG,LONG RAW等。從性能的角度考慮出發(fā),建議在設(shè)計(jì)表格的時(shí)候?qū)⒛切┫鄬?duì)較大的對(duì)象跟其他種類(lèi)的數(shù)據(jù)分開(kāi)儲(chǔ)存。比如職工的檔案證件這些東西,職工檔案其內(nèi)容包含有一些關(guān)于職工的基本情況、相片之類(lèi)的東西,在設(shè)計(jì)過(guò)程需要將這些信息與職工的信息進(jìn)行分割,最后采取關(guān)鍵字段進(jìn)行連接處理。

      3采用具有編碼的設(shè)計(jì)方法

      在對(duì)多處使用值采用編碼設(shè)計(jì)的階段里,類(lèi)似員工的單位名稱(chēng)這個(gè)部位,因?yàn)閱T工的里面包含的員工很多,假設(shè)在記錄過(guò)程將每個(gè)員工的單位都進(jìn)行記錄,那么就會(huì)出現(xiàn)傳說(shuō)中的冗余現(xiàn)象。編碼大概是劃分為2中,排除剛才敘述的一種之外,還需要考慮另外一種,考慮一些應(yīng)用使用性能方便的應(yīng)用。比如,銀行存款系統(tǒng)的應(yīng)用,這個(gè)設(shè)計(jì)過(guò)程可以考慮考法一款(交易代碼)的程序代碼。分別用(存入、取出、結(jié)息)這3個(gè)步驟表示,可以將該字段取名為:

      tran_code char(1) check(tran code'1,ortran code=2or tran code=3),

      在設(shè)計(jì)操作處理界時(shí),只有3種步驟供使用者選用,即“存入”“取出”“結(jié)息”3種選擇,這樣可以避免讓操作員直接輸入字符所帶來(lái)的不一致等的問(wèn)題。

      在Oracle系統(tǒng)里,提供了功能特別的decode函數(shù)。使用它可以在性能上得到特別的效果。這樣使用的前提是,先在建立表結(jié)構(gòu)時(shí)就需要將該列描述為較短的寬度。然后在SQL語(yǔ)句中來(lái)使用它。如:銀行的活期存款表結(jié)構(gòu),可以對(duì)借貸字段存入或取出。

      4建立公共字典表

      除了以上提到的建立代碼的方法外,在現(xiàn)實(shí)設(shè)計(jì)中還有一種使用較為廣泛的方式,就是對(duì)象數(shù)據(jù)字典的建立,其與Oracle系統(tǒng)的數(shù)據(jù)字典類(lèi)似。應(yīng)用系統(tǒng)的數(shù)據(jù)字典也是為了各個(gè)對(duì)象的命名標(biāo)準(zhǔn)而采用的方法。凡是表名、索引名、表中的列名以及過(guò)程所用名稱(chēng)等最好以數(shù)據(jù)字典的方式在數(shù)據(jù)庫(kù)建立。這樣可以讓Oracle系統(tǒng)幫助人們檢查。在一個(gè)新的對(duì)象需要建立命名的時(shí)候,需要將其設(shè)立在這個(gè)字典里面。這里需要和客戶(hù)取得溝通后才能進(jìn)行下一步工作,在對(duì)討論出來(lái)的結(jié)果認(rèn)定后就不能隨便更改,但是遇到非要更改的情況時(shí),一定要經(jīng)過(guò)DBA的同意并且備案才能修改。另外一個(gè)建議是建立過(guò)程要控制兩者不能建立相同的名字,為了做好這一點(diǎn),建議先將各種關(guān)鍵字放到一個(gè)表格里面,在建立時(shí)候再進(jìn)行比對(duì),以這樣的方式很好地避開(kāi)重復(fù)。

      5哪種類(lèi)型的表設(shè)為cache方式

      Oracle提供了一種方法,可以將表的數(shù)據(jù)駐留在內(nèi)存的SGA區(qū)內(nèi),這叫做緩存(cache)。一般來(lái)說(shuō),對(duì)于在應(yīng)用中那些數(shù)據(jù)量不大、被頻繁訪問(wèn)的表,應(yīng)該將其設(shè)置成緩存方式,這樣在數(shù)據(jù)庫(kù)啟動(dòng)完成后被說(shuō)明為緩存的表的數(shù)據(jù)就被系統(tǒng)讀到SGA區(qū)中了??梢杂肁lter table或Create table命令上加cache子句使表成為緩存表(一直放在SGA區(qū)內(nèi)不被清除)。

      如:alter table ACCOUNT_CODE cache;

      如果不需要緩存而取消緩存設(shè)置可用nocache來(lái)完成。如:alter ACCTOUNT_CODE nocache;

      例:在建表時(shí)將表設(shè)置成緩存的方式:

      SQL>CREATE table phone_1st

      (employee Id number,

      phone_no varchar2(15),

      extension varchar2(5)

      )tablespace users

      storage(INITIAL 1m next 500k pctincrease 0)

      CACHE;

      對(duì)于已經(jīng)將表設(shè)置成Cache的信息,可以從DBA_TABLES字典中查到,如:

      SQL>select owner,table_name from dba_tables

      Where LTRIM(cache)=Y;

      6結(jié)語(yǔ)

      正確地對(duì)數(shù)據(jù)庫(kù)表進(jìn)行設(shè)計(jì),直接關(guān)乎到每個(gè)用戶(hù)的切身利益,也直接影響到企業(yè)的效益。所以需要合理科學(xué)的設(shè)計(jì)數(shù)據(jù)庫(kù)中的表,提高系統(tǒng)的性能。

      猜你喜歡
      主鍵
      基于Go 實(shí)現(xiàn)的分布式主鍵系統(tǒng)研究
      Spark環(huán)境下SQL優(yōu)化的方法
      MVC應(yīng)用程序開(kāi)發(fā)課程教學(xué)中存在問(wèn)題淺析
      “三師共管”患者服務(wù)平臺(tái)構(gòu)建
      基于外鍵的E-R圖繪制方法研究
      基于MySQL數(shù)據(jù)庫(kù)實(shí)施完整性約束的研究
      淺析SQL Server數(shù)據(jù)庫(kù)在攪拌站控制系統(tǒng)中的設(shè)計(jì)與應(yīng)用
      商品混凝土(2018年5期)2018-05-31 19:18:08
      在PowerBuilder環(huán)境下實(shí)現(xiàn)數(shù)據(jù)的同步更新
      數(shù)據(jù)庫(kù)主鍵設(shè)置探討
      數(shù)據(jù)庫(kù)主鍵的設(shè)計(jì)方法探討
      湘潭县| 依安县| 边坝县| 富宁县| 阿巴嘎旗| 中阳县| 阜南县| 莒南县| 杂多县| 楚雄市| 宜昌市| 萨迦县| 新和县| 沁水县| 沙河市| 河北省| 玛纳斯县| 恭城| 楚雄市| 萝北县| 佛学| 昭通市| 集安市| 古交市| 德令哈市| 富源县| 华安县| 民和| 大英县| 郯城县| 黄平县| 长乐市| 紫云| 阳东县| 长岛县| 石泉县| 界首市| 万年县| 威宁| 拜泉县| 金湖县|