数据库相关概念
第一節一、相關概念1. Data:數據,是數據庫中存儲的基本對象,是描述事物的符號記錄。2. Database:數據庫,是長期儲存在計算機內、有組織的、可共享的大量數據的集合。3. DBMS:數據庫管理系統,是位于用戶與操作系統之間的一層數據管理軟件,用于科學地組織、存儲和管理數據、高效地獲取和維護數據。4. DBS:數據庫系統,指在計算機系統中引入數據庫后的系統,一般由數據庫、數據庫管理系統、應用系統、數據庫管理員(DBA)構成。5. 數據模型:是用來抽象、表示和處理現實世界中的數據和信息的工具,是對現實世界的模擬,是數據庫系統的核心和基礎;其組成元素有數據結構、數據操作和完整性約束。6. 概念模型:也稱信息模型,是按用戶的觀點來對數據和信息建模,主要用于數據庫設計。7. 邏輯模型:是按計算機系統的觀點對數據建模,用于 DBMS 實現。8. 物理模型:是對數據最底層的抽象,描述數據在系統內部的表示方式和存取方法,在磁盤或磁帶上的存儲方式和存取方法,是面向計算機系統的。9. 實體和屬性:客觀存在并可相互區別的事物稱為實體。實體所具有的某一特性稱為屬性。10.E-R 圖:即實體-關系圖,用于描述現實世界的事物及其相互關系,是數據庫概念模型設計的主要工具。11.關系模式:從用戶觀點看,關系模式是由一組關系組成,每個關系的數據結構是一張規范化的二維表。12.型/值:型是對某一類數據的結構和屬性的說明;值是型的一個具體賦值,是型的實例。13.數據庫模式:是對數據庫中全體數據的邏輯結構(數據項的名字、類型、取值范圍等)和特征(數據之間的聯系以及數據有關的安全性、完整性要求)的描述。14.數據庫的三級系統結構:外模式、模式和內模式。15.數據庫內模式:又稱為存儲模式,是對數據庫物理結構和存儲方式的描述,是數據在數據庫內部的表示方式。一個數據庫只有一個內模式。16.數據庫外模式:又稱為子模式或用戶模式,它是數據庫用戶能夠看見和使用的局部數據的邏輯結構和特征的描述,是數據庫用戶的數據視圖。通常是模式的子集。一個數據庫可有多個外模式。17.數據庫的二級映像:外模式/模式映像、模式/內模式映像。二、重點知識點1. 數據庫系統由數據庫、數據庫管理系統、應用系統和數據庫管理員構成。2. 數據模型的組成要素是:數據結構、數據操作、完整性約束條件。3. 實體型之間的聯系分為一對一、一對多和多對多三種類型。4. 常見的數據模型包括:關系、層次、網狀、面向對象、對象關系映射等幾種。5. 關系模型的完整性約束包括:實體完整性、參照完整性和用戶定義完整性。6. 闡述數據庫三級模式、二級映象的含義及作用。數據庫三級模式反映的是數據的三個抽象層次: 模式是對數據庫中全體數據的邏輯結構和特征的描述。內模式又稱為存儲模式,是對數據庫物理結構和存儲方式的描述。外模式又稱為子模式或用戶模式,是對特定數據庫用戶相關的局部數據的邏輯結構和特征的描述。數據庫三級模式通過二級映象在 DBMS 內部實現這三個抽象層次的聯系和轉換。外模式面向應用程序, 通過外模式/模式映象與邏輯模式建立聯系, 實現數據的邏輯獨立性。 模式/內模式映象建立模式與內模式之間的一對一映射, 實現數據的物理獨立性。第二節一、相關概念1. 主鍵: 能夠唯一地標識一個元組的屬性或屬性組稱為關系的鍵或候選鍵。 若一個關系有多個候選鍵則可選其一作為主鍵(Primary key)。2. 外鍵:如果一個關系的一個或一組屬性引用(參照)了另一個關系的主鍵,則稱這個或這組屬性為外碼或外鍵(Foreign key)。3. 關系數據庫: 依照關系模型建立的數據庫稱為關系數據庫。 它是在某個應用領域的所有關系的集合。4. 關系模式: 簡單地說,關系模式就是對關系的型的定義, 包括關系的屬性構成、各屬性的數據類型、 屬性間的依賴、 元組語義及完整性約束等。 關系是關系模式在某一時刻的狀態或內容, 關系模型是型, 關系是值, 關系模型是靜態的、 穩定的, 而關系是動態的、隨時間不斷變化的,因為關系操作在不斷地更新著數據庫中的數據。5. . 實體完整性:用于標識實體的唯一性。它要求基本關系必須要有一個能夠標識元組唯一性的主鍵,主鍵不能為空,也不可取重復值。6. 參照完整性:用于維護實體之間的引用關系。它要求一個關系的外鍵要么為空,要么取與被參照關系對應的主鍵值,即外鍵值必須是主鍵中已存在的值。7. 用戶定義的完整性:就是針對某一具體應用的數據必須滿足的語義約束。包括非空、 唯一和布爾條件約束三種情況。二、重要知識點1. 關系數據庫語言分為關系代數、關系演算和結構化查詢語言三大類。2. 關系的 5 種基本操作是選擇、投影、并、差、笛卡爾積。3.關系模式是對關系的描述,五元組形式化表示為:R(U,D,DOM,F),其中R —— 關系名U —— 組成該關系的屬性名集合D —— 屬性組 U 中屬性所來自的域DOM —— 屬性向域的映象集合F —— 屬性間的數據依賴關系集合4.笛卡爾乘積,選擇和投影運算如下第三節一、相關概念1. SQL:結構化查詢語言的簡稱,是關系數據庫的標準語言。SQL 是一種通用的、功能極強的關系數據庫語言, 是對關系數據存取的標準接口, 也是不同數據庫系統之間互操作的基礎。集數據查詢、數據操作、數據定義、和數據控制功能于一體。2. 數據定義:數據定義功能包括模式定義、表定義、視圖和索引的定義。3. 嵌套查詢:指將一個查詢塊嵌套在另一個查詢塊的 WHERE 子句或 HAVING 短語的條件中的查詢。二、重要知識點1. SQL 數據定義語句的操作對象有:模式、表、視圖和索引。2. SQL 數據定義語句的命令動詞是:CREATE、DROP 和 ALTER。3. RDBMS 中索引一般采用 B+樹或 HASH 來實現。4. 索引可以分為唯一索引、非唯一索引和聚簇索引三種類型6.SQL 創建表語句的一般格式為CREATE TABLE <表名>( <列名> <數據類型>[ <列級完整性約束> ][,<列名> <數據類型>[ <列級完整性約束>] ] …[,<表級完整性約束> ] ) ;其中<數據類型>可以是數據庫系統支持的各種數據類型,包括長度和精度。列級完整性約束為針對單個列(本列)的完整性約束, 包括 PRIMARY KEY、 REFERENCES 表名(列名)、UNIQUE、NOT NULL 等。表級完整性約束可以是基于表中多列的約束,包括 PRIMARY KEY ( 列名列表) 、FOREIGN KEY REFERENCES 表名(列名) 等。7. SQL 創建索引語句的一般格式為CREATE [UNIQUE] [CLUSTER] INDEX <索引名>ON <表名> (<列名列表> ) ;其中 UNIQUE:表示創建唯一索引,缺省為非唯一索引;CLUSTER:表示創建聚簇索引,缺省為非聚簇索引;<列名列表>:一個或逗號分隔的多個列名,每個列名后可跟 ASC 或 DESC,表示升/降序,缺省為升序。多列時則按為多級排序。8. SQL 查詢語句的一般格式為SELECT [ALL|DISTINCT] <算術表達式列表> FROM <表名或視圖名列表>[ WHERE <條件表達式 1> ][ GROUP BY <屬性列表 1> [ HAVING <條件表達式 2 > ] ][ ORDER BY <屬性列表 2> [ ASC|DESC ] ] ;其中ALL/DISTINCT: 缺省為 ALL, 即列出所有查詢結果記錄, 包括重復記錄。 DISTINCT 則對重復記錄只列出一條。算術表達式列表:一個或多個逗號分隔的算術表達式,表達式由常量(包括數字和字符串)、列名、函數和算術運算符構成。每個表達式后還可跟別名。也可用 *代表查詢表中的所有列。<表名或視圖名列表>: 一個或多個逗號分隔的表或視圖名。 表或視圖名后可跟別名。條件表達式 1:包含關系或邏輯運算符的表達式,代表查詢條件。條件表達式 2:包含關系或邏輯運算符的表達式,代表分組條件。<屬性列表 1>:一個或逗號分隔的多個列名。<屬性列表 2>: 一個或逗號分隔的多個列名, 每個列名后可跟 ASC 或 DESC, 表示升/降序,缺省為升序。關于 SQL 語句的知識這里先作如上簡略介紹,具體寫法下次將專門拿出一篇來敘述。第四節一、相關概念和知識1.觸發器是用戶定義在基本表上的一類由事件驅動的特殊過程。由服務器自動激活,能執行更為復雜的檢查和操作,具有更精細和更強大的數據控制能力。使用 CREATE TRIGGER 命令建立觸發器。2.計算機系統存在技術安全、管理安全和政策法律三類安全性問題。3. TCSEC/TDI 標準由安全策略、責任、保證和文檔四個方面內容構成。4. 常用存取控制方法包括自主存取控制(DAC)和強制存取控制(MAC)兩種。5. 自主存取控制(DAC)的 SQL 語句包括 GRANT 和 REVOKE 兩個。 用戶權限由數據對象和操作類型兩部分構成。6. 常見 SQL 自主權限控制命令和例子。1) 把對 Student 和 Course 表的全部權限授予所有用戶。GRANT ALL PRIVILIGES ON TABLE Student,Course TO PUBLIC ;2) 把對 Student 表的查詢權和姓名修改權授予用戶 U4。GRANT SELECT,UPDATE(Sname) ON TABLE Student TO U4 ;3) 把對 SC 表的插入權限授予 U5 用戶,并允許他傳播該權限。GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION ;4) 把用戶 U5 對 SC 表的 INSERT 權限收回,同時收回被他傳播出去的授權。REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;5) 創建一個角色 R1,并使其對 Student 表具有數據查詢和更新權限。CREATE ROLE R1;GRANT SELECT,UPDATE ON TABLE Student TO R1;6) 對修改 Student 表結構的操作進行審計。一、相關概念和知識點1.數據依賴:反映一個關系內部屬性與屬性之間的約束關系,是現實世界屬性間相互聯系的抽象,屬于數據內在的性質和語義的體現。2. 規范化理論:是用來設計良好的關系模式的基本理論。它通過分解關系模式來消除其中不合適的數據依賴,以解決插入異常、刪除異常、更新異常和數據冗余問題。3. 函數依賴:簡單地說,對于關系模式的兩個屬性子集 X 和 Y,若 X 的任一取值能唯一確定 Y 的值,則稱 Y 函數依賴于 X,記作 X→Y。4. 非平凡函數依賴:對于關系模式的兩個屬性子集 X 和 Y,如果 X→Y,但 Y!?X,則稱 X→Y 為非平凡函數依賴;如果 X→Y,但 Y?X,則稱 X→Y 為非平凡函數依賴。5. 完全函數依賴:對于關系模式的兩個屬性子集 X 和 Y,如果 X→Y,并且對于 X 的任何一個真子集 X',都沒有 X'→Y,則稱 Y 對 X 完全函數依賴。6. 范式:指符合某一種級別的關系模式的集合。在設計關系數據庫時,根據滿足依賴關系要求的不同定義為不同的范式。7. 規范化:指將一個低一級范式的關系模式,通過模式分解轉換為若干個高一級范式的關系模式的集合的過程。8. 1NF:若關系模式的所有屬性都是不可分的基本數據項,則該關系模式屬于 1NF。9. 2NF:1NF 關系模式如果同時滿足每一個非主屬性完全函數依賴于碼,則該關系模式屬于 2NF。10. 3NF:若關系模式的每一個非主屬性既不部分依賴于碼也不傳遞依賴于碼,則該關系模式屬于 3NF。11. BCNF:若一個關系模式的每一個決定因素都包含碼,則該關系模式屬于 BCNF。12. 數據庫設計:是指對于一個給定的應用環境,構造優化的數據庫邏輯模式和物理結構,并據此建立數據庫及其應用系統,使之能夠有效地存儲和管理數據,滿足各種用戶的應用需求,包括信息管理要求和數據操作要求。13. 數據庫設計的 6 個基本步驟:需求分析,概念結構設計,邏輯結構設計,物理結構設計,數據庫實施,數據庫運行和維護。14. 概念結構設計:指將需求分析得到的用戶需求抽象為信息結構即概念模型的過程。也就是通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體 DBMS 的概念模型。15. 邏輯結構設計:將概念結構模型(基本 E-R 圖)轉換為某個 DBMS 產品所支持的數據模型相符合的邏輯結構,并對其進行優化。16. 物理結構設計:指為一個給定的邏輯數據模型選取一個最適合應用環境的物理結構的過程。包括設計數據庫的存儲結構與存取方法。17. 抽象:指對實際的人、物、事和概念進行人為處理,抽取所關心的共同特性,忽略非本質的細節,并把這些特性用各種概念精確地加以描述,這些概念組成了某種模型。18. 數據庫設計必須遵循結構設計和行為設計相結合的原則。19. 數據字典主要包括數據項、數據結構、數據流、數據存儲和處理過程五個部分。20. 三種常用抽象方法是分類、聚集和概括。21. 局部 E-R 圖之間的沖突主要表現在屬性沖突、命名沖突和結構沖突三個方面。22. 數據庫常用的存取方法包括索引方法、聚簇方法和 HASH 方法三種。23. 確定數據存放位置和存儲結構需要考慮的因素主要有: 存取時間、 存儲空間利用率和維護代價等。二、細說數據庫三范式2.1 第一范式(1NF)無重復的列第一范式(1NF)中數據庫表的每一列都是不可分割的基本數據項同一列中不能有多個值即實體中的某個屬性不能有多個值或者不能有重復的屬性。簡而言之,第一范式就是無重復的列。在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。2.2 第二范式(2NF)屬性完全依賴于主鍵[消除部分子函數依賴]滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。第二范式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那么這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二范式就是屬性完全依賴于主鍵。2.3 第三范式(3NF)屬性不依賴于其它非主屬性[消除傳遞依賴]滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。2.4 具體實例剖析下面列舉一個學校的學生系統的實例,以示幾個范式的應用。在設計數據庫表結構之前,我們先確定一下要設計的內容包括那些。學號、學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話等信息。為了簡單我們暫時只考慮這些字段信息。我們對于這些信息,說關心的問題有如下幾個方面。1)學生有那些基本信息2)學生選了那些課,成績是什么3)每個課的學分是多少4)學生屬于那個系,系的基本信息是什么。首先第一范式(1NF):數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。在當前的任何關系數據庫管理系統(DBMS)中,不允許你把數據庫表的一列再分成二列或多列,因此做出的都是符合第一范式的數據庫。我們再考慮第二范式,把所有這些信息放到一個表中(學號,學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話)下面存在如下的依賴關系。1)(學號)→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)2) (課程名稱) → (學分)3)(學號,課程)→ (學科成績)根據依賴關系我們可以把選課關系表 SelectCourse 改為如下三個表:學生:Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話);課程:Course(課程名稱, 學分);選課關系:SelectCourse(學號, 課程名稱, 成績)。事實上,對照第二范式的要求,這就是滿足第二范式的數據庫表,若不滿足第二范式,會產生如下問題數據冗余: 同一門課程由 n 個學生選修,"學分"就重復 n-1 次;同一個學生選修了 m 門課程,姓名和年齡就重復了 m-1 次。更新異常: 1)若調整了某門課程的學分,數據表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。2)假設要開設一門新的課程,暫時還沒有人選修。這樣,由于還沒有"學號" 關鍵字,課程名稱和學分也無法記錄入數據庫。刪除異常 : 假設一批學生已經完成課程的選修,這些選修記錄就應該從數據庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。我們再考慮如何將其改成滿足第三范式的數據庫表,接著看上面的學生表 Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話),關鍵字為單一關鍵字"學號",因為存在如下決定關系:(學號)→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)但是還存在下面的決定關系(學號) → (所在學院)→(學院地點, 學院電話)即存在非關鍵字段"學院地點"、"學院電話"對關鍵字段"學號"的傳遞函數依賴。它也會存在數據冗余、更新異常、插入異常和刪除異常的情況(這里就不具體分析了,參照第二范式中的分析)。根據第三范式把學生關系表分為如下兩個表就可以滿足第三范式了:學生:(學號, 姓名, 年齡, 性別,系別);系別:(系別, 系辦地址、系辦電話)。這一部分是 C/C++程序員在面試的時候會被問到的一些題目的匯總。來源于基本筆試面試書籍,可能有一部分題比較老,但是這也算是基礎
轉載于:https://www.cnblogs.com/liangmiao/p/2ede63dced86dee90ed90007c5f783a1.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: linux wget 进度条多行的解决办
- 下一篇: 开博客