What is database(數(shù)據(jù)庫)? What is DBMS(數(shù)據(jù)庫管理系統(tǒng))?
什么是數(shù)據(jù)庫淤井?
大規(guī)模的集成的數(shù)據(jù)集合。
數(shù)據(jù)庫是面向一個企業(yè)或者一個單位的相關(guān)數(shù)據(jù)的集合,是用來支持這個企業(yè)或者這個應(yīng)用單位的各種應(yīng)用的開發(fā)的相關(guān)數(shù)據(jù)集合欲险。
數(shù)據(jù)庫起什么作用揖盘?
數(shù)據(jù)庫是對現(xiàn)實世界中一個企業(yè)或者應(yīng)用單位的一個建模项阴,現(xiàn)在用計算機(jī)做信息化管理言蛇,用計算機(jī)來管理企業(yè)來管理機(jī)關(guān)或者企事業(yè)單位的日常運作僻他。
在數(shù)據(jù)庫中有兩類最重要的數(shù)據(jù)(以學(xué)校為例):
- Entity(實體):客觀存在的可有形可無形的東西:老師、學(xué)生腊尚、桌椅板凳吨拗、教室、課程婿斥、科研項目劝篷。
- Relationships(實體間的聯(lián)系):學(xué)生和老師之間有教學(xué)關(guān)系、有選課關(guān)系民宿。
什么是數(shù)據(jù)模型娇妓?
對現(xiàn)實世界進(jìn)行建模的方法。在描述現(xiàn)實世界中的實體和實體間的聯(lián)系時采用不同的描述方法就是采用了不同的數(shù)據(jù)模型勘高。
什么是數(shù)據(jù)庫管理系統(tǒng)(DBMS)峡蟋?
其實就是一個用來存儲和管理數(shù)據(jù)庫的系統(tǒng)軟件。
文件和數(shù)據(jù)庫的關(guān)系
文件和數(shù)據(jù)庫都可以用來存儲數(shù)據(jù)华望。文件就是操作系統(tǒng)提供的最簡單的最基本的存儲數(shù)據(jù)的機(jī)制蕊蝗,在文件里所存的數(shù)據(jù)就是一個平滑的字符流,它沒有結(jié)構(gòu)赖舟。文件沒有很強(qiáng)的數(shù)據(jù)管理的功能蓬戚,它只能create, open, read, write, lseek,像內(nèi)外存轉(zhuǎn)換宾抓、數(shù)據(jù)緩沖子漩、查詢算法都需要用戶應(yīng)用程序自己去做,但DBMS可以幫助你來完成這些東西石洗。
用文件進(jìn)行數(shù)據(jù)管理的話幢泼,你需要針對單一文件來編寫特定的查詢代碼,文件結(jié)構(gòu)有一點差別讲衫,你原來編寫的代碼就用不了了缕棵;用DBMS的話,你只需要告訴它你要什么數(shù)據(jù)涉兽,這個數(shù)據(jù)怎么來招驴,你不用管。
使用DBMS的話枷畏,大量用戶的同時的并發(fā)訪問不會破壞數(shù)據(jù)庫原有數(shù)據(jù)一致性别厘。
在導(dǎo)入數(shù)據(jù)時如果遇到停電等意外情況,文件里的數(shù)據(jù)未及時保存就會丟失拥诡,而DBMS會幫助你找回触趴。
數(shù)據(jù)庫系統(tǒng)可以進(jìn)行更加精細(xì)的訪問權(quán)限管理氮发。
數(shù)據(jù)庫系統(tǒng)就是建立在文件系統(tǒng)之上的,用數(shù)據(jù)庫來進(jìn)行更加復(fù)雜的數(shù)據(jù)管理雕蔽。
計算機(jī)已經(jīng)從計算發(fā)展到對信息的管理折柠。
scramble to webspace:微博、QQ上有大量的數(shù)據(jù)批狐,如果不對其進(jìn)行有效管理扇售,就會把你的電腦搞的亂七八糟。
scientific applications:科學(xué)應(yīng)用嚣艇,高精尖科學(xué)研究中有大量科研數(shù)據(jù)承冰,幫助科研人員進(jìn)行數(shù)據(jù)分析。
datasets(數(shù)據(jù)集):數(shù)據(jù)的種類和規(guī)模急劇膨脹食零。
DBMS這樣一個系統(tǒng)軟件的實現(xiàn)包含了計算機(jī)技術(shù)發(fā)展的絕大多數(shù)成果:DBMS要用操作系統(tǒng)困乒、編譯、多媒體技術(shù)贰谣、人工智能娜搂、邏輯等等。
數(shù)據(jù)吱抚、數(shù)據(jù)模型和數(shù)據(jù)模式
數(shù)據(jù)是用來描述現(xiàn)實世界的一種符號:描述一張桌子:顏色百宇、材質(zhì)、長寬高秘豹。
數(shù)據(jù)是信息存在的形式:甲骨文携御,符號記事。
數(shù)據(jù)模型是用來描述數(shù)據(jù)的一種概念和定義既绕,是用來描述現(xiàn)實世界的一種方法啄刹。可以理解為python凄贩、C++等程序設(shè)計語言誓军。
數(shù)據(jù)模式是用一種給定的數(shù)據(jù)模型來對一個企業(yè)進(jìn)行描述產(chǎn)生的結(jié)果∑T可以理解為用python谭企、C++編寫出的程序。
relational model of data(關(guān)系數(shù)據(jù)模型)
唯一基本數(shù)據(jù)結(jié)構(gòu):“關(guān)系”:就是表格(table)评肆。
表格中的一行(row)是一條元組,一列(column)是一個屬性非区。
關(guān)系型數(shù)據(jù)庫就是由一張一張表組成的瓜挽,每個表的結(jié)構(gòu)不一樣,對表的結(jié)構(gòu)的描述就是schema征绸。比如久橙,學(xué)生基本信息是一張表俄占,這張表的結(jié)構(gòu)是什么呢,它是由學(xué)生姓名淆衷、年齡缸榄、家庭地址等等這些屬性組成的,每個屬性的類型祝拯,比如學(xué)號甚带,它是一個長度為10的字符串,年齡是一個整數(shù)佳头,這些東西就是schema鹰贵。
數(shù)據(jù)的抽象級別
三級模式(schema):
第一級模式:物理模式(physical schema)
第二級模式:概念(邏輯)模式(conceptual (logical) schema)
第三級模式:視圖(外模式)(View 1 & View 2 & View 3)
physical schema 描述了數(shù)據(jù)在磁盤上到底是如何存儲的,關(guān)系型數(shù)據(jù)庫里的一張一張表要存在磁盤上用什么結(jié)構(gòu)來存康嘉。數(shù)據(jù)庫中的所有數(shù)據(jù)碉输,最終是落實到操作系統(tǒng)的文件的,以操作系統(tǒng)的文件形式存在磁盤上亭珍,那到底是以什么樣的格式存的呢敷钾,存儲的結(jié)構(gòu)是什么呢,這就是physical schema肄梨。一旦你確定了一種結(jié)構(gòu)阻荒,課程表用堆文件存,教室工資表用哈希文件存峭范,這些定下來的存儲結(jié)構(gòu)就構(gòu)成了物理模式财松。
conceptual schema 比如一個關(guān)系型數(shù)據(jù)庫中,有什么表纱控,有多少張表辆毡,表的結(jié)構(gòu)是什么,每張表每個屬性的類型長度是多少甜害,對邏輯結(jié)構(gòu)的描述舶掖,就是概念模式。
外模式(External Schema)是給用戶看的數(shù)據(jù)最終的樣子尔店。
概念模式和物理模式是一一對應(yīng)的映射眨攘,邏輯模式中有一張表,物理模式中一定對這張表一定有一個存儲結(jié)構(gòu)嚣州。概念模式中的那些表鲫售,我們稱之為“基表”,這些表是真正的用某種結(jié)構(gòu)存儲在磁盤上的该肴。
而外模式是由概念模式出發(fā)情竹,映射出來的不同的視圖,根據(jù)不同用戶或企業(yè)的需求來對數(shù)據(jù)模式的顯性形態(tài)進(jìn)行調(diào)整匀哄。
unordered files:堆文件
數(shù)據(jù)庫管理員不希望用戶看到秦效,每個學(xué)生選了什么課分?jǐn)?shù)是多少的詳細(xì)信息雏蛮,因為這是學(xué)生的個人隱私。這種情況下阱州,我就可以做一個視圖給外界用戶看挑秉,這樣一個新的視圖,是在conceptual schema 中 Enrolled 這張表的基礎(chǔ)上計算出來的苔货,這就是映射犀概。
數(shù)據(jù)獨立性(Data Independence)
用于數(shù)據(jù)開發(fā)的應(yīng)用程序和數(shù)據(jù)的具體結(jié)構(gòu)和存儲方法之間是相互隔離相互獨立的,使應(yīng)用程序在一定程度上不受存儲結(jié)構(gòu)和邏輯結(jié)構(gòu)變化的影響蒲赂。這就是因為上面講的那個三級模式兩級映射阱冶,映射關(guān)系保證了獨立關(guān)系。
Logical data independence(數(shù)據(jù)的邏輯獨立性):在數(shù)據(jù)庫基礎(chǔ)上研發(fā)的應(yīng)用程序不受數(shù)據(jù)邏輯結(jié)構(gòu)變化的影響滥嘴,因為應(yīng)用程序都是根據(jù)external schema而開發(fā)的木蹬。拿上面那個學(xué)校例子來說,Enrolled那張表若皱,改變其邏輯結(jié)構(gòu)镊叁,我只要想辦法改變Course_info這張表和Enrolled這張表之間的映射關(guān)系,保證Course_info視圖不變走触,那么我在Course_info視圖基礎(chǔ)上開發(fā)的應(yīng)用程序都不受影響晦譬。
Physical data independence(數(shù)據(jù)的物理獨立性):在上面學(xué)校的例子里,學(xué)生基本信息那幾張表我們都在磁盤里把他們存成堆文件互广,在“學(xué)號”這個屬性上建立一個索引敛腌,一旦系統(tǒng)建成后,我在運行系統(tǒng)時惫皱,經(jīng)常要把學(xué)生的學(xué)號和課程的代碼編號拿出來做查詢像樊,如果這兩個東西沒有索引的話,效率會非常低旅敷,那么我就要在Enrolled這張表上的sid和cid上增加兩個索引生棍。因為數(shù)據(jù)庫的物理模式和邏輯模式間存在這樣一種映射關(guān)系,那么即使數(shù)據(jù)的存儲結(jié)構(gòu)發(fā)生變化媳谁,索引增加涂滴,但是它不會影響到表格的結(jié)構(gòu),學(xué)生基本信息依舊是由姓名晴音、學(xué)號柔纵、年齡組成的,邏輯結(jié)構(gòu)沒有發(fā)生改變锤躁,只是多建立了幾個索引首量,存儲方式變了。
這就是數(shù)據(jù)庫的三級模式兩級映射兩級獨立性。
數(shù)據(jù)庫的歷史
數(shù)據(jù)模型(data model)是數(shù)據(jù)庫系統(tǒng)的核心加缘。
數(shù)據(jù)庫系統(tǒng)(Database System)
DBA是負(fù)責(zé)管理這個系統(tǒng)的管理員,對整個系統(tǒng)的正常運行和維護(hù)起到關(guān)鍵作用觉啊。
DBMS是數(shù)據(jù)庫系統(tǒng)的核心拣宏。
DBMS提供了一個高級的用戶訪問接口,不像file只能讀字節(jié)杠人。
DBMS支持有效的查詢處理和優(yōu)化勋乾,關(guān)系型數(shù)據(jù)庫成為主流數(shù)據(jù)庫的原因。
DBMS支持有效的目錄管理(高級接口)嗡善。
DBMS提供有效的并發(fā)控制和恢復(fù)功能辑莫,保證大量用戶的并發(fā)訪問,保證數(shù)據(jù)系統(tǒng)的及時響應(yīng)和用戶獲取數(shù)據(jù)的一致性罩引,當(dāng)系統(tǒng)軟硬件發(fā)生故障時不會破壞數(shù)據(jù)庫的一致性各吨。
DBMS支持完整性約束檢查,它可以自動的按照用戶所定義的一些規(guī)則袁铐,幫助用戶維護(hù)數(shù)據(jù)庫里面數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系揭蜒,保證數(shù)據(jù)的一致性。
DBMS提供了完善的訪問控制剔桨,它保證之后合法的經(jīng)過授權(quán)的用戶屉更,才能訪問他有權(quán)訪問的數(shù)據(jù)。
數(shù)據(jù)庫系統(tǒng)的生命周期
- 數(shù)據(jù)庫系統(tǒng)的規(guī)劃:規(guī)劃信息系統(tǒng)的邊界和規(guī)模洒缀,看實現(xiàn)這個信息系統(tǒng)需要采用什么架構(gòu)瑰谜,是CS架構(gòu)還是BS架構(gòu),服務(wù)器應(yīng)該用什么樣的树绩,使用什么操作系統(tǒng)萨脑,使用什么樣的DBMS產(chǎn)品等等。
- 數(shù)據(jù)庫的設(shè)計:如果我決定采用關(guān)系型數(shù)據(jù)庫葱峡,那么這個數(shù)據(jù)庫里我應(yīng)該設(shè)計成多少張表砚哗、表的模式是什么、表和表的聯(lián)系是什么砰奕。
- 創(chuàng)建并加載數(shù)據(jù)
- 運行管理和維護(hù)數(shù)據(jù)庫
- 數(shù)據(jù)庫重構(gòu)(DBA要干的事)
數(shù)據(jù)庫設(shè)計時應(yīng)綜合考慮:
用戶的信息需求(Information requirement):用戶要在數(shù)據(jù)庫里管理哪些數(shù)據(jù)蛛芥。
數(shù)據(jù)的處理需求(Process requirement):用戶想要對數(shù)據(jù)做一些什么處理。
所用數(shù)據(jù)庫產(chǎn)品的特性(DBMS feature)
所用硬件和操作系統(tǒng)的特性(Hardware军援,OS feature)