數(shù)據(jù)庫系統(tǒng)概念筆記

數(shù)據(jù)庫系統(tǒng)概念

第一部分 關(guān)系數(shù)據(jù)庫

第1章 引言

數(shù)據(jù)庫管理系統(tǒng)(DataBase-Management System DBMS)是有互相關(guān)聯(lián)的數(shù)據(jù)集合和一組用以訪問這些數(shù)據(jù)的程序組成政己。這個(gè)數(shù)據(jù)集合通常稱作數(shù)據(jù)庫。
很早以前是用文件的形式記錄數(shù)據(jù)赴背,帶來了很多問題

  1. 數(shù)據(jù)冗余不一致
  2. 數(shù)據(jù)訪問難
  3. 數(shù)據(jù)孤立
  4. 完整性問題
  5. 原子性問題
  6. 并發(fā)問題
  7. 安全問題

1.1 數(shù)據(jù)庫的三個(gè)層次

物理層(數(shù)據(jù)的存儲(chǔ))梢夯、邏輯層(數(shù)據(jù)的關(guān)系)寓落、視圖層(描述數(shù)據(jù)庫的某個(gè)部分)

1.3.3 數(shù)據(jù)模型

數(shù)據(jù)模型是一個(gè)描述數(shù)據(jù)秘蛔、數(shù)據(jù)聯(lián)系湃缎、數(shù)據(jù)語義和一致性約束的概念工具的集合。

  • 關(guān)系模型
  • 實(shí)體-聯(lián)系模型
  • 基于對象的數(shù)據(jù)模型
  • 半結(jié)構(gòu)化數(shù)據(jù)模型

1.4.1 數(shù)據(jù)操縱語言

數(shù)據(jù)操縱語言(Data-Manipulation Language,DML)訪問和操縱適當(dāng)模型組織起來的數(shù)據(jù)舵稠,有以下操作

  • 檢索數(shù)據(jù)
  • 插入數(shù)據(jù)
  • 刪除數(shù)據(jù)
  • 修改數(shù)據(jù)

1.4.2 數(shù)據(jù)定義語言

數(shù)據(jù)定義語言(Data-Definition Language,DDL)

  • 域約束
    數(shù)據(jù)類型(整數(shù)超升、字符型)
  • 參照完整性
    可以了解成外鍵管理
  • 斷言
    這個(gè)就沒用到了,是說一個(gè)學(xué)期必須開設(shè)5門課程哺徊,表達(dá)成一個(gè)斷言
  • 授權(quán)
    讀廓俭、插入、更新唉工、刪除

1.6.2 數(shù)據(jù)庫設(shè)計(jì)

設(shè)計(jì)階段中的需求描述是制定數(shù)據(jù)庫的概念結(jié)構(gòu)的基礎(chǔ)

1.6.3 實(shí)體聯(lián)系模型

數(shù)據(jù)庫的總體邏輯結(jié)構(gòu)可以用實(shí)體-聯(lián)系圖(entity-relationship diagram E-R 圖),有幾種方法畫這樣的圖汹忠,最常用的是UML

1.6.4 規(guī)范化

設(shè)計(jì)關(guān)系數(shù)據(jù)庫所用到的另外一種方法被稱為規(guī)范化過程淋硝,他的目標(biāo)是生成一個(gè)關(guān)系模式集合,是我們存儲(chǔ)信息沒有不必要的冗余宽菜,同時(shí)又能很輕松的檢索數(shù)據(jù)谣膳,最常用的方法是使用函數(shù)依賴。

1.7 數(shù)據(jù)存儲(chǔ)和查詢

數(shù)據(jù)庫系統(tǒng)的功能部件大致分為存儲(chǔ)管理器和查詢處理部件

1.7.1 存儲(chǔ)管理器
  • 權(quán)限及完整性管理器
    完整性約束和用戶權(quán)限
  • 事務(wù)管理器
    故障铅乡,保持一致的狀態(tài)继谚,并發(fā)執(zhí)行不沖突
  • 文件管理器
    管理磁盤存儲(chǔ)空間的分配,所存儲(chǔ)信息的數(shù)據(jù)結(jié)構(gòu)
  • 緩沖區(qū)管理器
    數(shù)據(jù)從磁盤取到內(nèi)存阵幸,決定哪些數(shù)據(jù)應(yīng)被緩沖存儲(chǔ)在內(nèi)存中
  • 數(shù)據(jù)文件
    存儲(chǔ)數(shù)據(jù)庫本身
  • 數(shù)據(jù)字典
    存儲(chǔ)數(shù)據(jù)庫結(jié)構(gòu)的元數(shù)據(jù)花履,尤其是數(shù)據(jù)庫模式
  • 索引
    對數(shù)據(jù)項(xiàng)的快速訪問
1.7.2 查詢處理器
  • DDL解釋器

  • DML編譯器

    一個(gè)查詢會(huì)被翻譯成多種等價(jià)的執(zhí)行方案的一種,DML編譯器還能進(jìn)行查詢優(yōu)化挚赊,從幾種選擇中選出代價(jià)最小的一種

1.8 事務(wù)管理

  • 原子性 atomicity
  • 一致性 consistency
  • 持久性 durability

第2章 關(guān)系模型介紹

2.1 關(guān)系數(shù)據(jù)結(jié)構(gòu)

關(guān)系數(shù)據(jù)結(jié)構(gòu)是由表集合成的诡壁。它其實(shí)是數(shù)學(xué)中的一種概念,叫做元祖荠割,表示一組值的序列妹卿。

我們要求關(guān)系r而言旺矾,所有的屬性都是原子的,就是域中的元素是不可再分的夺克,是否再分是由我們的定義來的區(qū)分的箕宙;比如phone_number,如果只看做是一個(gè)號碼而言铺纽,它是原子的柬帕,如果是一組電話或者是定義區(qū)號等,他是非原子的室囊。

空值是特殊的值雕崩,代表未知或者不存在,盡量避免空值的引入融撞。

2.7 總結(jié)

  • 關(guān)系的模式是指它的邏輯設(shè)計(jì)盼铁,關(guān)系的實(shí)例是指它在特定時(shí)刻的內(nèi)容
  • 關(guān)系的超碼是一個(gè)或者多個(gè)屬性的集合,這些屬性的取值可以唯一識(shí)別出關(guān)系的元祖尝偎,候選碼是一個(gè)最小的超碼饶火,關(guān)系的一個(gè)候選碼作為主碼
  • 模式圖,是數(shù)據(jù)庫中模式的圖形化表示致扯,顯示了數(shù)據(jù)庫的關(guān)系肤寝,關(guān)系的屬性,主碼和候選碼

第3章 SQL

3.1 SQL查詢語言概覽

最早的版本是由IBM開發(fā)的抖僵,最初被叫做Sequel鲤看。

1986年美國國家標(biāo)準(zhǔn)化組織(ANSI)和國際標(biāo)準(zhǔn)化組織(ISO)發(fā)布了SQL標(biāo)準(zhǔn),SQL-86耍群,SQL-92义桂,SQL:2003,SQL:2006蹈垢,SQL:2008

SQL語言有以下幾個(gè)部分:

  • DDL
  • DML
  • 完整性
    完整性約束的命令
  • 視圖定義
  • 事務(wù)控制
  • 嵌入式SQL和動(dòng)態(tài)SQL
    定義語句如何嵌入到通用編程語言
  • 授權(quán)

3.2.1 基本類型

  • char
  • varchar
  • int
    等價(jià)于integer
  • smallint
  • numeric(p,d)
  • real,double precision
  • float(n)

char類型存放固定長度的字符串慷吊,例如屬性A的類型是char(10),我們存入的時(shí)候如果存入“avi”曹抬;那么它會(huì)在改字符后面追加7個(gè)空格達(dá)到10個(gè)字符的長度溉瓶,如果是屬性B的類型是varchar(10),它是不會(huì)加空格谤民;這樣就可能出現(xiàn)比較的時(shí)候不相同堰酿。所以說我們建議始終使用varchar類型而不是char類型。

3.5 集合運(yùn)算

union赖临、intersect和except對應(yīng)數(shù)據(jù)集合論中的并運(yùn)算胞锰、交運(yùn)算、差運(yùn)算

  • union和union all 前者會(huì)去重
    結(jié)果中重復(fù)元祖等于C1和C2中出現(xiàn)重復(fù)元祖數(shù)的和

  • intersect 和 intersect all 前者會(huì)去重

    結(jié)果中重復(fù)元祖等于C1和C2中出現(xiàn)重復(fù)次數(shù)最少的一個(gè)

3.6 空值

  • and
    任何條件和unknown的結(jié)果是unknown
  • or
    true or unknown的結(jié)果是true兢榨,false or unknown的結(jié)果是unknown
  • not
    not unknown 的結(jié)果是unknown

3.7 聚集函數(shù)

avg 平均數(shù):在算平均數(shù)的時(shí)候切記不能去除重復(fù)元素

distinct:刪除重復(fù)元祖

group by:在group by子句中的所有屬性上取值相同的元祖將被分在一個(gè)組中嗅榕,一個(gè)很重要的事情是需要保證出現(xiàn)在select語句中但沒有被聚集的屬性只能是出現(xiàn)在group by 子句中的屬性顺饮。也就是說任何沒有出現(xiàn)在group by子句中的屬性如果出現(xiàn)在select子句中的話,它只能出現(xiàn)在聚集函數(shù)內(nèi)部凌那,否則這樣的查詢就是錯(cuò)誤的兼雄。

having:having在形成分組后才起作用

select avg(salary) from instructor 
group by dept_name
having avg(salary) > 42000;

任何出現(xiàn)在having子句中,但沒有被聚集的屬性必須出現(xiàn)在group by中帽蝶,否則查詢就被當(dāng)成是錯(cuò)誤的

sum:SQL會(huì)忽略輸入的null值

3.8 嵌套子查詢

子查詢是嵌套在另一個(gè)查詢中的select-form-where表達(dá)式中赦肋。

子查詢嵌套在where子句中,通常用于對集合的成員資格励稳、集合的比較和集合的基數(shù)進(jìn)行檢查佃乘。

3.8.1 集合成員資格

使用連接詞in或者not in

3.8.2 集合的比較

如連接詞some和any同義(某一個(gè))、all(所有)
找出滿足下面條件的所有教師的姓名驹尼,他們的工資至少比Biology系某一個(gè)教師的工資要高

select name from instructor
where salary > some (select salary
from instructor
where dept_name = 'Biology')
3.8.3 空關(guān)系測試

exists結(jié)構(gòu)在作為參數(shù)的子查詢非空時(shí)返回true值
找出2009年秋季學(xué)期和2010年春季學(xué)期同事開課的所有課程

select course_id from section as S
where semeter = 'FALL' AND year = 2009 
AND 
exist (SELECT * FROM section as T WHERE semester = 'Spring' AND year = 2010 AND S.course_id = T.course_id)

上面的查詢還說明了SQL的一個(gè)特性趣避,來自外層查詢的一個(gè)相關(guān)名稱(S)可以用在where子句的子查詢中。使用了這種關(guān)聯(lián)的查詢稱為相關(guān)子查詢

第4章 中級SQL

4.2 視圖

安全考慮新翎、創(chuàng)建一個(gè)比邏輯模型更符合特定用戶直接的個(gè)人化關(guān)系集合程帕。

4.2.1 視圖定義
  • create view
    create view v as <query expression>;
    v表示視圖名稱<query expression>表示任何合法的查詢表達(dá)式

    create view faculty as
    select ID,name,dept_name
    from instuctor;
    
  • 定義了視圖后,可以在任何的關(guān)系名中出現(xiàn)視圖

  • 直覺上地啰,在任何給定時(shí)刻愁拭,視圖關(guān)系中的元祖集是該時(shí)刻視圖定義中的查詢表達(dá)式的計(jì)算結(jié)果。所以亏吝,當(dāng)我們定義一個(gè)視圖時(shí)岭埠,數(shù)據(jù)庫熊存儲(chǔ)視圖的定義本身,而不存儲(chǔ)定義該視圖的查詢表達(dá)式的執(zhí)行結(jié)果蔚鸥。

  • 一個(gè)視圖可能被用到定義另一個(gè)視圖的表達(dá)式中

4.2.3 物化視圖

特定數(shù)據(jù)庫系統(tǒng)允許存儲(chǔ)視圖關(guān)系枫攀,但是他們保證:如果用于定義視圖的實(shí)際關(guān)系改變,視圖也跟著修改株茶。

4.2.4 視圖更新

除了一些有限的情況之外,一般不允許對視圖關(guān)系進(jìn)行修改图焰。

  • 滿足下列條件我們?nèi)蝿?wù)SQL視圖是可更新的
    1. from子句中只有一個(gè)數(shù)據(jù)庫名稱
    2. select子句中值包含關(guān)系的屬性名启盛,不包含任何表達(dá)式、聚集或者distinct聲明
    3. 任何沒有出現(xiàn)在select子句中的屬性可以取控制
    4. 查詢不包含group by或having子句

4.3 事務(wù)

事務(wù)由查詢和更新語句的序列組成技羔。SQL標(biāo)準(zhǔn)規(guī)定當(dāng)一條SQL語句被執(zhí)行僵闯,就隱式地開始了一個(gè)事務(wù)。下列SQL語句之一會(huì)結(jié)束一個(gè)事務(wù)

  • commit work
  • rollback work

4.4 完整性約束

完整性約束保證授權(quán)用戶對數(shù)據(jù)庫所做的修改不會(huì)破壞數(shù)據(jù)的一致性藤滥。因此鳖粟,完整性約束防止的是對數(shù)據(jù)的意外破壞。

4.4.1 單個(gè)關(guān)系上的約束
  • not null
  • unique
  • check
    例如check(budget>0)子句保證budget上的取值是正數(shù)
4.4.5 參照完整性

例如外鍵的級聯(lián)刪除

4.4.6 事務(wù)中對完整性約束的違反

事務(wù)中有可能出現(xiàn)拙绊,例如兩條語句向图,第一條插入的時(shí)候違反了約束泳秀,第二條符合了約束。這樣的情況榄攀,有的數(shù)據(jù)庫提供了延遲檢查嗜傅,在事務(wù)提交的時(shí)候進(jìn)行檢查,initially deferred

4.5 SQL的數(shù)據(jù)類型與模式

4.5.1 日期和時(shí)間類型
  • date
    年月日
  • time
    時(shí)分秒
  • timestamp
    date和time的組合
  1. 獲取日期時(shí)間的函數(shù)

    current_date/current_time/current_timestamp

4.5.4 大對象類型
  • clob和blob
    lob代表 Large OBject
4.5.5 用戶定義的類型
  • 為了域的比較或者統(tǒng)一設(shè)置一些域的類型檩赢,使用create type來定義吕嘀,可以使用drop type 和 alter type來刪除或修改

    create type Dollars as numeric(12,2);
    
    create table department(
      dept_name varchar(20),
      budget Dollars
    );
    

4.6 授權(quán)

對數(shù)據(jù)庫的授權(quán)包括增、刪贞瞒、改偶房、查
select、delete军浆、update棕洋、insert、all privilegers

grant<權(quán)限列表>
on<關(guān)系名或視圖名>
to<用戶/角色列表>

grant select on department to Amit,satashi

角色:create role instructor;然后可以grant select on takes to instructor

還有其他的授權(quán)略瘾敢。拍冠。。

第5章 高級SQL

5.1 使用程序設(shè)計(jì)語言訪問數(shù)據(jù)庫

  • 動(dòng)態(tài)SQL
  • 嵌入式SQL

5.2 函數(shù)和過程

  • 寫成存儲(chǔ)過程的優(yōu)點(diǎn)
    它允許多個(gè)應(yīng)用訪問這些過程
    允許當(dāng)業(yè)務(wù)規(guī)則發(fā)生變化時(shí)進(jìn)行單個(gè)點(diǎn)的改變簇抵。

  • SQL允許定義函數(shù)庆杜、過程和方法

  • 官方定義語法

    CREATE
        [DEFINER = user]
        PROCEDURE sp_name ([proc_parameter[,...]])
        [characteristic ...] routine_body
    
    CREATE
        [DEFINER = user]
        FUNCTION sp_name ([func_parameter[,...]])
        RETURNS type
        [characteristic ...] routine_body
    
    proc_parameter:
        [ IN | OUT | INOUT ] param_name type
    
    func_parameter:
        param_name type
    
    type:
        Any valid MySQL data type
    
    characteristic:
        COMMENT 'string'
      | LANGUAGE SQL
      | [NOT] DETERMINISTIC
      | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      | SQL SECURITY { DEFINER | INVOKER }
    
    routine_body:
        Valid SQL routine statement
    
  • 參考簡書
    http://www.reibang.com/p/b17a3a6075f2

5.3 觸發(fā)器

要設(shè)置觸發(fā)器,必須要滿足兩個(gè)條件

  • 指明什么條件下執(zhí)行觸發(fā)器碟摆。
  • 指明觸發(fā)器執(zhí)行時(shí)的動(dòng)作晃财。

使用場景:

  • 實(shí)現(xiàn)未被SQL約束機(jī)制指定的某些完整性約束
  • 當(dāng)滿足特定條件時(shí)對用戶發(fā)警報(bào)或自動(dòng)開始執(zhí)行某些任務(wù)

5.5 開窗和排名

在給定的區(qū)間內(nèi)進(jìn)行排名或者聚合操作,成為開窗

https://jingyan.baidu.com/article/d8072ac48d2730ec94cefd43.html

5.6 OLAP系統(tǒng)

聯(lián)機(jī)分析處理系統(tǒng)是一個(gè)交互式系統(tǒng)典蜕,它允許分析人員查看多維數(shù)據(jù)的不同類的匯總數(shù)據(jù)断盛。聯(lián)機(jī)一詞表示分析人員必須能夠提出新的匯總數(shù)據(jù)請求,幾秒鐘之內(nèi)得到響應(yīng)愉舔。

從某一個(gè)角度為固定去查看其他的統(tǒng)計(jì)維度稱為切片

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钢猛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轩缤,更是在濱河造成了極大的恐慌命迈,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件火的,死亡現(xiàn)場離奇詭異壶愤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)馏鹤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門征椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湃累,你說我怎么就攤上這事勃救“郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵剪芥,是天一觀的道長垄开。 經(jīng)常有香客問我,道長税肪,這世上最難降的妖魔是什么溉躲? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮益兄,結(jié)果婚禮上锻梳,老公的妹妹穿的比我還像新娘。我一直安慰自己净捅,他們只是感情好疑枯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛔六,像睡著了一般荆永。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機(jī)與錄音连躏,去河邊找鬼拂酣。 笑死赎线,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宁玫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柑晒?” 一聲冷哼從身側(cè)響起欧瘪,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匙赞,沒想到半個(gè)月后恋追,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罚屋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗅绸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脾猛。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鱼鸠,靈堂內(nèi)的尸體忽然破棺而出猛拴,到底是詐尸還是另有隱情羹铅,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布愉昆,位于F島的核電站职员,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跛溉。R本人自食惡果不足惜焊切,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芳室。 院中可真熱鬧专肪,春花似錦、人聲如沸堪侯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伍宦。三九已至芽死,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間次洼,已是汗流浹背关贵。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滓玖,地道東北人坪哄。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像势篡,于是被迫代替她去往敵國和親翩肌。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容