计算机二级Python公共基础部分
計算機二級Python公共基礎部分
1. 基本數據結構與算法
1.1 算法的基本概念
算法是一種設計好的計算序列,用來解決一類問題。
算法復雜的包括:時間復雜度和空間復雜度。時間復雜度指計算工作量,空間復雜度指內存空間的要求。
綜合起來:如果一個算法的執行次數是 T(n),那么只保留最高次項,同時忽略最高項的系數后得到函數 f(n),此時算法的時間復雜度就是 O(f(n))。為了方便描述,下文稱此為 大O推導法。
- 對于一個循環,假設循環體的時間復雜度為 O(n),循環次數為 m,則這個
循環的時間復雜度為 O(n×m)。
此時時間復雜度為 O(n × 1),即 O(n)。
- 對于多個循環,假設循環體的時間復雜度為 O(n),各個循環的循環次數分別是a, b, c…,則這個循環的時間復雜度為 O(n×a×b×c…)。分析的時候應該由里向外分析這些循環。
此時時間復雜度為 O(n × n × 1),即 O(n^2)。
- 對于順序執行的語句或者算法,總的時間復雜度等于其中最大的時間復雜度。
此時時間復雜度為 max(O(n^2), O(n)),即 O(n^2)。
- 對于條件判斷語句,總的時間復雜度等于其中 時間復雜度最大的路徑 的時間復雜度。
此時時間復雜度為 max(O(n^2), O(n)),即 O(n^2)。
空間復雜度(Space Complexity)
S(n)定義為該算法所耗費的存儲空間,它也是問題規模n的函數。漸近空間復雜度也常常簡稱為空間復雜度。
空間復雜度(Space Complexity)是對一個算法在運行過程中臨時占用存儲空間大小的量度。一個算法在計算機存儲器上所占用的存儲空間,包括:
- 存儲算法本身所占用的存儲空間
- 算法的輸入輸出數據所占用的存儲空間
- 算法在運行過程中臨時占用的存儲空間
算法的輸入輸出數據所占用的存儲空間是由要解決的問題決定的,是通過參數表由調用函數傳遞而來的,它不隨本算法的不同而改變。存儲算法本身所占用的存儲空間與算法書寫的長短成正比,要壓縮這方面的存儲空間,就必須編寫出較短的算法。算法在運行過程中臨時占用的存儲空間隨算法的不同而異,有的算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種算法是“就地"進行的,是節省存儲的算法,如這一節介紹過的幾個算法都是如此;有的算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的存儲單元,例如將在第九章介紹的快速排序和歸并排序算法就屬于這種情況。
1.2 數據結構
數據結構的定義
程序=數據結構+算法
在計算機科學中,數據結構(datastructure)是計算機中存儲、組織數據的方式。指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。
反映數據元素之間的關系的數據元素集合的表示。數據的邏輯結構包括集合、線形結構、樹形結構和圖形結構四種。
數據的邏輯結構在計算機存儲空間種的存放形式稱為數據的存儲結構。常用的存儲結構有順序、鏈接、索引等存儲結構。
常見的數據結構:
數組(Array)
堆棧(Stack)
隊列(Queue)
鏈表(Linked List)
樹(Tree)
圖(Graph)
堆(Heap)
散列表(Hash)
線性結構和非線性結構
根據數據結構中各數據元素之間前后件關系的復雜程度,一般將數據結構分為兩大類型:線性結構和非線性結構。
1.3 線性表
線性表的定義
線性表(Linear List)是由n(n≥0)個數據元素(結點)a[0],a[1],a[2]…,a[n-1]組成的有限序列。
- 數據元素的個數n定義為表的長度 = “list”.length() (“list”.length() = 0(表里沒有一個元素)時稱為空表)
- 將非空的線性表(n>=0)記作:(a[0],a[1],a[2],…,a[n-1])
- 數據元素a[i](0≤i≤n-1)只是個抽象符號,其具體含義在不同情況下可以不同
常見的線性表有順序表和鏈表
順序表是線性表的順序存儲結構,指的是用一組地址連續的存儲單元依次存儲線性表的數據元素。
順序表常見操作*(括號中為算法平均時間復雜度,沒有寫明的具體復雜度依賴不同算法和運算規則)*:
插入(O(n))、刪除(O(n))、查找、排序、分解、合并、復制(O(n))、逆轉(O(n))
1.4 棧和隊列
棧
棧實際上也是一個線性表,只不過是一種特殊的線性表。棧是只能在表的一端進行插入和刪除運算的線性表,通常稱插入、刪除這一端為棧頂(TOP),另一端為棧底(BOTTOM)。當表中沒有元素時稱為棧空。 棧頂元素總是后被插入(入棧)的元素,從而也是最先被移除(出棧)的元素;棧底元素總是最先被插入的元素,從而也是最后才能被移除的元素。所以棧是個**后進先出(LIFO)**的數據結構
棧的基本運算有三種:入棧、出棧與讀棧頂,時間復雜度都是O(1)
隊列
隊列是只允許在一端刪除,在另一端插入的順序表,允許刪除的一端叫做隊頭,用對頭指針 front 指向對頭元素的下一個元素,允許插入的一端叫做隊尾,用隊尾指針 rear 指向隊列中的隊尾元素,因此,從排頭指針 front 指向的下一個位置直到隊尾指針 rear 指向的位置之間所有的元素均為隊列中的元素。隊列的修改是 先進先出(FIFO) 。往隊尾插入一個元素稱為入隊運算。從對頭刪除一個元素稱為退隊運算。
隊列主要有兩種基本運算:入隊運算和退隊運算,復雜度都是O(1)
1.5 鏈表
鏈表指線性表的鏈式存儲結構。
- 單鏈表
一組任意的存儲單元存儲線性表的數據元素,因此,為了表示每個數據元素 ai 與其直接后繼數據元素 ai+1 之間的邏輯關系,對數據元素 ai 來說,除了存儲其本身的信息(數據域)之外,還需存儲一個變量指示其直接后繼的信息(指針域)。這兩部分信息組成數據元素 ai 的存儲映象,稱為結點。N 個結點鏈結成一個鏈表。該鏈表就是傳統的單向鏈表。
有時,我們在單鏈表的第一個結點之前附設一個結點,稱之為頭結點,它指向表中第一個結點。頭結點的數據域可 以不存儲任何信息,也可存儲如線性表的長度等類的附加信息,頭結點的指針域存儲指向第一個結點的指針。在單鏈表中,取得第 I 個數據元素必須從頭指針出發尋找,因此,鏈表是非隨機存取的存儲結構。
-
循環鏈表
以上提到的鏈表指針域只包括一個指針,指向下一個數據的地址,如果我們將鏈表最后一個結點指針域的指針指向鏈表的頭結點地址,就構成了一個環狀的存儲結構,我們稱作循環鏈表。 -
雙向鏈表
當然我們可以給每個結點的指針域再添加一個指針,使其指向前一個數據結點的地址,這樣就構成了雙向鏈表,而將頭結點的前一個結點指向尾結點,同時將尾結點的下一個結點指向頭結點就構成了雙向循環鏈表。
如果鏈表的尾結點的指針域指向了該鏈表之前的任意一個結點,我們稱該鏈表為有環鏈表。環形鏈表就是其中一個特例
常見操作:
插入(O(n))、刪除(O(n))、查找、排序、分解、合并、復制(O(n))、逆轉
1.6 樹和二叉樹
-
樹
樹是一種簡單的非線性結構。在樹這種數據結構中,所有數據元素之間的關系具有明顯的層次特性。 在樹結構中,每一個結點只有一個前件,稱為父結點。沒有前件的結點只有一個,稱為樹的根結點,簡稱樹的根。每一個結點可以有多個后件,稱為該結點的子結點。沒有后件的結點稱為葉子結點。 在樹結構中,一個結點所擁有的后件的個數稱為該結點的度,所有結點中最大的度稱為樹的度。樹的最大層次稱為樹的深度。 -
二叉樹
每一個結點最多有兩棵子樹,且分別稱為該結點的左子樹與右子樹。
二叉樹性質
-
二叉樹的儲存結構
與線性鏈表類似,用于存儲二叉樹中各元素的存儲結點也由兩部分組成:數據域和指針域。但在二叉樹中,由于每一個元素可以有兩個后件(即兩個子結點),因此,用于存儲二叉樹的存儲結點的指針域有兩個:一個用于指向該結點的左子結點的存儲地址,稱為左指針域;另一個用于指向該結點的右子結點的存儲地址,稱為右指針域。 -
二叉樹的遍歷
二叉樹的遍歷是指不重復地訪問二叉樹中的所有結點。二叉樹的遍歷可以分為以下三種:
若二叉樹為空,則結束返回。否則:首先訪問根結點,然后遍歷左子樹,最后遍歷右子樹;并且,在遍歷左右子樹時,仍然先訪問根結點,然后遍歷左子樹,最后遍歷右子樹。
若二叉樹為空,則結束返回。否則:首先遍歷左子樹,然后訪問根結點,最后遍歷右子樹;并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結點,最后遍歷右子樹。
若二叉樹為空,則結束返回。否則:首先遍歷左子樹,然后遍歷右子樹,最后訪問根結點,并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后遍歷右子樹,最后訪問根結點。
1.7 查找
- 順序查找
從表中的第一個元素開始,將給定的值與表中逐個元素的關鍵字進行比較,直到兩者相符,查到所要找的元素為止。否則就是表中沒有要找的元素,查找不成功。 - 二分查找
先確定待查找記錄所在的范圍,然后逐步縮小范圍,直到找到或確認找不到該記錄為止。注意二分法應用的前提是有順序儲存結構的有序表
- 交換類排序
- 選擇類排序
- 插入類排序
二 程序設計基礎
2.1 程序設計方法與風格
程序的設計風格強調清晰第一,效率第二
w=input('please input your weight/Kg: ')#輸入用戶體重和身高 h=input('please input your height/m: ') weight=float(w)#input函數默認為輸入字符串,因此需要轉化為浮點數 height=float(h) bmi=round((weight/height**2),2)#計算公式,同時用round函數控制小數位 #bmi_str=str(bmi) #print('your BMI value is :'+bmi_str)#兩種不同的輸出字符串和數字組合的方法 print ("your BMI value is : ",bmi) if bmi<18.5:#循環過程中依然強調冒號和縮進print('you are too light!')#注意python語言不能層層縮進 elif bmi<25:print ('you are very healthy!') elif bmi<28:print('you are over weight.') elif bmi<32:print('you are obesity.') else :print('Severe obesity!!!')需要考慮到的因素:
- 符號化的命名
- 程序的注釋:包括序言性注釋和功能性注釋
- 視覺組織:利用空格、空行、縮進使得代碼層次更為清晰
- 數據說明的次序規范化;
- 說明語句中變量安排有序化;
- 使用注釋來說明復雜數據的結構。
- 在一行內只寫一條語句;
- 程序編寫應優先考慮清晰性
- 避免過多的臨時變量,提高可讀性;
- 盡量使用庫函數;
- 盡量實現模塊化,且保持模塊功能單一;
2.2 結構化程序設計
后考慮局部目標。不要一開始就過多追求眾多的細節,先從最上層總目標開始設
計,逐步使問題具體化。
序要解決的總目標分解為分目標,再進一步分解為具體的小目標,把每個小目標
稱為一個模塊。
基本結構
- 順序結構:一種簡單的程序設計,即按照程序語句行的自然順序,一條語句
一條語句地執行程序,它是最基本、最常用的結構。 - 選擇結構:又稱分支結構,包括簡單選擇和多分支選擇結構,可根據條件,
判斷應該選擇哪一條分支來執行相應的語句序列。 - 重復結構:又稱循環結構,可根據給定的條件,判斷是否需要重復執行某一
相同的或類似的程序段。
2.3 面向對象的程序設計方法,對象,方法,屬性及繼承與多態性
客觀世界中任何一個事物都可以被看成是一個對象,面向對象方法的本質就是主
張從客觀世界固有的事物出發來構造系統,提倡人們在現實生活中常用的思維來
認識、理解和描述客觀事物,強調最終建立的系統能夠映射問題域。也就是說,
系統中的對象及對象之間的關系能夠如實地反映問題域中固有的事物及其關系。
面向對象方法的主要優點:
- 與人類習慣的思維方法一致;
- 穩定性好;
- 可重用性好;
- 易于開發大型軟件產品;
- 可維護性好
面向對象的程序設計主要考慮的是提高軟件的可重用性。
對象
一個對象由對象名、屬性和操作三部分組一個對象由對象名、屬性和操作三部分組成
1) 對象是面向對象方法中最基本的概念,可以用來表示客觀世界中的任何實體,對象是實體的抽象。面向對象的程序設計方法中的對象是系統是構成系統的一個基本單位,由一組表示其靜態特征的屬性和它可執行的一組操作組成。對象是屬性和方法的封裝體。
2) 屬性即對象所包含的信息,它在設計對象時確定,一般只能通過執行對象的操作來改變。
3) 操作描述了對象執行的功能,操作也稱為方法或服務。操作是對象的動態屬性。
對象的特點
1)標識惟一性。指對象是可區分的,并且由對象的內在本質來區分,而不是
通過描述來區分;
2)分類性。指可以將具有相同屬性的操作的對象抽象成類;
3)多態性。指同一個操作可以是不同對象的行為;
4)封裝性。從外面看只能看到對象的外部特性,即只需知道數據的取值范圍
和可以對該數據施加的操作,根本無需知道數據的具體結構以及實現操作的算
法。對象的內部,即處理能力的實行和內部狀態,對外是不可見的。從外面不能
直接使用對象的處理能力,也不能直接修改其內部狀態,對象的內部狀態只能由
其自身改變。通過對象的封裝性可以實現信息隱蔽。
5)模塊獨立性好。對象是面向對象的軟件的基本模塊,它是由數據及可以對
這些數據施加的操作所組成的統一體,而且對象是以數據為中心的,操作圍繞對
其數據所需做的處理來設置,沒有無關的操作。從模塊的獨立性考慮,對象內部
各種元素彼此結合得很緊密,內聚性強。
其他
1)類是指具有共同屬性、共同方法的對象的集合。所以類是對象的抽象,對象是對應類的一個實例。
2)消息是一個實例與另一個實例之間傳遞的信息。消息的組成包括:
接收消息的對象的名稱;
消息標識符,也稱消息名;
零個或多個參數*
P.S. 在面向對象方法中,一個對象請求另一個對象為其服務的方式是通過發送消息。
3)繼承是指能夠直接獲得已有的性質和特征,而不必重復定義他們。繼承分單繼承和多重繼承。單繼承指一個類只允許有一個父類,多重繼承指一個類允許有多個父類。
三 軟件工程基礎
3.1 軟件工程基本概念,軟件生命周期概念,軟件工具與軟件開發環境
軟件
計算機軟件是包括程序、數據及相關文檔的完整集合
1)軟件是一種邏輯實體,而不是物理實體,具有抽象性;
2)軟件的生產與硬件不同,它沒有明顯的制作過程;
3)軟件在運行、使用期間不存在磨損、老化問題;
4)軟件的開發、運行對計算機系統具有依賴性,受計算機系統的限制,這導致了軟件移植的問題;
5)軟件復雜性高,成本昂貴;
軟件工程
軟件工程是應用于計算機軟件的定義、開發和維護的一整套方法、工具、文檔、實踐標準和工序。
軟件工程的主要思想是將工程化原則運用到軟件開發過程,它包括 3 個要素:方法、工具和過程。方法是完成軟件工程 項目的技術手段;工具是支持軟件的開發、管理、文檔生成;過程支持軟件開發的各個環節的控制、管理。
軟件生命周期
*軟件產品從提出、實現、使用維護到停止使用退役的過程。*軟件生命周期分為軟件定義、軟件開發及軟件運行維護三個階段:
1)軟件定義階段:包括制定計劃和需求分析。
制定計劃:確定總目標;可行性研究;探討解決方案;制定開發計劃。
需求分析:對待開發軟件提出的需求進行分析并給出詳細的定義。
2)軟開發階段:
軟件設計:分為概要設計和詳細設計兩個部分。
軟件實現:把軟件設計轉換成計算機可以接受的程序代碼。
軟件測試:在設計測試用例的基礎上檢驗軟件的各個組成部分。
3)軟件運行維護階段:軟件投入運行,并在使用中不斷地維護,進行必要的擴
充和刪改。
軟件開發工具
軟件開發工具的完善和發展將促使軟件開發方法的進步和完善,促進軟件開發的高速度和高質量。軟件開發工具的發展是從單項工具的開發逐步向集成工具發展的,軟件開發工具為軟件工程方法提供了自動的或半自動的軟件支撐環境。同時,軟件開發方法的有效應用也必須得到相應工具的支持,否則方法將難以有效的實施。
軟件開發環境
軟件開發環境(或稱軟件工程環境)是全面支持軟件開發全過程的軟件工具集合。計算機輔助軟件工程(CASE,Computer Aided Software Engineering)將各種軟件工具、開發機器和一個存放開發過程信息的中心數據庫組合起來,形成軟件工程環境它將極大降低軟件開發的技術難度并保證軟件開發的質量。
3.2 結構化分析方法,數據流圖,數據字典,軟件需求規格說明書
結構化方法的核心和基礎是結構化程序設計理論包括1)結構化需求分析方法;2)面向對象的分析方法。
結構化分析方法的實質:著眼于數據流,自頂向下,逐層分解,建立系統的處理流程,以數據流圖、數據字典和判定樹為主要工具,建立系統的邏輯模型。
數據流圖
以圖形的方式描繪數據在系統中流動和處理的過程,它反映了系統必須完成的邏輯功能,是結構化分析方法中用于表示系統邏輯模型的一種工具。
加工(轉換):輸入數據經加工變換產生輸出。(圓形)
數據流:沿箭頭方向傳送數據的通道,一般在旁邊標注數據流名。(箭頭)
存儲文件(數據源):表示處理過程中存放各種數據的文件。(雙下劃線)
源,潭:表示系統和環境的接口,屬系統之外的實體。(方框)
數據字典
對所有與系統相關的數據元素的一個有組織的列表,以及精確的、嚴格的定義,使得用戶和系統分析員對于輸入、輸出、存儲成分和中間計算結果有共同的理解。
- 數據字典的作用是對數據流圖中出現的被命名的圖形元素的確切解釋。
- 數據字典是結構化分析方法的核心。
3.3 結構化設計方法,總體設計與詳細設計
軟件設計基礎
結構設計:定義軟件系統各主要部件之間的關系。
數據設計:將分析時創建的模型轉化為數據結構的定義。
接口設計:描述軟件內部、軟件和協作系統之間以及軟件與人之間如何通信。
過程設計:把系統結構部件轉換成軟件的過程性描述。從工程角度來看,軟件設計分兩步完成,即概要設計和詳細設計。
概要設計:又稱結構設計,將軟件需求轉化為軟件體系結構,確定系統級接口、全局數據結構或數據庫模式。
詳細設計:確定每個模塊的實現算法和局部數據結構,用適當方法表示算法和數據結構的細節
基本原理
軟件設計的基本原理包括:抽象、模塊化、信息隱蔽和模塊獨立性。
1)抽象:一種思維工具,就是把事物本質的共同特性提取出來而不考慮其他細節。
2)模塊化:解決一個復雜問題時自頂向下逐步把軟件系統劃分成一個個較小的、相對獨立但又不相互關聯的模塊的過程。
3)信息隱蔽:每個模塊的實施細節對于其他模塊來說是隱蔽的。
4)模塊獨立性:軟件系統中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統中其他的模塊的接口是簡單的。
模塊的耦合性和內聚性是衡量軟件的模塊獨立性的兩個定性指標。
總體設計
軟件概要設計的基本任務是:1)設計軟件系統結構;2)數據結構及數據庫設計;
3)編寫概要設計文檔;4)概要設計文檔評審。
詳細設計
詳細設計是為軟件結構圖中的每一個模塊確定實現算法和局部數據結構,用某種選定的表達工具表示算法和數據結構的細節。
3.4 軟件測試的方法,白盒測試與黑盒測試,測試用例設計,軟件測試的實施,單元測試、集成測試和系統測試
使用人工或自動手段來運行或測定某個系統的過程,其目的在于檢驗它是否滿足規定的需求或是弄清預期結果與實際結果之間的差別。
軟件測試方法
- 靜態測試:包括代碼檢查、靜態結構分析、代碼質量度量。不實際運行軟件,主要通過人工進行。
- 動態測試:是基于計算機的測試,主要包括白盒測試方法和黑盒測試方法。
白盒測試
白盒測試方法也稱為結構測試或邏輯驅動測試。它是根據軟件產品的內部工作過程,檢查內部成分,以確認每種內部操作符合設計規格要求。
白盒測試的基本原則:保證所測模塊中每一獨立路徑至少執行一次;保證所測模塊所有判斷的每一分支至少執行一次;保證所測模塊每一循環都在邊界條件和一般條件下至少各執行一次;驗證所有內部數據結構的有效性。
黑盒測試
黑盒測試方法也稱為功能測試或數據驅動測試。黑盒測試是對軟件已經實現的功能是否滿足需求進行測試和驗證。黑盒測試主要診斷功能不對或遺漏、接口錯誤、數據結構或外部數據庫訪問錯誤、性能錯誤、初始化和終止條件錯誤。黑盒測試不關心程序內部的邏輯,只是根據程序的功能說明來設計測試用例。
測試用例
測試用例是指對一項特定的軟件產品進行測試任務的描述,體現測試方案、方法、技術和策略。一個好的測試用例能找到迄今為止尚未發現的錯誤。
- 單元測試
- 集成測試
- 確認測試
- 系統測試
四種測試方法詳細解釋
3.5 程序的調試,靜態調試與動態調試
程序調試的任務是診斷和改正程序中的錯誤,主要在開發階段進行,調試程序應該由編制源程序的程序員來完成。程序調試的基本步驟:
(1)錯誤定位;(2)糾正錯誤;(3)回歸測試(防止引入新的錯誤)
靜態調試:程序在運行到某一個狀態的時候,讓它暫停,用工具查看程序此時的運行信息,比如某個變量的數值;查看完成后,讓程序繼續運行,恢復到正常的工作。
動態調試:在程序中,添加日志信息(log),在程序運行的時候,將log指定的信息輸出到調試的電腦上。整個過程不會打斷程序的運行。
四、 數據庫設計基礎
4.1 數據庫的基本概念:數據庫,數據庫管理系統,數據庫系統
數據庫(database)
數據的集合,具有統一的結構形式并存放于統一的存儲介質內,是多種應用數據的集成,并可被各個應用程序所共享。數據庫存放數據是按數據所提供的數據模式存放的,具有集成與共享的特點,亦即是數據庫集中了各種應用的數據,進行統一的構造和存儲,而使它們可被不同應用程序所使用。
數據庫管理系統(DBMS)
一種系統軟件,負責數據庫中的數據組織、數據操縱、數據維護、控制及保護和數據服務等,是數據庫的核心。
數據庫系統(DBS)
由數據庫(數據)、數據庫管理系統(軟件)、數據庫管理員(人員)、硬件平臺(硬件)、軟件平臺(軟件)五個部分構成的運行實體。
4.2 數據模型,實體聯系模型及 E-R 圖,從 E-R 圖導出關系數據模型
數據模型的概念:是數據特征的抽象,它從抽象層次上描述了系統的靜態特征、動態行為和約束條件,為數據庫系統的信息表示與操作提供一個抽象的框架。主要內容包括:
1)數據結構:數據結構是所研究的對象類型的集合,包括與數據類型、內容、性質有關的對象,以及與數據之間聯系有關的對象。它用于描述系統的靜態特性。
2)數據操作:數據操作是對數據庫中各種對象(型)的實例(值)允許執行的操作的集合,包括操作的含義、符號、操作規則及實現操作的語句等。它用于描述系統的動態特性。
3)數據的約束條件:數據的約束條件是一組完整性規則的集合。完整性規則是給定的數據模型中數據及其聯系所具有的制約和依存規則,用以限定符號數據模型的數據庫狀態及狀態的變化,以保證數據的正確、有效和相容。
實體聯系模型及 E-R 圖
1)實體:現實世界中的事物。(矩形)
2)屬性:事物的特性。(橢圓形)
3)聯系:現實世界中事-間的關系。(菱形)
數據庫管理系統常見的數據模型有層次模型、網狀模型和關系模型三種。
4.3 關系代數運算,包括集合運算及選擇、投影、連接運算,數據庫規范化理論
關系代數
1、關系的數據結構
關系是由若干個不同的元組所組成,因此關系可視為元組的集合。n 元關系是一個 n 元有序組的集合。
關系模型的基本運算:1)插入;2)刪除;3)修改;4)查詢(包括投影、選擇、笛卡爾積運算)。
2、關系操縱
關系模型的數據操縱即是建立在關系上的數據操縱,一般有查詢、增加、刪除和
修改四種操作。
集合運算及選擇、投影、連接運算
(1)并(∪):關系 R 和 S 具有相同的關系模式,R 和 S 的并是由屬于 R 或屬于 S 的元組構成的集合。
(2)差(-):關系 R 和 S 具有相同的關系模式,R 和 S 的差是由屬于 R 但不屬于 S 的元組構成的集合。
(3)交(∩):關系 R 和 S 具有相同的關系模式,R 和 S 的交是由屬于 R 且屬于 S 的元組構成的集合。
(4)廣義笛卡爾積(×):設關系 R 和 S 的屬性個數分別為 n、m,則 R 和 S 的廣義笛卡爾積是一個有(n+m)列的元組的集合。每個元組的前 n 列來自 R 的一個元組,后m 列來自 S的一個元組,記為 R×S。
4. 數據庫設計方法和步驟:需求分析、概念設計、邏輯設計和物理設計的相關策略
數據庫設計階段包括:需求分析、概念分析、邏輯設計、物理設計。
數據庫設計的每個階段都有各自的任務:
1)需求分析階段:這是數據庫設計的第一個階段,任務主要是收集和分析數據,這一階段收集到的基礎數據和數據流圖是下一步設計概念結構的基礎。
2)概念設計階段:分析數據間內在語義關聯,在此基礎上建立一個數據的抽象模型,即形成 E-R 圖。(數據庫概念設計的過程包括選擇局部應用、視圖設計和視圖集成)
3)邏輯設計階段:將 E-R 圖轉換成指定 RDBMS 中的關系模式。
4)物理設計階段:對數據庫內部物理結構作調整并選擇合理的存取路徑,以提高數據庫訪問速度及有效利用存儲空間。
總結
以上是生活随笔為你收集整理的计算机二级Python公共基础部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1057):面向对象目标
- 下一篇: TCN-时间卷积网络