DBMS-基本概念

文件處理系統(file-processing system)的主要弊端:

數據冗余和不一致(data redundancy and inconsistency)、數據訪問困難(difficulty in accessing data)、數據孤立(data isolation)、完整性問題(integrity problem)、原子性問題(atomicity problem)、并發訪問異常(concurrent-access anomaly)、安全性問題(security problem)。

?

?

數據抽象的三個層次

?

1)物理層(physical level):詳細描述復雜的底層數據結構

2)邏輯層(logical level):描述數據庫中存儲什么數據及這些數據間存在的關系。

物理數據獨立性(physical data independence):應用程序不依賴于物理模式,即使物理模式改變也無須重寫應用程序,邏輯層用戶不必知道邏輯層結構實現可能涉及的復雜物理層結構。

3)視圖層(view level):只描述數據庫的某個部分,系統可以為同一數據庫提供多個視圖,使用戶與系統交互更簡單。

?

?

數據庫模式

實例(instance):特定時刻存儲在數據庫中的信息的集合稱作數據的一個實例。

數據庫模式(schema):數據庫的總體設計,即使發生變化,也不頻繁。

數據庫系統可分為幾種不同的模式:e.g.物理模式、邏輯模式、子模式(subschema,描述數據庫的不同視圖)。

?

?

數據模型(data model):描述數據、數據聯系、數據語義及一致性約束的概念工具的集合,提供一種描述物理層、邏輯層及視圖層數據庫設計的方式。

數據模型可被劃分為四類:

關系模型(relational model):一種基于記錄的模型,用表的集合來表示數據和數據間的聯系,每個表有多個列,每列有唯一的列名。

實體-聯系模型(entity-relationship model,a.k.a. E-R):基于對現實世界的一種認識——現實世界由一組基本對象(實體)及這些對象間的聯系構成。實體是現實世界中可區別于其他對象的一件事情或一個物體。

E-R提供一種方便的圖形化方式來觀察數據、聯系和約束。

數據庫中實體通過屬性(attribute)集合來描述;

聯系(relationship)是幾個實體之間的關聯;

同一類型的所有實體的集合稱為實體集(entity set),同一類型的所有聯系的集合稱作聯系集(relationship set);

基于對象的數據模型(object-based data model):可看作E-R模型增加了封裝、方法和對象標志等概念后的擴展。對象-關系數據模型結合了面向對象的數據模型和關系數據模型的特征。

半結構化數據模型(semistructured data model):允許相同類型的數據項含有不同的屬性集的數據定義。

網狀數據模型(network data model)、層次數據模型(hierarchical data model)如今已經很少使用。

?

?

數據庫語言

數據庫系統提供數據定義語言(data-definition language)和數據操縱語言(data-manipulation language),構成了單一數據庫語言的不同部分。

1. 數據操縱語言(DML):使用戶可以訪問或操縱那些按某種適當的數據模型組織起來的數據。

DML的訪問類型包括:增、刪、查、改。

查詢(query):要求對信息進行檢索的語句,DML中涉及信息檢索的部分稱作查詢語言(query language)。

通常有兩類基本的DML:

1)過程化DML(procedural DML):要求用戶指定需要什么數據以及如何獲得這些數據。

2)聲明式DML(declarative DML):也稱非過程化DML,還要求用戶指定需要什么數據,而不指明如何獲得這些數據。

2. 數據庫定義語言(DDL):用于表達說明數據庫模式的一系列定義(定義數據庫模式),也可用于定義數據的其他特征。

數據存儲和定義(data storage and definition)語言:一系列特殊的DDL語句,用于說明數據庫系統所使用的存儲結構和訪問方式,定義了數據庫模式的實現細節。

存儲在數據庫中的數據值必須滿足某些一致性約束(consistency constraint),DDL語言提供指定這種約束的工具,每當數據庫更新時數據庫系統都會檢查這些約束。

·域約束(domain constraint):每個屬性都對應于一個所有可能的取值構成的域。

·參照完整性(referential integrity):一個關系中給定屬性集上的取值也在另一關系的某一屬性集的取值中出現。

·斷言(assertion):數據庫需要時刻滿足某一條件。斷言創建后系統會監測其有效性,如果斷言有效,則以后只有不破壞斷言的數據庫更新才被允許。

·授權(authorization):對于不同用戶在數據庫中的不同數據值上允許不同的訪問類型,這些區別以授權來表達。如:a. 讀權限(read authorization)允許讀取數據但不能修改數據;b. 插入權限(insert authorization)允許插入新數據但不允許修改已有數據;更新權限(update authorization)允許修改但不能刪除數據;刪除權限(delete authorization)允許刪除數據。

數據字典:DDL以指令(語句)作為輸入,生成輸出放在數據字典(data dictionary)中。數據字典包含元數據(metadata)。數據字典可以看做一種特殊的表,只能由數據庫系統本身來訪問和修改,在讀取和修改實際數據前數據系統要先參考數據字典。

?

?

關系數據庫:基于關系模型,使用一系列表來表達數據以及這些數據之間的關系。一種基于記錄的模型,數據庫的結構時幾種固定格式的記錄。

表:每個表包含一種特定類型的記錄,每種記錄類型定義固定數目的字段或屬性(每個表有多個列),表的列對應記錄類型的屬性(每個列有唯一的名字)。

?

來自應用程序的數據庫訪問

大多數計算和動作必須用一種宿主語言(如C/C++/Java)來完成,再在其中使用嵌入式的SQL查詢來完成對數據庫的訪問。由宿主語言執行DML訪問數據庫的兩種途徑包括:

1. 通過提供應用程序接口(過程集),將DML和DDL語句發送給數據庫再取回結果。e.g. C語言+ODBC、Java+JDBC

2. 通過擴展宿主語言的語法,在宿主語言的程序中嵌入DML調用。

?

規范化

設計關數據庫所用到的一種方法,通過設計一種符合適當范式(normal form)的模式,生成一個關系模式集合,使存儲信息時沒有不必要的冗余,同時又能輕易檢索數據。

?

數據存儲和查詢

數據庫系統的功能部件大致可分為存儲管理器和查詢處理部件。

1) 存儲管理器: 數據庫系統中負責在數據庫中存儲的低層數據與應用程序以及向系統提交的查詢之間提供接口的部件,負責數據庫中數據的存儲、檢索和更新。

存儲管理部件包括:

·權限及完整性管理器(authorization and integrity manager):檢測是否滿足完整性約束,檢查視圖訪問數據的用戶的權限。

·事務管理器(transaction manager):保證即使發生故障,數據庫也保持在一致(正確)的狀態,并保證并發事務的執行不發生沖突。

·文件管理器(file manager):管理磁盤存儲空間的分配,管理用于表示磁盤上所存儲信息的數據結構。

·緩沖管理器(buffer manager):負責將數據從磁盤取到內存中來,并決定哪些數據應被緩沖存儲在內存中。

存儲管理器實現了幾種數據結構,作為系統物理實現的一部分:

·數據文件(data files):存儲數據庫自身。

·數據字典(data dictionary):存儲關于數據庫結構的元數據,尤其是數據庫模式。

·索引(index):提供對數據項的快速訪問(e.g. 指針、散列)

2)查詢處理器

查詢處理器負責編譯和執行DDL和DML語句,組件包括:

·DDL解釋器(DDL interpreter):解釋DDL語句并將這些定義記錄在數據字典中。

·DML編譯器(DML compiler):將查詢語言中的DML語句翻譯為執行方案,包括一系列查詢執行引擎能理解的低級指令。

DML編譯器還進行查詢優化(query optimization),從幾種等價的具有相同結果的執行方案中選出代價最小的一種。

·查詢執行引擎(query evaluation engine):執行由DML編譯器產生的低級指令。

?

事務管理

事務(transaction):數據庫應用中完成單一邏輯功能的操作集合。每一個事務是一個既具有原子性又具有一致性的單元,。

事務的定義應使之不違反數據庫的一致性約束。一個事務可以被定義為由多個單獨程序組成,程序依次執行可以保持一致性,但單個程序自身都不是把數據庫從一個一致狀態轉入一個新的抑制狀態,因此這些程序不是事務。

事務管理器(transaction manager)包括并發控制管理器(concurrency-control manager,控制并發事物間的相互影響,保證一致性)和恢復管理器(recovery manager,事務失敗時進行故障恢復,保證原子性和持久性)。

?

數據庫體系結構

?

1. 兩層體系結構(two-tier architecture):應用程序駐留在客戶機上(前端),通過查詢語言表達式來調用服務器上的數據庫系統功能(后端)。(應用程序接口標準e.g.ODBC/JDBC用于進行客戶端和服務器的交互)

2. 三層體系結構(three-tier architecture):后端分為應用服務器和數據庫服務器;客戶機只作為前端,不包含任何直接的數據庫調用,通過一個表單界面與應用服務器(application server)通信;應用服務器與數據庫系統通信以訪問數據,應用程序的業務邏輯(business logic)被嵌入到應用服務器中而不是分布在多個客戶機上。

?

?

數據庫用戶和管理員

使用數據庫的人員可分為數據庫用戶和數據庫管理員

1. 數據庫用戶

數據庫用戶可分為四種類型,系統為不同類型用戶設計不同類型的用戶界面

·無經驗的用戶(na?ve user):通過激活事先寫好的應用程序同系統交互,典型用戶界面是表格界面。

·應用程序員(application programmer):開發用戶界面

·老練的用戶(sophisticated user):不通過編寫程序同系統交互,而是用數據庫查詢語言或數據分析軟件等工具表達要求。

·專門的用戶(specialized user):編寫專門的、不適合于傳統數據處理框架的數據庫應用的富有經驗的用戶。

2. 數據庫管理員

對系統進行集中控制的人稱作數據庫管理員(DataBase Administrator,DBA),DBA的作用包括:

·模式定義(schema definition)。通過用DDL書寫一系列定義來創建最初數據庫模式。

·存儲結構及存取方法定義(storage structure and access-method definition)。

·模式及物理組織的修改(schema and physical-organization modification)。由DBA對模式和物理組織進行修改以反映機構的需求變化,或為提高性能選擇不同的物理組織。

·數據訪問授權(granting of authorization for data access)。DBA通過授予不同類型的權限來規定不同的用戶各自可以訪問數據庫的部分。

·日常維護(routine maintenance),包括:

a. 定期備份數據

b. 確保正常運轉所需的空余磁盤空間,并在需要時升級磁盤空間

c. 監視數據庫的運行,并確保數據庫性能不因一些用戶提交了花費時間較多的任務就下降很多。

?

轉載于:https://www.cnblogs.com/RDaneelOlivaw/p/7803410.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python多大孩子可以學_孩子學編程最佳年齡是多大

兒童編程教育已經悄悄地掀起了編程低齡化的熱浪。但是很多人會疑惑,到底孩子學編程最佳年齡是多少呢?下面小編就為大家解答一下。孩子學編程最佳年齡 首先,孩子的學習黃金時期是非常重要的。從6歲開始,大多數孩子都可以掌握對基本…

上傳文件到華為云云服務器,上傳文件到云服務器

上傳文件到云服務器 內容精選換一換登錄Windows操作系統的彈性云服務器時,需使用密碼方式登錄。因此,用戶需先根據創建彈性云服務器時使用的密鑰文件,獲取該彈性云服務器初始安裝時系統生成的管理員密碼(Administrator帳戶或Cloudbase-init設…

JUnit規則

第一次偶然發現JUnit Rule批注時,我對此概念有些惱火。 在測試用例中擁有一個公共領域似乎有些奇怪,因此我不愿意定期使用它。 但是一段時間后,我習慣了這一點,事實證明,規則可以通過多種方式簡化編寫測試的過程。 這篇…

微pe工具箱是微軟的嗎_微PE工具箱V2.0更新10內核

本帖最后由 韋小寶2 于 2017-3-22 21:26 編輯微PE工具箱V2.0發布更新了,鏈接:http://pan.baidu.com/s/1c9whpO 轉載自無憂論壇 07年,第一個XP內核通用PE工具箱發布。17年,第一個WIN10內核的微PE工具箱就此誕生。64位純內核&#x…

jq實現輪播圖

之前設計了一個校團委網站,里面有一個輪播圖效果,上網后查看了許多方法,覺得下面這個方法最為適用,記錄下來 js代碼: $(document).ready(function () {//無縫切換輪播var i 0;//索引var clone $(".banner .imgL…

關于圖片預加載的思考

引子&#xff1a; 很多時候&#xff0c;我們在寫html頁面的時候&#xff0c;當需要在頁面中加入圖片時&#xff0c;我們很自然地把圖片直接用<img>標簽放在了<body>里面&#xff0c;這本來是沒有多大問題的。 但是當圖片數量很多的時候&#xff0c;問題就來了。H…

oracle安裝中桌面模式與服務器模式的去別

桌面模式只能本機使用。 服務器模式可以在網絡中使用&#xff0c;也就是網絡中的其他服務器可以使用。 所以安裝時&#xff0c;如果是生產環境肯定是服務器模式。一般也都是服務器模式。 轉載于:https://www.cnblogs.com/zhjx0521/p/7803691.html

python不能創建字典的是_用Python創建帶有重復鍵的字典

用Python創建帶有重復鍵的字典 我有以下列表&#xff0c;其中包含重復的具有不同值的汽車注冊號。 我想將其轉換為字典&#xff0c;該字典接受汽車登記號的多個鍵。 到目前為止&#xff0c;當我嘗試將列表轉換為字典時&#xff0c;它消除了鍵之一。 如何制作具有重復鍵的字典&a…

python中int是什么的縮寫_python中int是什么類型

python中的基本數據類型1:雖然python中的變量不需要聲明&#xff0c;但使用時必須賦值整形變量浮點型變量字符型2:可以一個給多個變量賦值&#xff0c;也可以多個給多個變量賦值3:python3中有6個標準數據類型Number(數字)*True1*False0*數值的除法(/)總是返回一個浮點數&#x…

redis cli命令

redis安裝后&#xff0c;在src和/usr/local/bin下有幾個以redis開頭的可執行文件&#xff0c;稱為redis shell&#xff0c;這些可執行文件可做很多事情。 可執行文件作用redis-server 啟動redisredis-cliredis命令行工具redis-benchmark基準測試工具redis-check-aofAOF持久化文…

高級ZK:異步UI更新和后臺處理–第2部分

介紹 在第1部分中&#xff0c;我展示了如何在ZK應用程序中使用服務器推送和線程來執行后臺任務。 但是&#xff0c;這個簡單的示例具有一個重大缺陷&#xff0c;這使其對于實際應用程序而言是一種不好的方法&#xff1a;它為每個后臺任務啟動了一個新線程。 JDK5引入了Execut…

css清除浮動的原理

最近學習css發現了高度塌陷時候要清除浮動,為了理解清楚浮動原理,網上找了不少資料,發現都寫的不是很清楚,而且都是一模一樣的內容,我在里分享一下我對清楚浮動原理的理解, 如果你已經很了解什么是浮動和浮動的效果你可以直接跳轉到三.如何清除浮動(重點)閱讀 一.什么是浮動首…

SpringBoot03 項目熱部署

1 問題 在編寫springBoot項目時&#xff0c;經常需要修改代碼&#xff1b;但是每次修改代碼后都需重新啟動&#xff0c;修改的代碼才會生效 2 這么實現IDEA能夠像Eclipse那樣保存過后就可以自動進行刷新呢 將springBoot項目進行熱部署即可 3 如何實現SpringBoot項目的熱部署01 …

STM32實現流水燈

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_…

jacob 報錯 Can't co-create object

問題&#xff1a;開始時一切正常&#xff0c;后來什么都沒該&#xff0c;出現Cant co-create object報錯&#xff0c;即是創建不了ActiveXComponent wdnew ActiveXComponent("Word.Application"); 偶爾發現任務管理器中word進程居然達到10個&#xff0c;而我沒有打開…

map分組后取前10個_map根據屬性排序、取出map前n個

/*** map根據value排序* flag 1 正序* flag 0 倒序** param map* param flag* return*/public static > LinkedHashMap sortByValue(Map map, int flag) {LinkedHashMap sortMap new LinkedHashMap<>();if (flag 1) {map.entrySet().stream().sorted(Comparator.c…

wxpython可視化_使用wxPython的繪圖模塊wxPyPlot進行數據可視化

[Python進階(四十)-數據可視化の使用matplotlib進行繪圖前言??matplotlib是基于Python語言的開源項目&#xff0c;旨在為Python提供一個數據繪圖包。我將在這篇文章中介紹matplotlib A #-*- coding: utf-8 -*- ############################################################…

在Java EE 6中將Bean驗證與JAX-RS集成

JavaBeans驗證&#xff08;Bean驗證&#xff09;是一種新的驗證模型&#xff0c;可作為Java EE 6平臺的一部分使用。 約束條件支持Bean驗證模型&#xff0c;該約束以注釋的形式出現在JavaBeans組件&#xff08;例如托管Bean&#xff09;的字段&#xff0c;方法或類上。 javax.…

如何讓浮動的元素換行??css

當你想要做成這種布局效果的時候 紫色框里面的內容那樣 它是一個列表 li元素是塊級元素 默認大小是父元素ul的寬 并且換行 如果li沒有背景的話那就不用管了 可是問題來了它不但有背景 而且是根據文字自適應的寬高 這就是inline-block類型的功能了 那么想讓li是inline-bl…

Python學習之類和實例

面向對象最重要的概念就是類&#xff08;Class&#xff09;和實例&#xff08;Instance&#xff09;&#xff0c;必須牢記類是抽象的模板&#xff0c;比如Student類&#xff0c;而實例是根據類創建出來的一個個具體的“對象”&#xff0c;每個對象都擁有相同的方法&#xff0c;…