幾個概念&開篇一張圖
-
Database system (DBS)
由一個相互關聯的(interrelated)資料集合(collection) 和一組用于訪問(access)這些資料的程式組成 -
database也就是Interrelated data collection, -
DMBS主要目標:提供一種高效、便利的途徑,存取資料庫資料,

-
Evaluation Engine:評估引擎
1.DBS應用(Applications)
| 企業資訊(Enterprise ) | 銷售、會計、人力資源、生產制造… |
|---|---|
| 銀行金融 | 信用卡、交易、股票、貸款、客戶… |
| 大學 | 學籍資訊、課程、人力資源… |
| 航空 | 預定、時間表… |
| 電訊Telecommunication | 撥號記錄、月度賬單… |
| … | … |
在早期,很少有人直接與資料庫系統互動(Interact),
人們常常,間接地與資料庫互動
- 在線書店并瀏覽書籍或音樂,存盤在資料庫中,
- 淘寶訂單,存盤在資料庫中,
- 查詢銀行余額和交易資訊,在資料庫系統檢索,
- …
2.DBS的目標(Purpose)
先來康康 Typical 檔案處理系統:
(70年代,資料庫實質上是檔案系統)
- 由傳統(conventional)作業系統支持,
- 將永久記錄(permanent records)存盤在不同的檔案中,
- 它需要不同的應用程式從相應的檔案中提取記錄,并向其添加記錄,
它有幾個主要的弊端disadvantages:
| 英文 | 中文 |
|---|---|
| Data redundancy and inconsistency. | 資料的冗余和不一致 |
| Difficulty in accessing data. | 資料訪問困難 |
| Data isolation | 資料孤立 |
| Integrity problems | 完整性問題 |
| Atomicity problems. | 原子性問題 |
| Concurrent-access anomalies | 并發性問題 |
| Security problems | 安全問題 |
-
所謂資料孤立:
由于資料分散在不同的檔案中,并且檔案的格式可能不同,因此撰寫新的應用程式來檢索適當的資料是很困難的, -
所謂原子性:
當計算機down機時,要將資料庫系統恢復到故障前的一致狀態,
有些事件(比如轉賬,出賬和到賬的一致性),它必須完全發生,否則就根本不發生,在傳統的檔案處理系統中,很難保證原子性, -
然而,這些困難,也不是一無是處,
At least,促進(prompt)資料庫系統的發展,
3.資料視圖(View of data)
-
回顧一下
資料庫系統:
是相互關聯的資料
和一組允許用戶訪問和修改這些資料的程式的 集合, -
而DBS主要目的,
是為用戶提供資料的抽象視圖,
也就是說,系統隱藏了資料存盤和維護的某些細節,
3.1 資料抽象
首先提問:w&h?(why&how)
why is data abstract needed?
- 為了使系統可用、有效地檢索資料,
- 為了提高效率,
- 簡化(沒有接受過計算機培訓的)用戶與系統的互動
- 為了用戶不可訪問某些details,安全性
And How to make it ?
- 設計人員使用復雜的資料結構來表示資料庫中的資料,
- 開發人員通過幾個抽象層次向用戶隱藏復雜性
具體有這3個Levels的Abstractions
| 物理層 | 最低層次,抽象描述資料實際存盤,詳細描述復雜的底層資料結構, |
|---|---|
| 邏輯層 | 高一層次抽象,描述存盤的資料,及之存在什么關系,邏輯層用戶不需知道可能涉及的物理層結構,這被稱為物理資料獨立性(physical data independence), |
| 視圖層 | 抽象的最高層次,但只描述了整個資料庫的一部分,是為了簡化用戶與DBS的互動,系統可以為同一個資料庫提供許多視圖, |
三種抽象的關系可以如圖描述

View Level在一些教材中也稱外模式
下面用(C++描述)結構體再說明這三級抽象,
struct Address {
char live_addr[100]; //住址
char home_addr[100]; //家鄉
int postal_code; //郵編
};
struct student {
char name[20];
bool gender;
Address stu_addr;
};
在物理層,這個結構體資料(記錄)可以描述為一個連續存盤位置塊
而編譯器隱藏了這種級別的細節(對programmer隱藏),
類似地,資料庫系統隱藏了許多最低級的存盤細節,
在邏輯層,這些記錄型別的相互關系也被定義了,
而使用編程語言的程式員,在這個抽象層次上作業,
類似地,資料庫管理員通常在這個抽象級別上作業,
最后在視圖層,用戶看到一組隱藏資料型別細節(邏輯級別的)的應用程式,
此外,視圖層提供了一種安全機制,以防止用戶訪問資料庫的某些部分,
3.2 實體和模式(Instances & Schemas)
Instances:
在特定時刻(at a particular moment) 存盤在資料庫中的資訊集合稱為資料庫實體
Schemas :
資料庫的總體設計(overall design) 稱為資料庫模式
- 三個層次的抽象&&三個層次的模式
根據抽象級別 → 模式劃分,
物理模式在物理層描述資料庫設計,
邏輯模式在邏輯層描述資料庫設計,
在視圖級還可能有幾個模式(有時稱為子模式),它們描述資料庫的不同視圖, - 物理資料獨立性&&物理模式
如果應用程式不依賴于物理模式,就具有物理資料獨立性,
因此,如果物理模式發生變化,就不需要重寫應用程式,
物理模式隱藏在邏輯模式之下,通常很容易更改,且不影回應用程式, - 從對應用程式的影響的角度看,
邏輯模式最重要,因為程式員用邏輯模式構造應用程式
3.3 資料模型(Data Models).
資料庫結構的底層是資料模型,
是 一組概念工具:用于描述
- 資料、
- 資料關系(relationships)、
- 資料語意(semantics)
- 約束的一致性(consistency constraints),
也就提供了:
在物理、邏輯和視圖level描述資料庫設計的方法,
接著,資料模型可分為四類:
- Relational Model關系模型
- Entity-Relationship Model物體關系模型
- Object-Based Data Model基于物件的資料模型
- Semistructured Data Model半結構化資料模型
- Older models: network model and hierarchical model Older models:
其他模型,網狀,層次模型
關系模型使用一組表(表也稱為關系)來表示資料以及這些資料間的關系,
絕大多數資料庫系統都是基于關系模型的,是應用最廣泛的資料模型
物體關系(E-R)模型使用一組稱為物體的基本物件以及這些物件之間的關系,,物體-關系模型在資料庫設計中被廣泛使用
基于物件的資料模型可以看作是使用封裝、方法(函式)和物件標識等概念來擴展的E-R模型
物件-關系資料模型結合了面向物件資料模型和關系資料模型的特性,
半結構化資料模型允許指定資料,相同型別的單個資料項可具有不同的屬性集,與前面的資料模型相反,(特定型別的每個資料項,都必有相同屬性集),可擴展標記語言(XML)被廣泛用于表示半結構化資料
小結:模型的分類

4.DB語言
先上兩個定義:
資料定義(definition)語言 (DDL)來指定(specify)資料庫模式.資料操作(manipulation)語言(DML)來表示(express)資料庫查詢和更新,
在實踐中,二者不是兩個獨立的語言;
相反,它們只是單一資料庫語言的一部分,
4.1 Data-Manipulation Language(DML)
- 允許用戶訪問或操作, 用合適的Data Model組織的的資料,
- 而訪問(access)的型別是:
| Modification of information stored in the database | 修改 |
|---|---|
| Retrieval of information stored in the database | 檢索 |
| Deletion of information from the database | 洗掉 |
| Insertion of new information into the database | 插入 |
- 基本上有兩種型別: (咋又分了兩種型別,還不清楚)
| Procedural DMLs (程序式,怎么作) | 要求用戶指定需要的資料,以及如何獲取這些資料 |
|---|---|
| Declarative DMLs (申明式/非程序式 非程序式,要什么) | 要求用戶指定需要的資料,而不指定如何獲取這些資料 |
查詢(query) 是請求檢索資訊的陳述句(Statement),
DML中涉及 資訊檢索的(retrieval) 部分稱為 查詢語言,
術語(term)查詢語言 = 資料操作語言(盡管技術上是不正確的),
- SQL,是使用最廣泛的查詢語言,
4.2 Data-Definition Language(DDL)
這DDL,不是
deadline不用慌
DDL is used for~:
- 指定(specify)資料庫模式(DB models)
- 指定資料的其他屬性/特征(additional properties)
DDL中特殊的 data storage and definition language
is used for~:
- 指定DBS存盤結構(storage structure)和訪問方法(access methods)
- 這些陳述句定義了資料庫模式的實作細節,
這些細節通常對用戶是隱藏的
此外,存入資料庫的資料值 必須滿足一定的
一致性約束 consistency constraints,
- 比如:賬戶余額絕不能是負數
- DDL提供了指定此類約束的工具,
- 資料庫系統每次更新資料庫時都會檢查這些約束,
通常,約束可以是與資料庫相關的 任意謂詞(arbitrary predicate),
然而,測驗任意謂詞的 代價costly 可能很高,
因此,資料庫系統實作的完整性約束(integrity constraints)
可以,用最小的開銷進行測驗:
| Domain Constraints域約束 | … |
|---|---|
| Referential Integrity參照完整性 | … |
| Assertions斷言 | … |
| Authorization授權 | … |
上表暫不做Statement
5.關系型DB(Relational DB)
關系資料庫基于
Relational Model,
使用一組表table來表示資料以及這些資料之間的關系,
包括DML和DDL,
5.1 表(Tables)
先看一個table
看圖說話:
每個表包含特定型別的記錄,
每個表有多個列(Columns),每個列有一個唯一的名稱
表的列對應于記錄型別的屬性(attributes),
同時這里看到的是Logical Level 的Abstract:
不難看出表也許存盤在檔案中,
例如,可以使用一個特殊字符 (如逗號) 來分隔記錄的不同屬性.
所以:
關系模型對資料庫開發人員和用戶隱藏了底層實作細節,
基于記錄的模型:
- 資料庫的結構是多種型別的固定格式的記錄,定義了固定數量的欄位(fields)或屬性(attributes),
- 關系模型是基于記錄的模型的一個例子(example),
5.2 Data-Manipulation Language
這里是兩個表: The instructor table、The department table
下面的SQL陳述句例子,查詢的是這兩個表
SQL查詢語言是非程序性的,
查詢接受(takes)多個表(也可能一個)作為輸入
并且總是回傳一個表
這是一個SQL查詢的例子(1個表的輸入):

看圖說話:
- 查詢指定部門名稱(History)教員所在的表中的,那些行
- 檢索歷史記錄,顯示這些行的name屬性值,
這是一個SQL查詢的例子(2個表的輸入):

看圖說話:
…
5.3 Data-Definition Language
SQL提供了豐富的DDL,允許定義表、完整性約束、斷言等,
例子:SQL DDL陳述句定義部門表
And then, a table is generated which is like the The department table above.
5.4 Database Access from Application Programs
應用程式訪問資料庫
因為:
SQL不支持用戶輸入、顯示輸出或網路通信等操作,
有一些計算可以使用通用編程語言進行,但使用SQL則不可能所以:
計算和操作必須用宿主(host)語言撰寫,如C、c++或Java,
并嵌入訪問資料庫中的資料的SQL,查詢,
應用程式訪問資料庫,兩種方法:
(1)呼叫API
| API(standard) | 它可用于向資料庫發送DML和DDL陳述句并檢索結果, |
|---|---|
| ODBC | Open Database Connectivity與C語言一起使的標準 |
| JDBC | Java Database Connectivity與Java資料庫連接的標準 |
(2)擴展宿主語言語法,在宿主語言程式中嵌入DML呼叫
上篇結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/267057.html
標籤:其他
上一篇:2021-03-06:go中,公共變數是協程安全嗎?賦值操作是原子的嗎?為什么?
下一篇:實時數倉:專案學習


