成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

數(shù)據(jù)庫(kù)原理

wendux / 3005人閱讀

摘要:關(guān)系模型是我們現(xiàn)在用得最多的數(shù)據(jù)模型。下面的每一行數(shù)據(jù)都稱之為元組數(shù)據(jù)結(jié)構(gòu)操作系統(tǒng)計(jì)算機(jī)原理碼碼也被稱作是關(guān)鍵字。為什么查詢數(shù)據(jù)庫(kù)會(huì)出現(xiàn)笛卡爾積前面的博文已經(jīng)說(shuō)了,關(guān)系模型是關(guān)系模式的集合。

什么是數(shù)據(jù)庫(kù)?

數(shù)據(jù)庫(kù)是一個(gè)以某種有組織的方式存儲(chǔ)的數(shù)據(jù)集合。也就是:保存有組織數(shù)據(jù)的容器(一個(gè)文件或一組文件)

為什么我們需要數(shù)據(jù)庫(kù)?

毫無(wú)疑問(wèn),數(shù)據(jù)庫(kù)是用來(lái)存儲(chǔ)數(shù)據(jù)的。我們對(duì)excel肯定不會(huì)陌生,excel也是用來(lái)存儲(chǔ)數(shù)據(jù)。那既然有excel這樣非常好用的軟件了,為什么需要數(shù)據(jù)庫(kù)呢??

excel存儲(chǔ)的數(shù)據(jù)量太少了。由于我們網(wǎng)絡(luò)發(fā)展,excel的存儲(chǔ)量遠(yuǎn)遠(yuǎn)不能支撐我們的需求。

excel數(shù)據(jù)無(wú)法多人共享。excel只是一個(gè)單一的文件,只能是當(dāng)前的用戶使用并修改。

數(shù)據(jù)安全性。對(duì)excle數(shù)據(jù)的修改是很隨意的。

數(shù)據(jù)庫(kù)就解決了上面的問(wèn)題,并且數(shù)據(jù)庫(kù)以特殊的機(jī)制管理數(shù)據(jù)文件,對(duì)數(shù)據(jù)有極高的讀寫速度,大大超過(guò)了操作系統(tǒng)對(duì)常規(guī)文件的讀寫速度。

數(shù)據(jù)庫(kù)系統(tǒng)的組成

數(shù)據(jù)庫(kù)系統(tǒng)由三個(gè)層次組成:

數(shù)據(jù)庫(kù)(dataBase)

存放數(shù)據(jù)的倉(cāng)庫(kù),按照一定的格式(有組織的方式)進(jìn)行儲(chǔ)存

數(shù)據(jù)庫(kù)管理系統(tǒng)(dataBase Manager System)

建立、管理、維護(hù)數(shù)據(jù)庫(kù)的系統(tǒng)軟件

數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)(dataBase Application System)

使用到數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用軟件


數(shù)據(jù)描述與數(shù)據(jù)模型 理解數(shù)據(jù)描述

我們?cè)?strong>現(xiàn)實(shí)生活中描述一個(gè)事物是非常簡(jiǎn)單的,看到“一棵樹(shù)”,就說(shuō)是“一棵樹(shù)”

但怎么把“一棵樹(shù)“在計(jì)算機(jī)描述起來(lái)呢??計(jì)算機(jī)只識(shí)別0和1,”一棵樹(shù)“是不能直接存儲(chǔ)到計(jì)算機(jī)上的

于是乎,我們就把”一棵樹(shù)“抽象出來(lái),形成信息世界的概念模型。然后將概念模型的形式化成是DBMS支持的數(shù)據(jù)模型,存儲(chǔ)在計(jì)算機(jī)中。

簡(jiǎn)單來(lái)說(shuō):數(shù)據(jù)描述就是將現(xiàn)實(shí)世界中的實(shí)物抽象出來(lái),形成概念模型。把概念模型的形式轉(zhuǎn)換成是DBMS支持的類型,然后存儲(chǔ)到計(jì)算機(jī)中!


理解數(shù)據(jù)模型

數(shù)據(jù)模型主要用來(lái)描述數(shù)據(jù)!上邊已經(jīng)說(shuō)了,當(dāng)我們想在計(jì)算機(jī)上存儲(chǔ)現(xiàn)實(shí)事物的數(shù)據(jù)時(shí),需要先抽象成概念模型。將概念模型轉(zhuǎn)換成DBMS支持的數(shù)據(jù)模型,就可以把事物存儲(chǔ)到計(jì)算機(jī)中!

數(shù)據(jù)模型一般由三個(gè)部分組成:

數(shù)據(jù)結(jié)構(gòu)(對(duì)象與對(duì)象之間的關(guān)系)

數(shù)據(jù)操作(增刪改查)

完整性約束(限定數(shù)據(jù)是有一定規(guī)則的,比如:年齡不能為負(fù)數(shù))

數(shù)據(jù)模型也經(jīng)歷了一個(gè)發(fā)展階段:

①:層次模型,是一種樹(shù)型(層次)結(jié)構(gòu)來(lái)組織數(shù)據(jù)的數(shù)據(jù)模型。

優(yōu)點(diǎn):

結(jié)構(gòu)清晰,容易理解

節(jié)點(diǎn)之間聯(lián)系可以通過(guò)指針來(lái)實(shí)現(xiàn),查詢效率高

缺點(diǎn):

對(duì)于非層次結(jié)構(gòu)的數(shù)據(jù),表示起來(lái)非常麻煩,不直觀!


②:網(wǎng)狀模型, 是用有向圖結(jié)構(gòu)來(lái)組織數(shù)據(jù)的數(shù)據(jù)模型

優(yōu)點(diǎn):

非常靈活,更能直接地描述現(xiàn)實(shí)世界的事物

缺點(diǎn):

結(jié)構(gòu)復(fù)雜,非常難維護(hù)


③:關(guān)系模型,是一種用二維表格結(jié)構(gòu)表示數(shù)據(jù)及數(shù)據(jù)之間聯(lián)系的數(shù)據(jù)模型。

關(guān)系模型是我們現(xiàn)在用得最多的數(shù)據(jù)模型。

優(yōu)點(diǎn):

數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單、清晰。無(wú)論實(shí)體還是實(shí)體集,都用相對(duì)應(yīng)的二維表來(lái)表示!

有嚴(yán)格的數(shù)學(xué)理論根據(jù)。各種關(guān)系運(yùn)算(后面會(huì)講到)

缺點(diǎn):

查詢效率比非關(guān)系模型查,尤其是多表查詢的時(shí)候!


術(shù)語(yǔ)(基本概念)

我們對(duì)照著課程關(guān)系表來(lái)講解吧:

實(shí)體(Entity)

客觀存在并可相互區(qū)別的事物稱之為實(shí)體??梢钥闯墒荍ava類

例子:(課程關(guān)系表)就是一個(gè)實(shí)體。


屬性(Attribute)

實(shí)體所具有的某一特性稱之為屬性??梢钥闯墒荍ava類的成員變量。屬性在數(shù)據(jù)庫(kù)中又稱為字段(或者是列)

例子:(課程名),(課程號(hào))、(學(xué)時(shí))就是屬性名。


元組

除含有屬性名所在的行之外的其他行稱之為元組。

下面的每一行數(shù)據(jù)都稱之為元組
(C401001 數(shù)據(jù)結(jié)構(gòu) 70)
(C401002 操作系統(tǒng) 80)
(C402001 計(jì)算機(jī)原理 60)


碼(Key)

碼也被稱作是關(guān)鍵字。它可以唯一標(biāo)識(shí)一個(gè)實(shí)體。

候選碼和主碼:

候選碼:如果一組屬性集能唯一地標(biāo)識(shí)一個(gè)關(guān)系中的元組而又不含有多余的屬性,則稱該屬性集為該關(guān)系的候選碼 。(候選碼可能不止有一個(gè)

主碼:用戶選定的那個(gè)候選鍵稱為主鍵

例子:郵寄地址(城市名,街道名,郵政編碼,單位名,收件人)

它有兩個(gè)候選鍵:{城市名,街道名} 和 {街道名,郵政編碼}

如果我選取{城市名,街道名}作為唯一標(biāo)識(shí)實(shí)體的屬性,那么{城市名,街道名} 就是主碼


關(guān)系模式

關(guān)系名和其屬性集合的組合稱之為關(guān)系模式。

關(guān)系模式例子:課程關(guān)系表(課程號(hào),課程名,學(xué)時(shí))

提示:關(guān)系模型就是關(guān)系模式組成的集合


關(guān)系模型要求元組的每一個(gè)分量都是原子性的,也就是說(shuō),它必須屬于某種元素類型,如Integer、String等等,不能是列,集合,記錄,數(shù)組!

域就代表著該元組中每個(gè)分量的類型,從上面的圖我們可以看出,它的域是這樣的:課程號(hào):string,課程名:string,學(xué)時(shí):int


數(shù)據(jù)庫(kù)體系內(nèi)部結(jié)構(gòu)

數(shù)據(jù)庫(kù)的體系內(nèi)部結(jié)構(gòu)我們可以分為三層:

外模式

邏輯模式

內(nèi)模式

三級(jí)模式的位置:

三級(jí)模式的作用:

邏輯模式

邏輯模式是對(duì)數(shù)據(jù)庫(kù)全部數(shù)據(jù)的整體邏輯結(jié)構(gòu)的描述

例子:現(xiàn)在我有一個(gè)數(shù)據(jù)庫(kù),操作權(quán)限、角色、用戶之間的關(guān)系

于是有了以下的關(guān)系模式

權(quán)限關(guān)系(權(quán)限編號(hào),權(quán)限名稱,權(quán)限描述)

角色關(guān)系(角色編號(hào),角色名稱,角色描述)

用戶關(guān)系(用戶編號(hào),用戶名稱,用戶密碼)

在數(shù)據(jù)庫(kù)中所有關(guān)系模式的集合就組成了邏輯模式!


外模式

外模式是對(duì)數(shù)據(jù)庫(kù)用戶能看見(jiàn)和使用的局部數(shù)據(jù)邏輯結(jié)構(gòu)的描述,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。

外模式是可以有多個(gè)的,外模式是用戶和DBAS的接口,是對(duì)局部邏輯結(jié)構(gòu)的描述!

當(dāng)用戶應(yīng)用程序只需要顯示用戶名稱和密碼時(shí):

用戶關(guān)系(用戶名稱,用戶密碼)

在數(shù)據(jù)庫(kù)中操作局部邏輯結(jié)構(gòu)就稱作為外模式!


內(nèi)模式

內(nèi)模式是對(duì)數(shù)據(jù)庫(kù)表物理存儲(chǔ)結(jié)構(gòu)的描述。它定義了數(shù)據(jù)的內(nèi)部記錄類型、記錄尋址技術(shù)、索引和文件的組織方式及數(shù)據(jù)控制方面的內(nèi)容


DB內(nèi)部體系結(jié)構(gòu)的兩級(jí)映像

兩級(jí)映像分別是:

外模式和邏輯模式的映像

邏輯模式和內(nèi)模式的映像

提出兩級(jí)映射的概念有什么用呢?為什么需要有這兩級(jí)映像呢??

當(dāng)數(shù)據(jù)庫(kù)的邏輯模式結(jié)構(gòu)因某種原因修改時(shí),只要沒(méi)有改變邏輯模式中與外模式定義有關(guān)的屬性及與其關(guān)系模式名的隸屬關(guān)系,就可使外模式保持不變,從而不需修改應(yīng)用程序。

當(dāng)數(shù)據(jù)庫(kù)的內(nèi)模式由于某種原因要修改時(shí),可通過(guò)對(duì)邏輯模式與內(nèi)模式之間的映象的修改,使邏輯模式盡可能地保持不變,實(shí)現(xiàn)內(nèi)模式的改變盡可能地不修改應(yīng)用程序。

也就說(shuō):在改變內(nèi)部結(jié)構(gòu)的時(shí)候,只要不會(huì)觸及外部的數(shù)據(jù)時(shí),外部的數(shù)據(jù)并不需要做改變。兩級(jí)映像概念的提出也就是程序中耦合的問(wèn)題!


為什么我們要學(xué)習(xí)數(shù)據(jù)庫(kù)關(guān)系運(yùn)算?

學(xué)習(xí)和理解關(guān)系運(yùn)算的機(jī)理,對(duì)于理解關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢機(jī)制有十分重要的意義。

我們可能知道多表查詢的時(shí)候要消除重復(fù)多余的數(shù)據(jù),那重復(fù)多余的數(shù)據(jù)怎么產(chǎn)生的呢??WHERE字句又是怎么篩選數(shù)據(jù)的呢??這些問(wèn)題我們?cè)陉P(guān)系運(yùn)算中可以找到答案的。

學(xué)習(xí)數(shù)據(jù)庫(kù)的關(guān)系運(yùn)算,會(huì)讓我們明白SQL語(yǔ)句是怎么執(zhí)行的,是通過(guò)什么手段讓我們得到想要的結(jié)果。


學(xué)習(xí)大綱

笛卡爾積 什么是笛卡爾積?

笛卡爾積簡(jiǎn)單來(lái)說(shuō)就是兩個(gè)集合相乘的結(jié)果。

為什么查詢數(shù)據(jù)庫(kù)會(huì)出現(xiàn)笛卡爾積

前面的博文已經(jīng)說(shuō)了,關(guān)系模型是關(guān)系模式的集合

數(shù)據(jù)庫(kù)中的兩張表就相當(dāng)于兩個(gè)集合,當(dāng)我們使用SELECT語(yǔ)句查詢數(shù)據(jù)的時(shí)候,DBMS內(nèi)部就是以集合相乘的運(yùn)算得出結(jié)果

笛卡爾積的產(chǎn)生過(guò)程

我們發(fā)現(xiàn):笛卡爾積的基數(shù)是每個(gè)集合的元組相乘

得出來(lái)的數(shù)據(jù)內(nèi)容是難以符合現(xiàn)實(shí)中的實(shí)際情況的

為了更好地看見(jiàn)效果,我都會(huì)以實(shí)際的SQL語(yǔ)句來(lái)看效果,然后說(shuō)明問(wèn)題的。

emp表的記錄有14條:

dept表有4條記錄:

我們來(lái)看看SMITH,在emp表中,他只在20部門。

但在兩張表查詢后,10、20、30、40部門他都在了??!我們?cè)儆^察56條數(shù)據(jù),發(fā)現(xiàn)每個(gè)人都有4個(gè)部門,這樣的數(shù)據(jù)是不合理的??!

再回到初衷,我們查詢兩張表的目的是什么??在查詢員工信息的同時(shí),也能知道員工的部門名稱是什么?。。?/strong>所以,我們查詢的記錄數(shù)是不應(yīng)該有56條這么多的。。我們查詢的記錄數(shù)應(yīng)該是員工表的記錄數(shù),也就是14條而已!

我們?cè)賮?lái)分析:emp表中有deptno字段,dept表中也有deptno字段!而且發(fā)現(xiàn),emp表中的deptno字段的取值范圍是由dept表中deptno字段來(lái)決定的?。?!

所以,我們可以使用等值連接(emp.deptno=dept.deptno)來(lái)消除笛卡爾積,這樣就達(dá)到我們的目的了!


基于傳統(tǒng)集合理論的關(guān)系運(yùn)算

在Oracle上,操作集合的語(yǔ)法提供了4個(gè)關(guān)鍵字:

UNION(并集,重復(fù)的元組不顯示)

UNION ALL(并集,重復(fù)的元組也會(huì)顯示)

MINUS(差集)

INTERSECT(交集)

顯示查詢結(jié)果的全部信息,消除重復(fù)的元組

查詢所有辦事員和經(jīng)理的信息

    SELECT *
    FROM emp
    WHERE job = "MANAGER"
    
    UNION

    SELECT *
    FROM emp
    WHERE job = "CLERK";

注意:使用UNION并操作,比使用關(guān)鍵字OR的性能要好!


返回查詢結(jié)果相同的部分

查詢10部門的信息

SELECT *
FROM dept

INTERSECT 
SELECT *
FROM dept
WHERE deptno = 10;

(全部部門和部門10只有部門10是相同的,所以最后返回的是部門10的結(jié)果)


返回的查詢結(jié)果是

SELECT *
FROM dept

MINUS
SELECT *
FROM dept
WHERE deptno = 10;


關(guān)系代數(shù)特有的關(guān)系運(yùn)算 投影

投影的運(yùn)算過(guò)程:

首先按照j1,j2,…,jk的順序,從關(guān)系R 中取出列序號(hào)為j1,j2,…,jk(或?qū)傩悦蛄袨锳j1,Aj2,…,Ajk )的k 列,然后除去結(jié)果中的重復(fù)元組,構(gòu)成一個(gè)以Aj1,Aj2,…,Ajk為屬性順序的k 目關(guān)系。

簡(jiǎn)單來(lái)說(shuō):取出一個(gè)查詢結(jié)果中某某列,并消除重復(fù)的數(shù)據(jù),這就是投影!

投影是從列的角度進(jìn)行的運(yùn)算

投影的下標(biāo)可是列序號(hào),也可是列屬性名

查詢出所有部門的編號(hào)



SELECT deptno
FROM dept;

查詢時(shí)的過(guò)程:先查詢得出dept表的所有結(jié)果,再通過(guò)投影運(yùn)算只提取"deptno"的列數(shù)據(jù),如果 SELECT 后邊跟的是"*",那么就是投影全部數(shù)據(jù)!


選擇

使用比較運(yùn)算符、邏輯運(yùn)算符,挑出滿足條件的元組,運(yùn)算出結(jié)果!

查詢出工資大于2000的員工的姓名


SELECT ename
FROM emp
WHERE sal > 2000;

過(guò)程:首先查詢出emp表的所有結(jié)果,使用選擇運(yùn)算篩選得出工資大于2000的結(jié)果,最后使用投影運(yùn)算得出工資大于2000員工的名字!


除運(yùn)算

除運(yùn)算的實(shí)際應(yīng)用我還沒(méi)想明白~~~如果有朋友知道除運(yùn)算能夠用在數(shù)據(jù)庫(kù)的哪處,請(qǐng)告訴我一聲哈。。

我們也了解一下除運(yùn)算的過(guò)程吧:關(guān)系R有ABCD,關(guān)系S有CD,首先投影出AB(因?yàn)镾有CD),再用投影出來(lái)AB的結(jié)果和關(guān)系S做笛卡爾積運(yùn)算。如果做的笛卡爾積運(yùn)算記錄在R關(guān)系中找到相對(duì)應(yīng)的記錄,那么投影的AB就是結(jié)果了!


連接運(yùn)算

連接運(yùn)算其實(shí)就在笛卡爾積運(yùn)算的基礎(chǔ)上限定了條件(某列大于、小于、等于某列),只匹配和條件相符合的,從而得出結(jié)果!

自然連接

自然連接就是一種特殊的連接運(yùn)算,它限定的條件是【某列等于某列】。自然連接我們經(jīng)常使用到。消除笛卡爾積其實(shí)就是自然連接了!

SELECT *
FROM emp, dept
WHERE dept.deptno = emp.deptno;

設(shè)定將dept表的deptno列和emp的deptno列為相同【這就是自然連接】


如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/17705.html

相關(guān)文章

  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...

    羅志環(huán) 評(píng)論0 收藏0
  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系...

    isaced 評(píng)論0 收藏0
  • Android 性能監(jiān)控系列一(原理篇)

    摘要:全稱應(yīng)用性能管理監(jiān)控后面我會(huì)通過(guò)一系列的文章來(lái)介紹的原理框架設(shè)計(jì)與實(shí)現(xiàn)等等。在應(yīng)用構(gòu)建期間,通過(guò)修改字節(jié)碼的方式來(lái)進(jìn)行字節(jié)碼插樁就是實(shí)現(xiàn)自動(dòng)化的方案之一。 showImg(https://segmentfault.com/img/bVbbRX6?w=1995&h=1273); 歡迎關(guān)注微信公眾號(hào):BaronTalk,獲取更多精彩好文! 一. 前言 性能問(wèn)題是導(dǎo)致 App 用戶流失的罪魁...

    yacheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<