国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

關系數據庫的結構與一般原理

2024-07-21 02:33:29
字體:
來源:轉載
供稿:網友

  前邊看到了一個相當復雜的數據庫系統的結構,但里邊并沒有包含數據倒底是怎么組織成庫的,及數據使用又是怎么樣在數據庫內處理、用什么形式傳給用戶的。
  
  一個數據庫系統中通常同時存在多個數據庫,每個庫由若干張表組成。實際使用中很少會取出整張表或整個數據庫中的數據,而是選取其中一部份,即所謂的建立一個視(view)。 數據庫系統會將用戶所需的數據打包組成一個游標,然后用戶就可以利用該游標存取數據了。由于Server端的游標對Server構成相當的負荷,所以用完應當立即關閉,假如需要長時間使用大型游標則應當使用客戶端游標,即將Server端的游標數據復制到客戶端。
  關系數據庫的結構與一般原理
點擊查看大圖

  為提高數據檢索的效率,數據庫都支持對表做索引,索引其實是也是一種表,但只包含最基本的定位信息,比如只含有記錄號和記錄在表文件中的起點位置。
  
  數據庫中除了數據之外,還可能包含安全信息和數據治理子程序。
  
  假如隨便什么人都可以聯上銀行的數據庫,修改一下帳戶信息,那這個世界富翁大概會多很多了。每個數據庫都會有一張用戶表,記錄了用戶的信息及在數據庫中扮演的角色、擁有的權力。在MS-SQLServer7或Oracle8i這樣的數據庫里,每個數據庫、每張表都擁有自己的用戶表,記錄了每個答應訪問的用戶的角色、權限。
  
  數據庫治理員是數據庫系統的神,他無所不能,有每一扇門的鑰匙,有創造或毀滅一切的能力,所以這個用戶一定小心要治理好。
  
  有時候在表中每插入一條記錄或者修改某個特定的字段的時候,都會需要做一些相關連的修改,當然可以在程序中每次都寫一次,但在編程時輕易忘記而帶來問題,這時候就用得著觸發器或者存儲過程了。它們其實就是一組sql命令或其它形式的子程序,保存在數據庫內。觸發器會在指定條件下自動被系統調用,而存儲過程則需要應用程序指示系統調用。兩者都是在數據庫系統內部執行,省掉了網絡傳遞等麻煩,性能要好很多。同時在設計數據庫時就可以把它們設計好,這樣應用開發就很省心了。
  
  
  --------------------------------------------------------------------------------
  
  上邊講的都是俺們可以存在數據庫系統里的東西。數據庫治理系統本身還提供一些非常重要、有用的功能,就是鎖定治理、事務治理、日志。
  
  1、鎖定治理:
  
  假如某年某月某天的某一刻(A),你和gf心有靈犀同時往兩人共用的電子銀行帳號里存錢,只見替你們存錢的兩個程序都把當前的金額讀出來,是¥10,000。
  
  花開兩朵,各表一枝,且說替你存錢的那個程序做了一個加法,它內存里的金額變成了¥100,000,這個程序嘆息了一聲—好大的款呀,于是把錢寫進數據庫。這一瞬間(B),你的帳戶里有了¥100,000,夠買半所房子了。
  
  上文書說道,替她存錢的程序在A時刻也把金額讀出,是¥10,000,于是也做一個加法,內存里的金額變成了¥10,050,這程序服務態度很好,一點沒有嫌少,不辭辛勞地也把錢寫進數據庫里去。這一瞬間(C),你的帳戶里有了¥10,050,夠買房子的手續費了。
  
  很不幸,C-B=0.01秒。
  
  為了不讓俺也碰上這種事,俺果斷要求替俺存錢的程序在讀錢之前把俺的數據庫記錄封鎖起來,等俺的錢存好了,再解開,中間誰也不準碰俺的記錄,看也不行!
  
  哈,一笑。
  
  DBMS極為重要的功能就是要支持鎖定,不同的數據庫對鎖定支持程序不同,有的支持對整張表加鎖,有的支持對每一行記錄加鎖,后者稱為行鎖,顯然更先進。當然,用于桌面應用的單用戶數據庫是犯不著去搞鎖定的。或者象極少沖突,偶然沖突一下也沒關系的web forum之類應用的情況下,不加鎖也沒關系,這樣速度快。
  
  2、事務處理:
  
  這個世界上沒有哪個數據庫系統是東方不敗,IBM的B2 UDB號稱是永不崩潰的數據庫,趕上磁盤故障寫不進去什么的總沒招了吧,用戶訪問指令還得失敗。假如是密不可分的一組操作,比如說X轉帳到Y時,從X取出成功,Y轉入失敗,這時就應該取消前面的操作,不然X可要哭了。當然可以在寫程序時小心點,寫好取消代碼,但這顯然是誘惑你去寫更多bug的陷阱。
  
  所以數據庫系統通常都有事務的概念,當進入一組密不分的操作之前,先通知系統TransactionStart了,然后訪問數據庫,最后假如全成功了發一個Commit提交所有修改,假如失敗了,發一個RollBack系統自動把系統恢復到被該組操作影響之前的狀態(回滾)。
  
  Delphi的try ... exception語句結構很合適做這個工作。
  
  不過事務會影響系統性能,所以不要有事沒事都加一個Transaction喲。linux底下很火的那個MySQL就不支持事務,所以速度賊快,據說比Oracle還快,那可以是一個OSS的免費軟件呀(免費是有條件的,詳見MySQL的Lisence說明)。

  
  3、日志:
  
  假如你是某大證券交易所的電腦治理員,在一個黑道兇日里好不輕易熬到了快下班,忽然發現服務器上存數據的那塊硬盤罷工了,更妖的是熱備機上的那塊說了一聲福無雙至就不動了,咋辦?
  
  別忙暈倒,把昨天的備份找出來,換塊好硬盤,先回復到昨天的情況,再把數據庫系統的日志調出來,把昨天下班到今天的部份重做一個,ok。
  
  日志是啥?DBMS會自動把對數據庫進行修改的每一條指令記錄在日志文件里,所以,萬一碰上這種情況,還有得救。
  
  啊——,你猛然發現日志正好存在壞的那塊盤上……撲通……

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清新县| 堆龙德庆县| 灵丘县| 商都县| 乌兰察布市| 弥勒县| 宁化县| 都兰县| 兴隆县| 唐河县| 噶尔县| 凤庆县| 攀枝花市| 普安县| 建德市| 乌拉特前旗| 辽阳县| 探索| 宜宾市| 新兴县| 东平县| 玛纳斯县| 崇礼县| 保德县| 菏泽市| 石阡县| 柳江县| 南漳县| 万盛区| 盐源县| 双峰县| 泰宁县| 尚义县| 湛江市| 青冈县| 同仁县| 普兰店市| 三门县| 宜城市| 新蔡县| 洪雅县|