數(shù)據(jù)庫
第一章
三種數(shù)據(jù)管理技術(shù)和優(yōu)缺點
人工管理
-
文件系統(tǒng)
共享性差告抄,冗余度大
-
數(shù)據(jù)庫系統(tǒng)
特點:
-
數(shù)據(jù)整體結(jié)構(gòu)化
不是針對某一個應用栈幸,而是面向全組織愤估;不僅數(shù)據(jù)內(nèi)部結(jié)構(gòu)化,數(shù)據(jù)整體也是結(jié)構(gòu)化的速址,數(shù)據(jù)之間有聯(lián)系玩焰;數(shù)據(jù)記錄是變長的;數(shù)據(jù)最小存取單位是數(shù)據(jù)項芍锚。
-
數(shù)據(jù)共享性高昔园、冗余度低且易擴充
可以被多個應用蔓榄、用戶共享使用;低冗余節(jié)省空間默刚,使系統(tǒng)易于擴充甥郑。
-
數(shù)據(jù)獨立性高
物理獨立性:應用和數(shù)據(jù)的物理存儲是獨立的,物理存儲改變荤西,應用程序不變澜搅。
邏輯獨立性:應用和數(shù)據(jù)的邏輯結(jié)構(gòu)是獨立的,邏輯結(jié)構(gòu)改變邪锌,應用程序不變店展。
數(shù)據(jù)獨立性由數(shù)據(jù)庫管理系統(tǒng)的二級映像功能來保證。
-
數(shù)據(jù)由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一管理
數(shù)據(jù)的安全性保護秃流;數(shù)據(jù)的完整性檢查;并發(fā)控制柳弄;數(shù)據(jù)庫恢復舶胀。
-
數(shù)據(jù)模型
-
概念模型(信息模型)
從用戶的角度對數(shù)據(jù)和信息進行建模
-
邏輯模型和物理模型
-
邏輯模型
主要包括網(wǎng)狀模型、層次模型碧注、關(guān)系模型嚣伐、面向?qū)ο髷?shù)據(jù)模型、對象關(guān)系數(shù)據(jù)模型萍丐、半結(jié)構(gòu)化數(shù)據(jù)模型等轩端。從計算機系統(tǒng)的角度建模。用于DBMS實現(xiàn)逝变。
-
物理模型
數(shù)據(jù)最底層的抽象基茵,描述數(shù)據(jù)在系統(tǒng)內(nèi)部的表示方式和存取方法,在磁盤或磁帶上的存儲方式和存取方法壳影。
-
客觀對象的抽象過程:
- 將顯示世界抽象為概念模型(信息模型)
- 將概念模型抽象為DBMS支持的數(shù)據(jù)模型
- 邏輯模型到物理模型(DBMS完成)
概念模型
實體-聯(lián)系法
- 實體:客觀存在并可相互區(qū)別的事物稱為實體
- 屬性:實體具有的某一特性拱层,一個實體可以由若干個屬性來刻畫
- 碼:唯一標識實體的屬性集稱為碼
- 實體型(實體模型):用實體名及其屬性名集合來抽象和刻畫同類實體稱為實體型
- 實體集:同一類型實體的集合稱為實體集
- 聯(lián)系: 現(xiàn)實世界中事物內(nèi)部以及事物之間的聯(lián)系在信息世界中反應為實體內(nèi)部和實體之間的聯(lián)系;實體內(nèi)部的聯(lián)系通常是指實體的屬性之間的聯(lián)系宴咧;實體之間的聯(lián)系通常是指不同實體集之間的聯(lián)系根灯;實體之間的聯(lián)系通常有一對一、一對多掺栅、多對多等烙肺。
實體-聯(lián)系圖/E-R圖
實體矩形,屬性橢圓氧卧、聯(lián)系菱形桃笙,實體和屬性之間用無向邊連接,
數(shù)據(jù)模型組成(三要素記准俪)
數(shù)據(jù)結(jié)構(gòu)
描述數(shù)據(jù)庫的組成對象以及對象之間的聯(lián)系怎栽,是對系統(tǒng)靜態(tài)特性的描述
內(nèi)容:與對象的類型內(nèi)容性質(zhì)有關(guān)丽猬,也與數(shù)據(jù)之間的聯(lián)系有關(guān)
數(shù)據(jù)操作
對數(shù)據(jù)庫中對象和實例的操作集合,增刪查改熏瞄,是對系統(tǒng)動態(tài)特性的描述
完整性約束條件
一組完整性規(guī)則的集合
完整性規(guī)則:給定數(shù)據(jù)模型中數(shù)據(jù)及其聯(lián)系所具有的制約和依存規(guī)則脚祟,用于限制數(shù)據(jù)模型的狀態(tài)及狀態(tài)變化,以保證數(shù)據(jù)的正確强饮、有效和相容由桌。
常用的數(shù)據(jù)模型
層次模型和網(wǎng)狀模型稱為非關(guān)系模型,關(guān)系模型邮丰、面向?qū)ο箨P(guān)系模型行您、對象關(guān)系數(shù)據(jù)模型、半結(jié)構(gòu)化數(shù)據(jù)模型
層次模型
是用樹形結(jié)構(gòu)來表示實體以及實體之間的聯(lián)系剪廉,滿足以下兩個條件的基本層次結(jié)構(gòu)的集合稱為層次模型
- 有且只有一個節(jié)點沒有雙親結(jié)點娃循,稱為根節(jié)點
- 根以外的節(jié)點有且只有一個雙親節(jié)點
層次模型的術(shù)語
- 根節(jié)點
- 雙親結(jié)點
- 兄弟節(jié)點
- 葉節(jié)點(子節(jié)點)
特點:雙親結(jié)點是唯一的;只能直接處理一對多的實體聯(lián)系斗蒋;每個記錄類型可以定義一個排序字段(碼字段)捌斧;任何記錄值只有按其路徑查看才能顯出它的全部意義;沒有一個子女記錄能脫離雙親記錄值而獨立存在泉沾。
完整性約束:
- 不能插入無雙親的子節(jié)點
- 如果刪除雙親節(jié)點捞蚂,則所有子節(jié)點也被刪除
- 更新操作數(shù),應更新所有對應記錄以保證數(shù)據(jù)的一致性
優(yōu)點:
- 數(shù)據(jù)結(jié)構(gòu)簡單清晰
- 查詢效率高于關(guān)系模型跷究,不低于網(wǎng)狀模型
- 提供了良好的完整性支持
缺點:
- 多對多表示不自然
- 對插入和刪除操作的限制多姓迅,程序編寫復雜
- 查詢子節(jié)點必須經(jīng)過雙親節(jié)點
- 層次命令趨于程序化
網(wǎng)狀模型
滿足以下條件:
- 允許一個以上的節(jié)點無雙親
- 一個節(jié)點可以有一個以上的雙親
層次模型是網(wǎng)狀模型的一個特例,網(wǎng)狀模型中父子節(jié)點的聯(lián)系可以不唯一俊马,要為每個聯(lián)系命名并指出與該聯(lián)系有關(guān)的父子節(jié)點
優(yōu)點:
- 更直觀的描述現(xiàn)實世界
- 具有良好的性能丁存,存取效率高
缺點:
- 結(jié)構(gòu)復雜,隨著數(shù)據(jù)的增多潭袱,數(shù)據(jù)越來越復雜不利于維護
- DDL柱嫌、DML語言復雜
- 記錄之間的聯(lián)系是通過存取路徑實現(xiàn)的,用戶必須了解系統(tǒng)結(jié)構(gòu)的細節(jié)
關(guān)系模型
邏輯結(jié)構(gòu)是一個二維表屯换,由行和列組成
- 關(guān)系:即一張表
- 元組:一行
- 屬性:列
- 主碼
- 域:一組具有相同數(shù)據(jù)類型的值的集合编丘,屬性的取值范圍
- 分量:元組中的一個屬性值
- 關(guān)系模式:對關(guān)系的描述,即實體型彤悔,下劃線的屬性是主碼
關(guān)系模型的規(guī)范:
- 每一個分量都是密不可分的數(shù)據(jù)項嘉抓,數(shù)據(jù)項是關(guān)系模型中的最小操作單位,即不允許表中有表
優(yōu)點:
- 建立在嚴格的數(shù)學概念的基礎(chǔ)上
- 概念單一晕窑,實體和各類聯(lián)系以及對數(shù)據(jù)的檢索結(jié)果都用關(guān)系來表示
- 關(guān)系模式的存取路徑對用戶透明抑片,有更高的數(shù)據(jù)獨立性和安全保密性,簡化了程序員的工作和數(shù)據(jù)庫開發(fā)的工作
缺點:
- 查詢效率低杨赤,需要另外增加對查詢的優(yōu)化
數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)
模式:schema敞斋,是型的描述截汪,反應的是數(shù)據(jù)的結(jié)構(gòu)和聯(lián)系,是靜態(tài)的
實例:instance植捎,模式的具體值衙解,是某一時刻的狀態(tài),是動態(tài)的焰枢,一個模式可以有多個實例
三級模式
- 模式:定義和值
- 外模式:使用管理蚓峦,通常是模式的子集,一個模式可能有多個外模式济锄,一個外模式可以供多個應用使用
- 保證數(shù)據(jù)安全性
- 每個用戶只能訪問對應外模式中的數(shù)據(jù)
- 內(nèi)模式:存儲管理:一個數(shù)據(jù)庫只有一個內(nèi)模式
二級=映像功能與數(shù)據(jù)獨立性
- 外模式到模式的映射
- 模式到內(nèi)模式的映射
數(shù)據(jù)的邏輯獨立性
應用程序(外模式)與數(shù)據(jù)庫的邏輯結(jié)構(gòu)(模式)是相互獨立的暑椰,即數(shù)據(jù)的邏輯結(jié)構(gòu)發(fā)生改變,應用程序不用改變
外模式/模式映象定義了外模式與模式之間的對應關(guān)系荐绝,當模式改變時一汽,只需修改外模式/模式映象,使外模式保持不變低滩,而應用程序時是根據(jù)外模式編寫的角虫,因次不需要修改外部程序,保證了數(shù)據(jù)與程序的邏輯獨立性
數(shù)據(jù)的物理獨立性
應用程序(外模式)與存儲在磁盤上的數(shù)據(jù)庫(文件)中的存儲結(jié)構(gòu)(內(nèi)模式)是相互獨立的委造。數(shù)據(jù)文件的組織方式改變不需要修改應用程序
模式/內(nèi)模式映象定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)之間的對于關(guān)系,當存儲結(jié)構(gòu)改變均驶,只需修改模式/內(nèi)模式映象昏兆,使模式保持不變。同樣不需要修改應用程序妇穴,保證了數(shù)據(jù)與程序的物理獨立性
第二章
關(guān)系數(shù)據(jù)結(jié)構(gòu)及形式化定義
- 域:一類具有相同數(shù)據(jù)類型的值的集合
- 笛卡爾積:給定一組域D1爬虱,...Dn,其笛卡爾積D1*...*Dn={(d1,...,dn)|di=1,...,n}腾它。其中(d1,...dn)稱為元組跑筝,di稱為元組的第i個分量,D1*...*Dn的一個子集叫做該域上的關(guān)系瞒滴,定義在n個域上的關(guān)系稱為n元關(guān)系曲梗。有些笛卡爾積可能沒有意義
關(guān)系的6個性質(zhì):
- 列是同質(zhì)的
- 不同的列可以出自同一個域
- 列序無關(guān)性
- 任意兩個元組不能完全相同
- 行序無關(guān)行
- 分量必須取原子值
幾個概念:
- 候選碼:能夠唯一標識元組的屬性
- 主碼:候選碼中選擇一個作為主碼
- 主屬性:出現(xiàn)在候選碼中的屬性
- 非主屬性:不出現(xiàn)在候選碼中的屬性
關(guān)系操作
關(guān)系的完整性
-
實體完整性
主屬性不能取空值
-
參照系統(tǒng)完整性
外碼只能取空值或者對于關(guān)系中包含的主碼,不能取未出現(xiàn)的值
-
用戶定義完整性
對某些屬性進行約束
關(guān)系代數(shù)
以集合為基礎(chǔ)妓忍,定義一組運算虏两,由已知關(guān)系經(jīng)過一系列運行,得到需要的查詢結(jié)果世剖,關(guān)系代數(shù)是過程化的查詢語言
關(guān)系代數(shù)繼承傳統(tǒng)的集合運算:交定罢、并、差旁瘫、廣義笛卡爾積祖凫。其中交并差要求參與運算的兩個關(guān)系要由相同的結(jié)構(gòu)琼蚯。
專門的關(guān)系運算:
選擇
其中F是條件,一般為一個邏輯表達式
投影
從R中選擇出若干屬性組成新的關(guān)系
其中A為要取出的R中的列的集合
注:投影之后不僅取消了原關(guān)系中的某些列惠况,還可能取消某些行(避免重復行)
連接
同樣需要取消重復列
兩種常用的連接運算
- 等值連接:A=B
- 自然連接:特殊的等值連接遭庶,要求條件中的兩個列必須是同名的,并在結(jié)果中合并
幾種特殊的自然連接:
- 左外連接:保留左側(cè)不匹配的售滤,NULL填充罚拟,下同
- 右外連接:保留右側(cè)不匹配的
- 外連接:保留不匹配的
- 內(nèi)連接:丟棄不匹配的(一般的自然連接)
象集
除法
整除,類似取樣性質(zhì)弊知,需要取樣時會用到除法
對于共同屬性的判斷阻逮,是域相同而不是屬性名相同,但通常是指公共屬性
各類符號
關(guān)系演算
看PPT
SQL
在mysql中秩彤,create database和create schema是等價的
一些sql關(guān)鍵字:
- authorization:指定所有者
- primary key:指定主鍵叔扼,主鍵指定的屬性不能用unique和not null修飾
- unique:唯一性約束,但可以有多個空值
- foreign key (<column.name>) references <table.name>(<column.name>)
- distinct:消除重復組漫雷。select distinct * from table.name
- between and/not between and
- in/not in
- like:%通配符垄潮,_單通配符/not like
- desc降序/asc升序
- group by:分組并使集函數(shù)分別作用于每個組
- intesect:返回兩個select查詢中相同的部分
索引
- 普通索引
- 單一索引:對索引加上unique約束,create unique index table.name(column.name)
- 聚簇索引:會改變內(nèi)模式
自身連接
select a.con, b.conp from course a,course b;取別名
嵌套查詢中子查詢不能使用order by語句
子查詢時绒极,子查詢語句要放在等號后面
相關(guān)子查詢:子查詢的條件與父查詢當前值相關(guān)躲叼。相關(guān)子查詢?nèi)绻硬樵兒透覆樵兪菍ν粋€數(shù)據(jù)庫操作,必須使用別名蓄坏。如果是不相關(guān)子查詢也可以不用別名价捧。
集函數(shù)不能出現(xiàn)在where字句中,只能在select字句和having短句中涡戳。集函數(shù)不能嵌套结蟋。
from語句后的表也可以是子查詢,但必須使用別名
數(shù)據(jù)更新時會檢查完整性規(guī)則:
- 實體完整性
- 參照完整性
- 用戶定義完整性
視圖view
和表操作基本一致渔彰,但是view不占用實際存儲空間嵌屎,而是在使用時從表中獲取臨時數(shù)據(jù)集,視圖對應外模式恍涂。
視圖的作用:
簡化用戶操作编整,使多用戶從多個角度看待同一數(shù)據(jù),保證數(shù)據(jù)的邏輯獨立性乳丰,提供數(shù)據(jù)保密
數(shù)據(jù)完整性
三個要求:
- 提供定義完整性約束條件(可定義)
- 提供完整性檢查的方法(可檢查)
- 違約處理(可處理)
實體完整性
定義
-
列級約束定義
在建表時的列聲明后加上碼約束掌测,單屬性碼
-
表級主碼約束
在建表時列聲明完成侯最后進行碼約束,單屬性或多屬性碼
檢查
DBMS檢查:
-
主碼是否唯一
-
全表掃描
耗時
-
索引
DBMS在主碼上自動建立索引
- B+樹索引
-
檢查主碼是否為空
參照完整性
定義
- foreign key創(chuàng)建2外碼約束
- references指明外碼參照的表和其屬性
- 外碼定義時需要定義外碼是否允許為空
檢查
- 附表插入元組中的外碼在主表中沒有對應的主碼
- 附表修改元組中的外碼在主表中沒有對應的主碼
- 主表中刪除一個元組導致附表中的元組外碼對應缺失
- 主表中修改一個元組導致附表中的元組外碼對應缺失
處理:
附表操作:拒絕
主表操作:拒絕/級連刪除/附表中對應外碼設空
用戶定義完整性
屬性約束
定義
表聲明列定義時添加的約束:
- 列值非空:NOT NULL
- 列值唯一:UNIQUE
- 列值檢查:CHECK
檢查和處理
拒絕
元組約束
定義
表聲明列定義時使用CHECK語句建立,可以設置同一組不同屬性之間的約束
檢查和處理
拒絕
完整性約束命名字句
定義
constraint <約束名> <約束條件>
約束條件包括:
- not null
- unique
- primary key
- foreign kry
- check
修改
alter table <table.name> (drop/add) constraint <constraint.name>
斷言
create assertion語句創(chuàng)建斷言
create assertion <assertion.name> <條件>
對斷言中涉及的關(guān)系進行操作都會觸發(fā)斷言汞斧,不能通過斷言的操作都會被拒絕
觸發(fā)器
定義
create trigger <觸發(fā)器名>
{before/after} <觸發(fā)事件> on <表名>
referencing new/old row as <變量>
for each {row/statement}
[when <觸發(fā)條件>]<觸發(fā)動作體>
觸發(fā)器又叫:事件-條件-動作夜郁;觸發(fā)器只能定義在基本表上,不能定義在視圖上粘勒;基本表數(shù)據(jù)發(fā)生變化時竞端,將激活定義在該表上相應的觸發(fā)器
before/after指定觸發(fā)動作執(zhí)行的時間;觸發(fā)事件是insert\delete\update或者他們的組合庙睡,或update of <列名,...>指定觸發(fā)列事富;row/statement指定觸發(fā)器級別,語句級觸發(fā)器每條語句最多觸發(fā)一次乘陪,行級觸發(fā)器每行最多觸發(fā)一次
關(guān)系數(shù)據(jù)理論
數(shù)據(jù)依賴
一個關(guān)系內(nèi)部屬性與屬性之間的一種約束關(guān)系统台,是現(xiàn)實世界屬性間相互聯(lián)系的抽象,是數(shù)據(jù)的內(nèi)在性質(zhì)啡邑,是語義的體現(xiàn)贱勃。
規(guī)范化
函數(shù)依賴
由一個屬性可以唯一確定另一個屬性,稱為函數(shù)依賴(類似函數(shù)關(guān)系)谤逼。如學號可以唯一確定姓名贵扰。
通過依賴將模式分解。
平凡函數(shù)依賴與非平凡函數(shù)依賴
若X->Y流部,則稱X為這個函數(shù)依賴的決定因素
-
完全函數(shù)依賴
X->Y戚绕,X的任何真子集,不能決定Y枝冀,稱為完全函數(shù)依賴
-
部分函數(shù)依賴
X->Y列肢,X的某個真子集也能決定Y,稱為部分函數(shù)依賴
-
傳遞函數(shù)依賴
碼
-
全碼
關(guān)系中宾茂,所有屬性共同決定組成候選碼,任意部分都不能組成候選碼拴还,改碼稱為主碼
候選碼
主碼
外碼
范式
- 1NF
- 2NF
- 3NF
- BCNF
- 4NF
- 5NF
第一范式
表項不可再分
第二范式
每個表都有主碼
任何一個非主屬性跨晴,都完全依賴于候選碼
例如主碼(學號,課程號)片林,非主屬性(成績端盆,姓名),其中非主屬性姓名不是主碼的完全依賴(只依賴于學號)费封,那么該關(guān)系不屬于第二范式
盡量讓主碼為單一字段
將不符合第二范式的模式分解焕妙,使其符合第二范式
第三范式
不存在非主屬性之間的傳遞依賴
BCNF
只有候選碼能決定屬性組