DBS(Database System)
- 傳統(tǒng)的文件處理系統(tǒng)中存儲組織信息的主要弊端
- 數(shù)據(jù)的冗余和不一致性(data redundancy and inconsistency)
- 數(shù)據(jù)訪問困難(dificulty in accessing data)
- 數(shù)據(jù)孤立(data isolation)
- 完整性問題(integrity problem)
- 原子性問題(atomicity problem)
- 并發(fā)訪問異常(concurrent-access anomaly)
- 安全性問題(security problem)
- 數(shù)據(jù)庫系統(tǒng)的目標:提供一種可以方便高效地存取數(shù)據(jù)庫信息的途徑
數(shù)據(jù)視圖
數(shù)據(jù)庫系統(tǒng)的一個主要目的是給用戶提供數(shù)據(jù)的抽象視圖,也就是說隱藏關(guān)于數(shù)據(jù)存儲和維護的某些細節(jié)
-
數(shù)據(jù)抽象
數(shù)據(jù)視圖- 物理層(physical level)
- 最低層次的抽象
- 描述了數(shù)據(jù)實際上是怎么存的(比如是都存在一個文件里還是分散在多個文件里)
- 邏輯層(logical level)
- 比物理層層次稍高的抽象
- 描述了數(shù)據(jù)庫中存什么數(shù)據(jù)以及數(shù)據(jù)之間的關(guān)系
- 邏輯層的用戶不需要去關(guān)系數(shù)據(jù)具體是怎么存的,這稱作物理數(shù)據(jù)獨立性(physical data independence)
ps: 對于具有物理數(shù)據(jù)獨立性的設(shè)計,即便底層的物理存儲改變了,邏輯層也不需要做任何的修改
- 視圖層(view level)
- 最高層次的抽象,只描述整個數(shù)據(jù)庫的某個部分
- 簡而言之,對于邏輯層的數(shù)據(jù),我們可以通過不同的視圖,以不同的視角以及視野去查看它
- 物理層(physical level)
-
實例和模式
類比:模式類比于變量的聲明,實例類比于變量在特定時刻的值
- 模式: 數(shù)據(jù)庫的總體設(shè)計
- 數(shù)據(jù)庫的模式限定了數(shù)據(jù)庫中都有哪些表,表中都有哪些字段以及表與表之間的關(guān)系
- 實例: 特定時刻存儲在數(shù)據(jù)庫中的信息的集合
- 數(shù)據(jù)庫的一個實例包含了數(shù)據(jù)庫在一個時刻下的所有表的信息
-
數(shù)據(jù)模型
- 關(guān)系模型
- 實體—聯(lián)系模型
- 基于對象的數(shù)據(jù)模型
- 半結(jié)構(gòu)化的模型
- 網(wǎng)狀數(shù)據(jù)模型
- 層次數(shù)據(jù)模型
關(guān)系型數(shù)據(jù)庫的一些基本術(shù)語
- relation(關(guān)系)==>表
- column(列)==>字段(同一字段內(nèi)所有數(shù)據(jù)的數(shù)據(jù)類型一致)
- row(行)==>對應(yīng)于數(shù)據(jù)庫表中的一行數(shù)據(jù)(對應(yīng)于數(shù)學概念中的元組)
- SQL(Structured Query Language)==>結(jié)構(gòu)化的查詢語言
- DDL:Data Define Language(數(shù)據(jù)定義語言)==>執(zhí)行 該類SQL語句會導致表結(jié)構(gòu)的變化
- DML:Data Manager Language(數(shù)據(jù)操縱(管理)語言)==>執(zhí)行該類SQL語句對表中的數(shù)據(jù)進行增刪改查
- tuple(元組)==>對應(yīng)于數(shù)據(jù)表中的一行數(shù)據(jù)
- domain(域)==>字段的取值范圍
- schema(方案/模式)==>數(shù)據(jù)庫中的Schema,為數(shù)據(jù)庫對象的集合,一個用戶一般對應(yīng)一個schema
- Cartesian product(笛卡兒積)
ps: 應(yīng)當避免表與表之間相關(guān)聯(lián)的時候采用全匹配(如果采用笛卡爾積的匹配方式即為全匹配)
DDL (數(shù)據(jù)定義語言)
數(shù)據(jù)庫模式定義語言DDL(Data Definition Language),是用于描述數(shù)據(jù)庫中要存儲的現(xiàn)實世界實體的語言。一個數(shù)據(jù)庫模式包含該數(shù)據(jù)庫中所有實體的描述定義。
- 執(zhí)行此類語句會導致數(shù)據(jù)庫結(jié)構(gòu)的變化
- create(創(chuàng)建一個表)
-- 下面的語句創(chuàng)建了一個用戶表,以id為主鍵,并添加了username和age字段
CREATE TABLE User(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) DEFAULT "",
age INT DEFAULT 18
);
CREATE UNIQUE INDEX User_id_uindex ON User (id);
- alter(修改表的結(jié)構(gòu))
-- 下面的語句修改了user表的id屬性
ALTER TABLE user MODIFY id INT(11) unsigned NOT NULL AUTO_INCREMENT;
- drop(刪除一張表)
-- 下面的語句刪除了為user表
DROP TABLE demo.user;
-
rename(用于對一張表的名字進行重命名)
- Oracle數(shù)據(jù)庫將其劃分到DDL
- SQL server數(shù)據(jù)庫將其歸到DML
-- 下面的語句將user表的表名改成new_user
rename table user to new_user
- truncate(截斷==>用于刪除數(shù)據(jù)表中的所有數(shù)據(jù),但是保留表結(jié)構(gòu),不同公司的數(shù)據(jù)庫實現(xiàn)的機制不同)
DML
數(shù)據(jù)操縱語言(Data Manipulation Language, DML)是SQL語言中,負責對數(shù)據(jù)庫對象運行數(shù)據(jù)訪問工作的指令集,以INSERT、UPDATE、DELETE三種指令為核心,分別代表插入、更新與刪除,是開發(fā)以數(shù)據(jù)為中心的應(yīng)用程序必定會使用到的指令,因此有很多開發(fā)人員都把加上SQL的SELECT語句的四大指令以“CRUD”來稱呼。
- 此類語句對數(shù)據(jù)進行增刪改查(CRUD)
- insert
-- 下面的語句往user用戶表中插入一條記錄
INSERT into user(username, age) VALUES('Robbin', 18)
-- 下面的語句修改了user表中username為Robbin的表項(元組)的數(shù)據(jù)
UPDATE user SET username = 'Robbin2', age = 17 WHERE username = 'Robbin'
-- 下面的語句刪除user表中username為Robbin2的表項(元組)
DROP FROM user WHERE username = 'Robbin2'
-
select
- DB2將select歸到DML
- Oracle將select單獨劃為一類(因為select操作只是對數(shù)據(jù)庫進行查詢操作,沒有實質(zhì)改變數(shù)據(jù)庫中的數(shù)據(jù))
-- 下面的語句查詢user表中的所有數(shù)據(jù)
SELECT * FROM user
DML和DDL的區(qū)別
- DML語句支持回滾,采用事務(wù),可以保證數(shù)據(jù)的一致性;而DDL語句采用隱式commit,是不支持回滾的(一旦執(zhí)行就不可撤回)
- 四種SQL語句
Key(鍵/碼)
- superkey(超碼)==>一個或多個字段的集合,可唯一標識一行數(shù)據(jù)
- candidate keys(候選碼)==>最小的超碼(即本集合為超碼,且集合內(nèi)除本身外的任何子集都不能作為超碼)
- Primary key(主碼/主鍵)==>從候選碼中選取一個作為主碼(主鍵),可以由多個字段組成
- Primary attribute(主屬性)==>包含于某個候選碼的屬性
- Non-Prime attribute(非主屬性)==>不包含于某個候選碼的屬性
Note:
- 數(shù)據(jù)表中字段的個數(shù)是有限的
- 屬性在元組中是無序的(但是設(shè)計的時候一般把主鍵放在前面)
- 設(shè)計字段的時候要保證字段的原子性
- NULL==>空值表示不確定的值,不代表0,也不代表空串