當前位置:首頁 » 操作系統 » 2nf演算法

2nf演算法

發布時間: 2025-03-09 08:05:15

A. 要成為一名專業的程序員,從零開始需要怎麼一步步來比較好,要把最底層的先學精通嗎(個人認為)求學長

前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麼實際作用,不如從工作中的需求出發)
建議:
不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年通用。
回顧一下歷史,看看歷史上時間線上技術的發展,你才能明白明天會是什麼樣。
一定要動手,例子不管多麼簡單,建議至少自己手敲一遍看看是否理解了里頭的細枝末節。
一定要學會思考,思考為什麼要這樣,而不是那樣。還要舉一反三地思考。
註:你也許會很奇怪為什麼下面的東西很偏Unix/linux,這是因為我覺得Windows下的編程可能會在未來很沒有前途,原因如下:
現在的用戶界面幾乎被兩個東西主宰了,1)Web,2)移動設備iOS或Android。Windows的圖形界面不吃香了。
越來越多的企業在用成本低性能高的Linux和各種開源技術來構架其系統,Windows的成本太高了。
微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見《Windows編程革命史》
所以,我個人認為以後的趨勢是前端是Web+移動,後端是Linux+開源。開發這邊基本上沒Windows什麼事。
啟蒙入門
1、 學習一門腳本語言,例如python/Ruby
可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小並按各種條件排序並保存結果
資料庫打交道 (python sqlite),寫一個小腳本統計資料庫里條目數量
學會用各種print之類簡單粗暴的方式進行調試
學會用Google (phrase, domain, use reader to follow tech blogs)
為什麼要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。
3、 熟悉Unix/Linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧
一定要少用少用圖形界面。
學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
學會使用一些文本操作命令 sed/awk/grep/tail/less/more …
學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…
了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息
了解正則表達式,使用正則表達式來查找文件。
對於程序員來說Unix/Linux比Windows簡單多了。(參看我四年前CSDN的博文《其實Unix很簡單》)學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。
4、 學習Web基礎(HTML/CSS/JS) + 伺服器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,並動態修改。
學習使用javascript操縱HTML元件。理解DOM和動態網頁(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變數,性能,控制台等)
在一台機器上配置Apache 或 Nginx
學習php,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網路編程課程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
進階加深
1、 c語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的演算法和數據結構。推薦《計算機程序設計藝術》、《演算法導論》和《編程珠璣》。
學習(麻省理工免費課程)計算機科學和編程導論
學習(麻省理工免費課程)C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。
用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通信的程序。
學會使用gcc和gdb來編程和調試程序(參看我的《用gdb調試程序》)
學會使用makefile來編譯程序。(參看我的《跟我一起寫makefile》)
IPC和Socket的東西可以放到高級中來實踐。
學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)
寫一個窗口,了解WinMain/WinProcere,以及Windows的消息機制。
寫一些程序來操作Windows SDK中的資源文件或是各種圖形控制項,以及作圖的編程。
學習如何使用MSDN查看相關的SDK函數,各種WM_消息以及一些常式。
這本書中有很多常式,在實踐中請不要照抄,試著自己寫一個自己的常式。
不用太多於精通這些東西,因為GUI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說:「 我覺得GUI確實不那麼熱門了,但充分理解GUI工作原理是很重要的。包括移動設備開發,如果沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工作,或者在win那邊學,或者在mac/iOS上學」。
2、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《Java編程思想》(有兩卷,我僅鏈了第一卷,足夠了,因為Java的圖形界面了解就可以了)
學習JDK,學會查閱Java API Doc Java Platform SE 6
了解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差別。從C、Java、Python思考一下「跨平台」這種技術。
學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。
建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試著用JSP和Servlet實現一下。
3、Web的安全與架構

學習HTML5,網上有很多很多教程,以前酷殼也介紹過很多,我在這里就不羅列了。
學習Web開發的安全問題(參考新浪微博被攻擊的這個事,以及Ruby的這篇文章)
學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)
學習Web的靜態頁面緩存技術。
學習Web的非同步工作流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。
實踐任務:
使用HTML5的canvas 製作一些Web動畫。
嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。
把前面開發過的那個Web應用改成構造在Nginx + PHP-FPM + 靜態頁面緩存的網站
4、學習關系型資料庫
你可以安裝MSSQLServer或MySQL來學習資料庫。
學習教科書里資料庫設計的那幾個範式,1NF,2NF,3NF,……
學習資料庫的存過,觸發器,視圖,建索引,游標等。
學習SQL語句,明白表連接的各種概念(參看《SQL Join的圖示》)
學習如何優化資料庫查詢(參看《MySQL的優化》)
實踐任務:設計一個論壇的資料庫,至少滿足3NF,使用SQL語句查詢本周,本月的最新文章,評論最多的文章,最活躍用戶。
5、一些開發工具
學會使用SVN或Git來管理程序版本。
學會使用JUnit來對Java進行單元測試。
學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言非常簡單的文章——《編程修養》,這樣的東西你可以上網查一下,一大堆)。
推薦閱讀《代碼大全》《重構》《代碼整潔之道》
高級深入
1、C++ / Java 和面向對象
我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」
學習(麻省理工免費課程)C++面向對象編程
讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)
然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。
實踐任務:
用C++實現一個BigInt,支持128位的整形的加減乘除的操作。
用C++封裝一個數據結構的容量,比如hash table。
用C++封裝並實現一個智能指針(一定要使用模板)。
《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)
實踐任務:
使用工廠模式實現一個內存池。
使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。
使用命令模式實現一個命令行計算器,並支持undo和redo。
使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。
學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼
實踐任務:嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能
做一個貪吃蛇或是俄羅斯方塊的游戲。支持不同的級別和難度。
做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。
學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)
Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。
推薦閱讀《Effective Java》 and 《Java解惑》
學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。
Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。
學習使用Java做Web Service (官方教程在這里)
實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。
C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:
深究C++(我深究C/C++了十來年了)
學習Java的各種設計模式。
2、加強系統了解
重要閱讀下面的幾本書:
《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。
《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。
《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。
實踐任務:
理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。
寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。
寫一個簡易的HTTP伺服器。
《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。
實踐任務:
主要實踐各種IPC進程序通信的方法。
嘗試寫一個管道程序,父子進程通過管道交換數據。
嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。
學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。
實踐任務:使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。
有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)
實踐任務:通過以上的所有知識,嘗試
寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)
了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。
3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)
多層分布式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。
CDN系統 – 就近訪問,內容邊緣化。
P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。
伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。
虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。
學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。
學習Hadoop。Hadoop框架中最核心的設計就是:MapRece和HDFS。MapRece的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapRece就是「任務的分解與結果的匯總」。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。
了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關系型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

B. 資料庫原理的另外版本

作者:孔麗紅 主編,游曉明 鍾伯成 張瑜 參編
定價:49元印次:1-1ISBN:9787302398813出版日期:2015.08.01印刷日期:2015.07.31 本書是作者結合多年教學經驗編寫而成的,以資料庫應用實例貫穿於各章節,突出理論與應用的結合。
本書詳細介紹了資料庫技術的基本原理、方法和應用技術,共分11章,具體內容如下:
第1章資料庫系統概述,介紹了資料庫技術的發展,資料庫管理系統的功能、組成、模式結構,概念數據模型和幾種常用的結構數據模型。
第2章實體聯系模型,通過大量實例介紹了實體聯系模型的基本要素、繪制的步驟和方法。
第3章關系數據模型與關系運算,主要介紹了關系模型的數據結構、完整性,以及關系代數、元組關系演算、域關系演算和查詢優化。
第4章關系資料庫標准語言SQL,介紹了SQL的全貌,包括數據操作語言(DML)、數據控制語言(DCL)和數據定義語言(DDL)。
第5章關系資料庫設計理論,介紹如何設計關系模式問題,包括數據依賴、無損分解和保持函數依賴的分解,1NF、2NF、3NF、BCNF、4NF和5NF等。
第6章資料庫設計,通過一個圖書管理系統設計實例,詳細介紹了資料庫設計各階段的內容、任務、設計步驟及方法等。
第7章資料庫安全保護,主要從安全性控制、完整性控制、並發性控制和資料庫恢復四方面介紹了資料庫的安全保護功能。
第8章關系資料庫管理系統SQLServer2005,在介紹SQLServer2005的集成開發環境基礎上,以大量的實例講解SQLServer2005的知識和技術,包括資料庫及其對象的管理、SQLServer2005的安全管理機制、資料庫的備份與還原、數據的導入和導出、數據的附加和分離、資料庫活動的監視等。
第9章基於VisualBasic的關系資料庫應用系統開發,在介紹VisualBasic(VB)集成開發環境、語法結構的基礎上,以「圖書管理系統」的開發過程為例,由淺入深地介紹了使用VB開發資料庫應用系統的步驟和方法,使初學者能很快利用VB開發一個資料庫應用系統。
第10章資料庫技術的發展,對分布式資料庫、並行資料庫、面向對象資料庫等進行了介紹。
第11章資料庫實驗,本章共設計了資料庫的創建與管理、表的創建與管理、訪問與修改數據、視圖與索引、存儲過程與觸發器、SQLServer2005的安全與保護、利用VB開發圖書管理系統共7個實驗,用於配合課堂教學,培養學生的實踐能力。
全書內容豐富、敘述流暢,概念嚴謹清楚,注重理論聯系實際,涵蓋了目前資料庫的實用理論和應用技術。在每一章節理論介紹的基礎上,都給出大量實例,並進行解釋說明,加強對資料庫基本原理、方法的理解和掌握。
每章後均有各種類型的習題,檢查學生對基本知識的掌握程度。另外,還有課件、習題解答和實驗解答等電子材料,幫助讀者了解和掌握所學知識點。讀者在掌握資料庫系統基本原理及資料庫設計方法後,可進一步了解資料庫應用系統開發設計的方法。本書可作為高等院校計算機、信息技術等專業的資料庫課程教材,也可供從事信息領域工作的科技人員和其他有關人員參閱。
編寫分工為:第5章和第10章由鍾伯成編寫;第1、7章由游曉明編寫,張瑜提出修改意見;其餘部分均由孔麗紅編寫。在編寫過程中,得到了上海工程技術大學電子電氣工程學院領導和計算機系諸位老師的指導。限於水平,書中若有欠妥之處,請廣大讀者和專家批評指正。
本書作者聯系方式如下:
孔麗紅,上海工程技術大學電子電氣工程學院
編者
2015年3月 第1章資料庫系統概述
1.1引言
1.1.1信息
1.1.2數據
1.2資料庫技術的產生、發展
1.2.1人工管理階段
1.2.2文件系統階段
1.2.3資料庫系統階段
1.3資料庫系統的組成和結構
1.3.1資料庫、資料庫管理系統和資料庫系統
1.3.2資料庫系統的體系結構
1.4數據模型
1.4.1概念模型
1.4.2層次模型
1.4.3網狀模型
1.4.4關系模型
1.4.5面向對象模型
1.5小結
1.6習題
第2章實體聯系模型
2.1概述
2.2實體
2.3屬性
2.4聯系
2.4.1二元聯系的三種類型
2.4.2多元聯系
2.4.3實體集內部的聯系
2.5弱實體
2.6實體聯系模型的繪制實例
2.7小結
2.8習題
第3章關系數據模型與關系運算
3.1關系模型概述
3.1.1關系的形式化定義及其有關概念
3.1.2關系的性質
3.1.3關系、關系模式、關系子模式和存儲模式
3.1.4關系資料庫與關系資料庫模式
3.2關系的鍵與關系的完整性
3.2.1超鍵、候選鍵、主鍵和外鍵
3.2.2關系的完整性
3.3從ER模型到關系模型
3.3.1實體的轉換規則
3.3.2聯系的轉換規則
3.3.3ER模型轉變成關系模型實例
3.4關系代數
3.4.1傳統的集合運算
3.4.2專門的關系運算
3.4.3擴充的關系代數操作
3.4.4關系代數表達式實例
3.5關系演算
3.5.1元組關系演算
3.5.2域關系演算
3.6關系代數表達式的優化
3.6.1查詢優化的總目標
3.6.2關系代數表達式的等價變換規則
3.6.3關系代數表達式的優化演算法
3.7小結
3.8習題
第4章關系資料庫標准語言SQL
4.1SQL語言簡介
4.1.1SQL的特點
4.1.2SQL語言的基本組成
4.1.3實例資料庫
4.2數據定義
4.2.1資料庫的創建與刪除
4.2.2基本表的創建、刪除與修改
4.2.3索引的創建、刪除與修改
4.3數據查詢
4.3.1SELECT語句的一般格式和單表查詢
4.3.2聚合函數和分組查詢
4.3.3多表聯接查詢
4.3.4多表嵌套查詢
4.4視圖的創建、刪除與修改
4.5數據更新
4.5.1數據的插入
4.5.2數據的刪除
4.5.3數據的修改
4.6存儲過程和觸發器
4.6.1存儲過程的定義、修改和刪除
4.6.2觸發器的定義、修改和刪除
4.7小結
4.8習題
第5章關系資料庫設計理論
5.1關系模式規范化的必要性
5.1.1關系模式的定義
5.1.2規范化的必要性
5.2函數依賴
5.2.1函數依賴的定義及其推理規則
5.2.2函數依賴集的閉包
5.2.3屬性集的閉包
5.2.4函數依賴與關系的候選鍵、主鍵之間的聯系
5.3關系模式的分解特性
5.3.1無損分解
5.3.2保持函數依賴的分解
5.4關系模式的範式
5.5多值依賴與4NF
5.5.1多值依賴
5.5.24NF
5.6連接依賴與5NF
5.7小結
5.8習題
第6章資料庫設計
6.1資料庫設計概述
6.1.1資料庫設計的方法
6.1.2資料庫設計的步驟
6.2需求分析
6.2.1需求分析的內容和方法
6.2.2需求分析的步驟
6.2.3數據字典
6.3資料庫概念設計
6.3.1概念設計的方法及步驟
6.3.2數據抽象與局部視圖設計
6.3.3視圖集成
6.3.4全局ER模型的優化、評審
6.4邏輯結構設計
6.4.1概念模型向關系模型的轉換
6.4.2關系模型的優化
6.4.3外模式的設計
6.5資料庫物理設計
6.5.1資料庫物理設計的內容
6.5.2資料庫存儲結構的確定
6.5.3關系模式存取方法的選擇
6.5.4評價物理結構
6.6資料庫的實施
6.7資料庫的運行和維護
6.8小結
6.9習題
第7章資料庫安全保護
7.1資料庫的安全性
7.2資料庫的完整性
7.2.1完整性約束條件
7.2.2完整性控制
7.2.3資料庫完整性設計原則
7.3資料庫的並發控制技術
7.3.1事務
7.3.2並發控制所帶來的問題
7.3.3封鎖
7.3.4並行調度的可串列化
7.4資料庫的恢復
7.4.1資料庫恢復的原理及其實現技術
7.4.2檢查點技術
7.4.3故障種類和恢復的方法
7.4.4資料庫鏡像
7.5小結
7.6習題
第8章關系資料庫管理系統SQLServer2005
8.1SQLServer2005概述
8.1.1SQLServer2005發展簡史
8.1.2SQLServer2005的安裝與配置
8.1.3SQLServer2005的體系結構
8.2SQLServer2005的管理工具
8.2.1SQLServer配置管理器
8.2.2SQLServerManagementStudio
8.2.
8.2.
8.2.5文檔和教程
8.2.6SQLServer2005命令提示實用工具
8.3管理資料庫
8.3.1SQLServer2005資料庫概述
8.3.2資料庫的管理
8.3.3表的管理
8.3.4數據表約束和數據完整性控制
8.3.5索引的創建與維護
8.3.6數據的插入、修改、刪除和查詢
8.3.7視圖的管理
8.4SQLServer2005的安全管理機制
8.4.1安全性問題和安全性機制之間的關系
8.4.2管理身份認證方式
8.4.3管理安全賬戶
8.4.4管理資料庫用戶
8.4.5許可權管理
8.4.6管理資料庫角色
8.5存儲過程和觸發器
8.5.1存儲過程的管理
8.5.2觸發器的管理
8.6資料庫備份與恢復
8.6.1資料庫備份
8.6.2資料庫的恢復
8.6.3資料庫備份計劃
8.7數據導入和導出
8.8附加和分離資料庫
8.9SQLServerProfiler
8.10小結
8.11習題
第9章基於VisualBasic的關系資料庫應用系統開發
9.1VisualBasic語言簡介
9.1.1VisualBasic開發環境
9.1.2用VisualBasic開發應用程序
9.2VisualBasic語言基礎和程序設計
9.2.1常數、變數、運算符和表達式
9.2.2基本控制結構
9.2.3常用內部函數
9.2.4輸入與輸出
9.2.5數組
9.3用戶界面的設計
9.3.1基本概念
9.3.2窗體的創建
9.3.3控制項
9.3.4菜單設計
9.4資料庫應用
9.4.1ADO
9.4.2數據綁定控制項
9.4.3報表設計
9.5開發實例——圖書管理系統
9.5.1用戶登錄模塊
9.5.2用戶管理模塊
9.5.3編輯模塊
9.5.4查詢模塊
9.5.5借書還書模塊
9.6小結
9.7習題
第10章資料庫技術的發展
10.1概述
10.2分布式資料庫系統
10.2.1基本概念
10.2.2分布式資料庫系統結構
10.2.3分布式資料庫設計
10.2.4分布式資料庫的特點與發展方向
10.3並行資料庫系統
10.3.1基本概念
10.3.2並行資料庫系統結構
10.3.3並行資料庫的特點及待解決的問題
10.4面向對象的資料庫系統
10.4.1基本概念
10.4.2面向對象資料庫系統關鍵技術
10.4.3面向對象資料庫的實現方法
10.4.4面向對象資料庫的特點
10.4.5面向對象資料庫系統的未來發展
10.5面向應用領域的資料庫技術
10.5.1工程資料庫
10.5.2空間資料庫
10.5.3科學資料庫
10.6小結
10.7習題
第11章資料庫實驗
11.1資料庫的創建與管理(實驗一)
11.2表的創建與管理(實驗二)
11.3訪問與修改數據(實驗三)
11.4視圖與索引(實驗四)
11.5存儲過程與觸發器(實驗五)
11.6SQLServer2005的安全與保護(實驗六)
11.7利用VB開發圖書管理系統(實驗七)
參考文獻

C. 在線.等..關系資料庫規范化理論

8.2 規范化理論
關系資料庫中關系規范化問題在1970年Godd提出關系模型時就同時被提出來,關系規范化可按屬性間不同的依賴程度分為第一範式,第二範式,第三範式,Boyce-Codd範式以及第四範式.人們對規范化的認識是有一個過程的,在1970年時已發現屬性間的函數依賴關系,從而定義了與函數依賴關系有關的第一,第二,第三,及Boyce-Codd範式.在1976~1978年間,Fagin,Delobe以及Zanjolo發現了多值依賴關系,從而定義了與多值依賴有關的第四範式.
範式的定義與屬性間的依賴關系的發現有密切關系,在本節中我們介紹函數依賴與多值依賴這兩個概念,並在此基礎上定義第一範式,第二範式,第三範式,Boyce-Codd範式以及第四範式.
8.2.1 函數依賴
函數依賴(functional dependency)是關系模式內屬性間最常見的一種依賴關系,例如在關系模式S中,S#與Sd間有一種依賴關系.即S#的值一經確定後Sd的值也隨之唯一地確定了,此時即稱S#函數決定Sd或稱Sd函數依賴於S#,它可用下面符號表示:
S# → Sd
同樣,我們還可以有:
S# → Sa
S# → Sn
但是關系模式SC中的S#與G間則沒有函數依賴關系,因為一個確定的學號S#可以允許有多個成績(它們分別對應於不同的課程),因此成績G並不能唯一地確定,但是(S#,C#)與G間則存在著函數依賴關系,即有:
(S#,C#)→G
函數依賴這個概念是屬語義范疇的,我們只能根據語義確定屬性間是否存在這種依賴,此外別無它法可循.
定義8-1 設有關系模式R ( U ),X,Y是U的子集,若對於任一個關系R中的任一元組在X中的屬性值確定後則在Y中的屬性值必確定,則稱Y函數依賴於X或稱X函數決定Y, 並記作X→Y,而其中X稱為決定因素,Y稱為依賴因素.對於函數依賴,我們一般總是使用一種叫非平凡的函數依賴,在本章中如無特殊聲明,凡提到函數依賴時總認為指的是非平凡的函數依賴.下面我們對非平凡函數依賴下一個定義.
定義8-2 一個函數依賴關系X→Y如滿足Y(X,則稱此函數依賴是非平凡的函數依賴.
為了對函數依賴作深人研究,也為了規范化的需要,我們還得引入幾種不同類型的函數依賴.
首先;引入一種完全函數依賴的概念,這個概念為真正的函數依賴打下基礎.例如在S申我們有S#→Sd,因而我們同樣也會有:
(S#,Sn) →Sd
(S#,Sa) →Sd
比較這三種函數依賴後我們會發現,實際上真正起作用的函數依賴是:
S#→Sd
而其他兩種函數依賴都是由它派生而成的,即是說在函數依賴中真正起作用的是S#,而不是Sn或Sa等.這樣,我們在研究函數依賴時要區別這兩種不同類型的函數依賴,前一種叫完全函數依賴,而後一種叫不完全函數依賴.
定義8-3 R( U )中如有X,Y(U,滿足X→Y且對任何X的真子集X',都有X'→Y',則稱Y完全函數依賴於X並記作:
X Y
定義8-4 在R( U )中如有X,Y(U且滿足X→Y,但Y不完全函數依賴於X,則稱Y部分依賴於X,並記作:
X Y
由上所述可知,Sd完全函數依賴於S#,但Sd不完全函數依賴於(S#,Sn),亦即有:
S# Sd
(S#,Sn) Sd
(S#,Sa) Sd
在函數依賴中還要區別直接函數依賴與間接函數依賴這兩個不同的概念,例如S#→Sd中Sd是直接函數依賴於S#,但如果在屬性中尚有系的電話號碼DT(假如每個系有唯一的一個電話號碼),則有:Sd→DT,從而由S#→Sd及Sd→DT可得到:
S# →DT
在這個函數依賴中,DT並不直接函數依賴於S#,而是經過中間屬性Sd傳遞而依賴於S#,亦即是DT直接依賴於Sd,而Sd又直接依賴於S#,從而構成了DT依賴於S#.這種函數依賴關系,是一種間接依賴關系,或叫傳遞依賴關系.我們可以對它定義如下.
定義8-5在R( U )中如有X,Y,Z(U且滿足:
X→Y,(Y(X ) Y / X,Y→Z
則稱Z傳遞函數依賴於X,否則,稱為非傳遞函數依賴.
注意,在這里傳遞函數依賴與非傳遞函數依賴僅作概念上區別, 在形式表示上不作任何區別,即Z傳遞函數依賴於X或Z非傳遞函數依賴於X都用X→Z表示,這樣做的目的也是為了從全局考慮使得表示盡量簡單與方便.
定義了幾種不同的函數依賴關系後,我們在此基礎上繼續定義一些十分重要的基本概念.即有關關鍵字(keY)的一些概念.
定義8-6 在R(U )中如有K(U且滿足:
K U
則稱K為R的關鍵字.
一個關系模式可以有若干個關鍵字,我們在使用中選取其中的一個就夠了,這個被選中的關鍵字叫做這個關系模式的主關鍵字(Prime key),而一般的關鍵字叫候選關鍵字(candidate key).
在關系模式S,C,SC中,S的關鍵字是S#,C的關鍵字是C#,而SC的關鍵字是(S#,C#),因為我們有:
S# (S#,Sn,Sd,Sa)
C# (C#,CN,P#)
(S#,C#) (S#,C#,G)
而S中,(S#,Sn),(S#,Sd)等均不是關鍵字,因為我們有:
(S#,Sn) (S#,Sn,Sd,Sa)
(S#,Sd) (S#,Sn,Sd,Sa)
在一個關系模式中,所有關鍵字中的屬性構成一個集合,而所有其餘的屬性則構成另一個集合,這兩個集合分別叫做這個關系模式的主屬性集與非主屬性集.主屬性集中的屬性叫做主屬性(prime attribute),非主屬性集中的屬性則叫非主屬性(nonprime attribute).例如在關系模式S (S#,Sn,Sd,Sa)中, 主屬性集為:
(S#) .
而非主屬性集為:
(Sn,Sd,Sa)
在SC(S#,C#,G)中,主屬性集為:
{ S#, C# }
而非主屬性為:
{G}
下面我們給出它們的定義:
定義8-7 R ( U )中所有關鍵字中的屬性構成的集合P稱為R(U )的主屬性集.
定義8-8 在R ( U )中所有非關鍵字中的屬性構成的集合N稱為R(U)的非主屬性集.以上建立了一系列與函數依賴有關的概念,有了它們後就可以討論與函數依賴有關的幾
個範式,它們是第一範式,第二範式及第三範式(實際上第一範式與所有依賴均無關,但為敘述方便起見,可視為與函數依賴有關).至於函數依賴的有關理論的探討,將在本章稍後部分再作詳細介紹.
8.2.2 與函數依賴有關的範式
在這節中我們討論四種範式,他們是第一範式,第二範式,第三範式以及Boyce-Codd範式.
先介紹第一範式.第一範式是關系模式所要遵循的基本條件,即關系中的每個屬性值均必須是一個不可分割的數據量.如一個關系模式滿足此條件則稱它屬於第一範式(first normal form,或簡寫成lNF),一個關系模式R如滿足第一範式,則可記為R∈lNF.
第一範式規定了一個關系中的屬性值必須是一個不可分割的數據,它排斥了屬性值為元組,數組或某種復合數據等的可能性,使關系資料庫中的所有關系的屬性值均是最簡單的,這樣可以做到結構簡單,討論方便.一般說來,每個關系模式均要滿足第一範式,因為這是對每個關系的最基本要求.
下面開始討論真正與函數依賴有關的三個範式.為了討論這幾個範式,我們一般對一個關系模式除了要確定其屬性外,還要根據它的語義確定在這個模式上的所有函數依賴.設有關系模式R,它有屬性集U,而在它上的函數依賴集是F,則此時一個關系模式可由三元組R,U,F確定,它可以寫成為:
R ( U,F )
注意,這個表示式僅表示一個三元組而已,它並不表示謂詞或關系.例如前面所提到的學生關系模式S,它可表示為:
S ({S#,Sn,Sd,Sa},{S#→Sn,S#→Sd,S#→Sa})
又如有一個關系模式叫SCG',它由屬性S#,Sn,Sd,Sa, C#, G 組成,其中Ss表示學生所學專業,其他含義同前.在這個關系模式中有一些語義信息,它們是:
(1 ) 每個學生均只屬一個系與一個專業;
(2 ) 每個學生修讀之每門課有且僅有一個成績;
(3 ) 各系無相同專業.
根據上述語義信息以及其他的一些基本常識,我們可以將它們用函數依賴形式表示出來,它們是:
S#→Sn
S#→Sd
S#→Ss
Ss→Sd
(S#,C#)→G
因此,這個關系模式的有關信息可寫成為:
SCG'({S#,Sn,Sd,Ss,C#,G},{ S#→Sn,S#→Sd,S#→Ss, Ss S#→Sd, (S#,C# ) →G}
關系模式有了函數依賴後就可以討論規范化的問題了.關系中的每一級範式均提出了關系模式所要遵循的約束條件,目的是為了使得關系模式具有較少異常性與較小的冗餘度,即是說使關系模式更"好"一些.
下面討論第二範式.
定義8-9 設有R(U)∈lNF且其每個非主屬性完全函數賴於關鍵字,則稱R(U)滿足第二範式(可簡寫為2NF)或寫為R∈2NF.
實際上並不是每個滿足第一範式的關系模式必滿足第二式,如前面例子中的關系模式SCG'即不滿足第二範式.這是因在SCG'中,它的關鍵字是(S#,C#),而它的非主屬性集是:
(Sd,G,Sn,Ss)
雖然我們有:
(S#,C#) G
但是Sn,Sd,Ss均並不完全依賴(S#,C#),因此不滿足第二範式的條件.
一個關系模式若滿足第二範式,則它必須具有較少異常與較小冗餘度.因此,一個關系模式若僅滿足第一範式還不夠,它必須滿足第二範式,其方法是將一個關系模式分解成幾個關系模式,使分解後的關系模式能滿足第二範式.如關系模式SCG'可分解成兩個關系模式,它們是:
SCG'l ({S#,C#,G},{( S#,C#)→G})
SCG'2 ({S#,Sn,Sd,Ss},{S#→Sn,S#→Sd,S#→Ss→Sd})
這兩個模式SCG'均可用圖8-1所示的示意圖表示之.
模式SCG'I與SCG'2均滿足第二範式,它們均有較少異常與較小冗餘度,而SCG'l還可以做到無插人與刪除異常的出現,而SCG'由於不滿足第二範式,因此插入異常,刪除異常均有存在,且數據冗餘度也很大.關於這方面的驗證請讀者自己去做.
(a) SCG'示意圖 (b)SCG'1及SCG'2示意圖
圖8-1 三個關系模式函數依賴示意圖
但是,第二範式還不能完全避免異常現象的出現,如SCG'2雖滿足第二範式,但仍會出現插入異常與刪除異常.如在SCG'2中,它有如表8-4所示的模式.
表8-4 SCG'2的關系模式
S#
Sn
Sd
Ss
SCG'2:
在這個模式中,如果我們要登記一個尚未招生的系的專業設置情況,要插入這個情況在模式中是較為困難的.這樣,如果要刪除一些學生,有可能會將有關系的專業設置情況一起刪除.究其原因,不外是因為Sd既函數依賴於S#又函數依賴於Ss,同時Ss又函數依賴於S#,並且由此引起了傳遞函數依賴的出現.因此,看來要消除異常現象,必須使關系模式中無傳遞函數依賴現象出現,這樣就產生了第三範式.
第三範式要求關系模式首先得滿足第二範式,同時每個非主屬性都非傳遞依賴於關鍵字.由此可以看出,如滿足第三範式則每個非主屬性既不部分依賴也不傳遞依賴於關鍵字.
定義8-10 若關系模式R(U)的每個非主屬性都不部分依賴也不傳遞依賴於關鍵字,則稱R滿足第三範式(可簡寫為3NF),並記作R∈3NF.
第三範式將關系模式中的屬性分成為兩類,一類是非主屬性集,另一類是主屬性集,而非主屬性集的每個屬性均完全,不傳遞依賴於主屬性集中的關鍵字,從而做到在關系模式中理順了復雜的依賴關系,使依賴單一化與標准化,進而力求達到避免異常性的出現,其示意圖可見圖8-2,在圖中可將關系模式比擬成一個原子,其中主屬性集是這個原子的原子核,而非主屬性集中的屬性則是這個原子中的電子,它們緊緊依賴於主屬性集構成一個緊密整體.
一個關系模式如果不滿足第三範式,可以通過模式分解使分解成若干個模式,使分解後的模式能滿足第三範式.例如關系模式SCG'中,SCG'2滿足第二範式,但不滿足第三範式,此時可將其分解成下面兩個模式:
SCG'21(S#,Sn,Ss)
SCG'22 (Ss,Sd)
圖8-2 第三範式的"原子"模型
其依賴示意圖見圖8-3.
(a)SCC'l (b)SCG'21 (c)SCG'22

圖8-3模解分解圖
在SCG'中經過幾次分解後,得到三個關系模式:
SCG'l,SCG'21,SCG'22
這三個模式均滿足第三範式且沒有異常現象出現,同時冗餘度小.
1972年Boyce,Codd等從另一個角度研究了範式,發現了函數依賴中的決定因素與關鍵字間的聯系與範式有關,從而創立了另一種第三範式,稱為Boyce-Codd範式.
Boyce-Codd範式的大概意思是:如果關系模式中,每個決定因素都是關鍵字,則滿足Boyce-Codd範式.我們知道,一般而言,每個函數依賴中的決定因素不一定都是關鍵字,因此,只有當R中決定因素都是關鍵字時才能認為滿足Boyce-Codd範式.
定義8-1l 如R(U )中X,Y(U,假定滿足R∈lNF,且若X→Y(Y(X)時X必含關鍵字,則稱R滿足Boyce-Codd範式(可簡記BCNF)並記以R∈BCNF.
下面一個問題我們需要研究BCNF與3NF間究竟有什麼關系 經過仔細研究後,我們認為BCNF比3NF更為嚴格.下面的定理給出了這個回答.
定理8-1關系模式R(U)若滿足BCNF,則必定滿足3NF.
這個定理的證明請讀者設法自行證得(注:可以用BCNF及3NF的定義而求得).
這個定理告訴我們:一關系模式滿足BCNF者必滿足3NF.但是,一關系模式滿足3NF是否滿足BCNF呢 即是說,定理8-1的充分條件是否成立呢 回答是否定的,即必存在一R(U)滿足3NF,但不滿足BCNF,這只要用一例即可說明.
例8-1設有關系模式R(S, C,T),其中S, C含義同前, T表示教師,R有下列語義信息: (1)每個教師僅上一門課;
(2)學生與課程確定後,教師即唯一確定.
這樣,R就有如下函數依賴關系:
(S, C ) →T
T→C
這個關系模式滿足3NF,因為它的主屬性集為(S,C )非主屬性集為 (T ),而T完全依賴於(S,C )且不存在傳遞依賴.但這個關系模式不滿足BCNF,因為T是決定因素,但T不是關鍵字.
這個模式的示意圖見圖8-4.
圖8一4 例8一1示意圖
從這個例子中也可以看出,實際上第三範式也避免不了異常性,如某課程本學期不開設,因此就無學生選讀,此時有關教師固定開設某課程的信息就無法表示.因此,要避免此種異常性,還需要進一步將關系模式分解成BCNF.如在此例中可將R進一步分解成:
R1 (S, T )
R2 (T, C )
其示意圖如圖8-5所示.而R1, R 2則為BCNF,這兩個模式均不會產生異常現象.
R1 R 2
圖8-5 R分解成兩個BCNF
從上面所述可以看出,BCNF比3NF更為嚴格,它將關系模式中的屬性分成兩類,一類是決定因素集,另一類是非決定因素集.非決定因素集中的屬性均完全,不傳遞地依賴於決定因素集中的每個決定因素.關於這種比喻的一個示意圖見圖8-6.
到此為止,由函數依賴所引起的異常現象,只要分解成BCNF即可獲得解決.在BCNF中每個關系模式內部的函數依賴均比較單一和有規則,它們緊密依賴而構成一個整體,從而可以避免異現象出現以及冗餘量過多的現象.
圖8-6 BCNF的原子模型
8.2.3 多值依賴與第四範式
我們研究了函數依賴及與它有關的幾個範式,但是否關系模式內屬性間的依賴關系除函數依賴外就沒有其他依賴關系呢 事實並不如此,函數依賴關系是一種較為明顯的依賴關系,但是隨著人們對關系模式了解越來越深刻後,發現尚有另外的一些依賴系存在,多值依賴就是其中的一種.我們先舉一個例子,以說明多值依賴的存在.
例8-2設有一個課程關系C,它可用表8-5表示.此表表示高等數學這門課的任課教師可以有3個,它的參考書可以有2本;普通物理這門課的任課教師也可以有3個,它的參考書可以有3本.如用關系的形式表示,見表8-6.
表8-5 關系C的示意圖
課程名C
教師名T
選用參考書L
高等數學
李華民
王天華
林 靜
高等數學
高等數學教程
普通物理
吳鐵鋼
謝曉芳
徐秋芳
物理學
普通物理
普通物理基礎
表8-6 C的關系
C
T
L
高等數學
李華民
高等數學
高等數學
李華民
高等數學教程
高等數學
王天華
高等數學
高等數學
王天華
高等數學教程
高等數學
林 靜
高等數學
高等數學
林 靜
高等數學教程
普通物理
吳鐵鋼
物理學
普通物理
吳鐵鋼
普通物理
普通物理
吳鐵鋼
普通物理基礎
普通物理
謝曉芳
物理學
普通物理
謝曉芳
普通物理
普通物理
謝曉芳
普通物理基礎
普通物理
徐秋芳
物理學
普通物理
徐秋芳
普通物理
普通物理
徐秋芳
普通物理基礎
從這個關系中可以看出兩點.
(1 ) 這個關系的數據冗餘很大.
(2 ) 這個關系的屬性間有一種有別於函數依賴的依賴關系存在.
我們仔細分析這種特殊依賴關系後發現它有兩個特點:
(1)設如R(U)中X與Y有這種依賴關系,則當X的值一經確定後可以有一組Y值與之對應.如確定C為高等數學,則有一組T的值:李華民,王天華,林靜與之對應.同樣C與L也有類似的依賴.
(2 ) 當X的值一經確定後,其所對應的一組Y值與U一X一Y無關.如在C中,對應高等數學課的一組教師與此課程的參考書毫無關系,這就表示C與T有這種依賴,則T的值的確定與U一C一T= L無關.
上述這種依賴顯然不是函數依賴,我們稱之為多值依賴(multi-valued dependency),如Y多值依賴於X,則可記為X→→Y.
從上面所描述的多值依賴X→→Y的特點看,其第一個特點表示X與Y的對應關系是很隨便的,X的一個值所對應的Y值的個數可不作任何強制性規定,即Y的值可以是從0到任意多個,其主要起強制性約束的是第二個條件,即X所對應的Y取值與U一X一Y無關,說得確切些,如有R(U)且如存在X→→Y,則對R(U)的任何一個關系R,如有元組s,t∈R,有s[X]=t[X](表示s與t在X的投影相等),如將它們在U一X一Y的投影(記為s[U一X一Y], t [U一X一Y],交換後所得元組稱為u, v則必有u, v∈R
關於這個情況可以用表8-7表示.
表8-7多值依賴示意圖
X
Y
U-X-Y
s s [X]
t t [X]
s [Y]
t [Y]
s[U-X-Y]
t[U-X-Y]
s [X]
t [X]
s [Y]
t [Y]
t[U-X-Y]
s[U-X-Y]
…………
…………
…………
…………
…………
…………

對多值依賴有了充分了解後,我們可對它定義如下:
定義8-12 設R(U)中有X,Y(U,若對R(U)的任何一個關系,對X的一個確定值,存在Y的一組值與之對應,且Y的這組值又與Z=U一X一Y中的屬性值不相關,此時稱Y多值依賴於X,並記為X→→Y.
在多值依賴中若X→→Y且Z=U一X一Y≠O,則稱X→→Y為非平凡多值依賴,否則稱為平凡多值依賴.
多值依賴可有下面的一些性質:
(1) 在R(U)中如有X→→Y,則必有X→→U一X一Y.
(2) 在R(U)中如有X→Y,則必有X→→Y.
讀者要注意,我們在R(U)中討論多值依賴時並不意味著R(U)中已不需要討論函數依賴
了,恰恰相反,我們一般不僅要在R(U)找出所有多值依賴關系來,而且還要找出所有的函數依賴關系來.因此,一個完整的R(U)應該包含一個函數依賴集F'以及一個多值依賴集F',它可以用R(U, F,F')表示.
前面已經講過,具有多值依賴的關系,它們的數據冗餘量特別大,如何設法減少數據冗餘呢 從例8-2中的關系C中可以看出,如果將C(C, T, L)分解成兩個關系C1,C2後,它們的冗餘度會明顯下降.
C1 (C,T )
C2 (C,L )
C1,C2這兩個關系可用表8-8表示.
表8-8關系C分解成關系C1和C2
C
T
高等數學
高等數學
高等數學
普通物理
普通物理
普通物理
李華民
王天華
林 靜
吳鐵鋼
謝曉芳
徐秋芳
C
L
高等數學
高等數學
普通物理
普通物理
普通物理
普通物理
高等數學
高等效學教程
物理學
普通物理
普通物理基礎
(a) 關系C1 (b) 關系C2
從表8-8可以看到,數據冗餘的減少是極其明顯的.
從多值依賴的觀點看,在C1,C2中各對應一個多值依賴C→→T與C→→L,它們都是平凡多值依賴.因此,在多值依賴時,減少數據冗餘的方法是使關系分解成為僅有平凡多值依賴.
這樣,我們就可以規定一個比BCNF更高的範式,它叫第四範式,可簡記為4NF.這個範式的特點是,在關系模式中它必須滿足:
(1) 只允許出現平凡多值依賴(不允許出現非平凡多值依賴);
(2) 函數依賴要滿足BCNF.
由於函數依賴是多值依賴的特例,因此統一可以用多值依賴概念定義第四範式.
定義8-13 R(U)中如果X→→Y是非平凡多值依賴,則X:必含有關鍵字,此時稱R滿足第四範式,並記作R∈4NF.
由這個第四範式定義可以看出,前面所定義的關系C,它雖是BCNF,但不是4NF,因為在C(C, T )中有:
C→→T
C→→L
而它的關鍵字是(C,T,L).
雖然C∈BCNF,但C不是關鍵字,所以C(4NF.對它作分解後所產生的C1及C2顯然因為C1(C,T)有C→→T,故不存在非平凡多值依賴,因此有C1∈4NF,同理有C2∈4NF.
8.2.4 小 結
我們在規范化討論中定義了五個範式,對這些範式的認識是逐步深入的.總的說來,我們可以總結成下面幾點:
(1) 規范化的目的:解決插入,修改異常以及數據冗餘度高.
(2) 規范化的方法:從模式中各屬性間的依賴關系(函數依依賴及多值依賴)入手,盡量做到每個模式表示客觀世界中的一個"事物".
(3) 規范化的實現手段:用模式分解的方法.
實際上從第一範式到第四範式的過程是一個不斷消除一些依賴關系中的弊病的過程.圖8-7給出了這個過程.
讀者應注意的是:規范化是一種理論,它研究如何通過規范以解決異常與冗餘現象,在實際資料庫設計中構作關系模式時需要考慮到這個因素.但是,客觀世界是復雜的,在構作模式時尚需考慮到其他的多種因素,如模式分解過多,勢必在數據查詢時要用到較多的聯結運算,這樣就會影響查詢速度.因此,在實際構作模式中,需要綜合多種正反因素,統一權衡利弊得失,最後構做出一個較為適合實際的模式來.

圖8-7 規范化的過程
8.3 規范化所引起的一些問題
由規范化而引起了對一些問題的進一步研究,它們是:
1.函數依賴理論的研究
屬性間的函數依賴與多值依賴是規范化的基本依據,因此有必要對它們作進一步研究,這些研究包括:
(1)可由關系模式上的一些函數依賴通過一些公理系統(叫Armstrong公理)而獲得關系模式上的所有函數依賴.由此可知:一個關系模式上的所有函數依賴可由兩部分組成:基礎部分是直接由語義獲取,其他部分可由公理系統推演而得.
(2)引入了函數依賴集的等價概念與最小函數依賴集,即如果兩函數依賴集能推演出相同的集來,則稱它們是等價的,而等價的函數依賴集之最小者稱為最小函數依賴集.
這些研究為規范化提供了更多的基礎信息.
2.模式分解的研究
規范化的實施主要依靠不斷地進行模式分解.在模式分解中需要研究下列問題:
(1)分解後關系中的信息是否會丟失 這叫無損聯接性(lossless join).
(2)分解後關系中的函數依賴是否會丟失 這叫依賴保持性.
(3)在滿足無損聯接性與依賴保持性下可分解到第幾範式.
經過研究我們可以得到下面幾個事實:
若要求滿足無損聯接性,則模式分解一定可以達到BCNF.
若要求滿足依賴保持性,則模式分解一定可以達到3NF,但不一定能達到BCNF.
若既要求滿足無損聯接性又要求滿足依賴保持性,則模式分解一定可以達到
3NF,但 不一定能達到BCNF.
上述三點均可通過三個演算法獲得實現.
由於規范化所引起的這兩個問題的研究的詳細探討均比較復雜,故本書中不擬詳述,僅將結果陳述於上,供讀者參考.
習 題 8
1.請給出下列術語的含義:
函數依賴;(2)關鍵字;(3)主屬性集;(4)多值依賴;(5)2NF;(6)3NF;
(7)BCNF;(8)4NF.
2.在關系SC(S#, C#, G)中S#((C#正確嗎 請說明其理由.
3.是不是規范化最佳的模式結構是最好的結構 為什麼
4.試證明若R(BCNF,則必有R(3NF.
5.試問下列關系模式最高屬第幾範式,並解釋其原因.
R (A, B, C, D),F: {B(D, AB(C};
R (A, B, C),F: {A(B, B(A, A(C};
R (A, B, C, D),F: {A(C, D(B};
R (A, B, C, D),F: {A(C, CD(B}.
s
t
f
p
f
p
p
f
f
f
f
p
p
f
G
S#
C#
Sd
Ss
Sn
S#
C#
G
S#
Sd
Ss
Sn
非主屬性集N


主屬性集p
K1
K2
K3
K4



S#
c#
G
S#
Sn
Ss
Ss
Sd
S
C
T
C
T
T
S
非決定因素
決定
因素
R:
消除決定因素非關鍵字的非平凡多值依賴
1NF
消除非主屬性對關鍵字的部分依賴
2NF
消除非主屬性對關鍵字的傳遞依賴
3NF
消除主屬性對關鍵字的部分與傳遞依賴
BCNF
消除非平凡且非函數依賴的多值依賴
4NF

D. 資料庫與數據倉庫的本質區別是什麼

1、存放值區別:

資料庫只存放在當前值,數據倉庫存放歷史值;

2、數據變化區別:

資料庫內數據是動態變化的,只要有業務發生,數據就會被更新,而數據倉庫則是靜態的歷史數據,只能定期添加、刷新;

3、數據結構區別:

資料庫中的數據結構比較復雜,有各種結構以適合業務處理系統的需要,而數據倉庫中的數據結構則相對簡單;

4、訪問頻率不同:

資料庫中數據訪問頻率較高,但訪問量較少,而數據倉庫的訪問頻率低但訪問量卻很高;

5、目標人群區別:

資料庫中數據的目標是面向業務處理人員的,為業務處理人員提供信息處理的支持,而數據倉庫則是面向高層管理人員的,為其提供決策支持;

E. 在系統實施中,資料庫設計的原則

1. 原始單據與實體之間的關系
可以是一對一、一對多、多對多的關系。在一般情況下,它們是一對一的關系:即一張原始單據對應且只對應一個實體。
在特殊情況下,它們可能是一對多或多對一的關系,即一張原始單證對應多個實體,或多張原始單證對應一個實體。
這里的實體可以理解為基本表。

〖例1〗:一份員工履歷資料,在人力資源信息系統中,就對應三個基本表:員工基本情況表、社會關系表、工作簡歷表。 這就是「一張原始單證對應多個實體」的典型例子。

2. 主鍵與外鍵
一般而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處於葉子部位的實體, 可以定義主鍵,也可以不定義主鍵 (因為它無子孫), 但必須要有外鍵(因為它有父親)。

主鍵與外鍵的設計,在全局資料庫的設計中,佔有重要地位。主鍵是實體的高度抽象,主鍵與外鍵的配對,表示實體之間的連接。

3. 基本表的性質
基本表與中間表、臨時表不同,因為它具有如下四個特性:
(1) 原子性。基本表中的欄位是不可再分解的。
(2) 原始性。基本表中的記錄是原始數據(基礎數據)的記錄。
(3) 演繹性。由基本表與代碼表中的數據,可以派生出所有的輸出數據。
(4) 穩定性。基本表的結構是相對穩定的,表中的記錄是要長期保存的。
理解基本表的性質後,在設計資料庫時,就能將基本表與中間表、臨時表區分開來。

4. 範式標准
基本表及其欄位之間的關系, 應盡量滿足第三範式。但是,滿足第三範式的資料庫設計,往往不是最好的設計。
為了提高資料庫的運行效率,常常需要降低範式標准:適當增加冗餘,達到以空間換時間的目的。

〖例2〗:有一張存放商品的基本表,如表1所示。「金額」這個欄位的存在,表明該表的設計不滿足第三範式, 因為「金額」可以由「單價」乘以「數量」得到,說明「金額」是冗餘欄位。但是,增加「金額」這個冗餘欄位, 可以提高查詢統計的速度,這就是以空間換時間的作法。 在Rose 2002中,規定列有兩種類型:數據列和計算列。「金額」這樣的列被稱為「計算列」,而「單價」和 「數量」這樣的列被稱為「數據列」。
5. 通俗地理解三個範式
通俗地理解三個範式,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個範式,就必須通俗地理解
三個範式(通俗地理解是夠用的理解,並不是最科學最准確的理解):
第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
第三範式:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘。

沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高運行效率,就必須降
低範式標准,適當保留冗餘數據。具體做法是:在概念數據模型設計時遵守第三範式,降低範式標準的工作放到物理
數據模型設計時考慮。降低範式就是增加欄位,允許冗餘。

6. 要善於識別與正確處理多對多的關系
若兩個實體之間存在多對多的關系,則應消除這種關系。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一
個多對多的關系,現在變為兩個一對多的關系。要將原來兩個實體的屬性合理地分配到三個實體中去。這里的第三個
實體,實質上是一個較復雜的關系,它對應一張基本表。一般來講,資料庫設計工具不能識別多對多的關系,但能處
理多對多的關系。

〖例3〗:在「圖書館信息系統」中,「圖書」是一個實體,「讀者」也是一個實體。這兩個實體之間的關系,是一 個典型的多對多關系:一本圖書在不同時間可以被多個讀者借閱,一個讀者又可以借多本圖書。為此,要在二者之 間增加第三個實體,該實體取名為「借還書」,它的屬性為:借還時間、借還標志(0表示借書,1表示還書),另外, 它還應該有兩個外鍵(「圖書」的主鍵,「讀者」的主鍵),使它能與「圖書」和「讀者」連接。

7. 主鍵PK的取值方法
PK是供程序員使用的表間連接工具,可以是一無物理意義的數字串, 由程序自動加1來實現。也可以是有物理意義
的欄位名或欄位名的組合。不過前者比後者好。當PK是欄位名的組合時,建議欄位的個數不要太多,多了不但索引 佔用空間大,而且速度也慢。

8. 正確認識數據冗餘
主鍵與外鍵在多表中的重復出現, 不屬於數據冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵欄位的重復出現, 才是數據冗餘!而且是一種低級冗餘,即重復性的冗餘。高級冗餘不是欄位的重復出現,而是欄位的派生出現。

〖例4〗:商品中的「單價、數量、金額」三個欄位,「金額」就是由「單價」乘以「數量」派生出來的,它就是冗餘,而且是一種高級冗餘。冗餘的目的是為了提高處理速度。只有低級冗餘才會增加數據的不一致性,因為同一數據,可 能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗餘(派生性冗餘),反對低級冗餘(重復性冗餘)。

9. E--R圖沒有標准答案
信息系統的E--R圖沒有標准答案,因為它的設計與畫法不是惟一的,只要它覆蓋了系統需求的業務范圍和功能內容,就是可行的。反之要修改E--R圖。盡管它沒有惟一的標准答案,並不意味著可以隨意設計。好的E—R圖的標準是: 結構清晰、關聯簡潔、實體個數適中、屬性分配合理、沒有低級冗餘。

10 . 視圖技術在資料庫設計中很有用
與基本表、代碼表、中間表不同,視圖是一種虛表,它依賴數據源的實表而存在。視圖是供程序員使用資料庫的 一個窗口,是基表數據綜合的一種形式, 是數據處理的一種方法,是用戶數據保密的一種手段。為了進行復雜處理、 提高運算速度和節省存儲空間, 視圖的定義深度一般不得超過三層。 若三層視圖仍不夠用, 則應在視圖上定義臨時表, 在臨時表上再定義視圖。這樣反復交迭定義, 視圖的深度就不受限制了。

對於某些與國家政治、經濟、技術、軍事和安全利益有關的信息系統,視圖的作用更加重要。這些系統的基本表完 成物理設計之後,立即在基本表上建立第一層視圖,這層視圖的個數和結構,與基本表的個數和結構是完全相同。 並且規定,所有的程序員,一律只准在視圖上操作。只有資料庫管理員,帶著多個人員共同掌握的「安全鑰匙」, 才能直接在基本表上操作。

11. 中間表、報表和臨時表
中間表是存放統計數據的表,它是為數據倉庫、輸出報表或查詢結果而設計的,有時它沒有主鍵與外鍵(數據倉 庫除外)。臨時表是程序員個人設計的,存放臨時記錄,為個人所用。基表和中間表由DBA維護,臨時表由程序員 自己用程序自動維護。

12. 完整性約束表現在三個方面
域的完整性:用Check來實現約束,在資料庫設計工具中,對欄位的取值范圍進行定義時,有一個Check按鈕,通 過它定義欄位的值城。
參照完整性:用PK、FK、表級觸發器來實現。
用戶定義完整性:它是一些業務規則,用存儲過程和觸發器來實現。

13. 防止資料庫設計打補丁的方法是「三少原則」
(1) 一個資料庫中表的個數越少越好。只有表的個數少了,才能說明系統的E--R圖少而精,去掉了重復的多餘的 實體,形成了對客觀世界的高度抽象,進行了系統的數據集成,防止了打補丁式的設計;

(2) 一個表中組合主鍵的欄位個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外鍵,所以組 合主鍵的欄位個數少了,不僅節省了運行時間,而且節省了索引存儲空間;

(3) 一個表中的欄位個數越少越好。只有欄位的個數少了,才能說明在系統中不存在數據重復,且很少有數據冗 余,更重要的是督促讀者學會「列變行」,這樣就防止了將子表中的欄位拉入到主表中去,在主表中留下許 多空餘的欄位。所謂「列變行」,就是將主表中的一部分內容拉出去,另外單獨建一個子表。這個方法很簡 單,有的人就是不習慣、不採納、不執行。 資料庫設計的實用原則是:在數據冗餘和處理速度之間找到合適的平衡點。「三少」是一個整體概念,綜合觀點, 不能孤立某一個原則。該原則是相對的,不是絕對的。「三多」原則肯定是錯誤的。試想:若覆蓋系統同樣的功 能,一百個實體(共一千個屬性) 的E--R圖,肯定比二百個實體(共二千個屬性) 的E--R圖,要好得多。 提倡「三少」原則,是叫讀者學會利用資料庫設計技術進行系統的數據集成。數據集成的步驟是將文件系統集成 為應用資料庫,將應用資料庫集成為主題資料庫,將主題資料庫集成為全局綜合資料庫。集成的程度越高,數據 共享性就越強,信息孤島現象就越少,整個企業信息系統的全局E—R圖中實體的個數、主鍵的個數、屬性的個數就會越少。

提倡「三少」原則的目的,是防止讀者利用打補丁技術,不斷地對資料庫進行增刪改,使企業資料庫變成了隨意設計資料庫表的「垃圾堆」,或資料庫表的「大雜院」,最後造成資料庫中的基本表、代碼表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的信息系統無法維護而癱瘓。 「三多」原則任何人都可以做到,該原則是「打補丁方法」設計資料庫的歪理學說。「三少」原則是少而精的 原則,它要求有較高的資料庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用「打補丁方法」
設計資料庫的理論依據。

14. 提高資料庫運行效率的辦法
在給定的系統硬體和系統軟體條件下,提高資料庫系統的運行效率的辦法是:
(1) 在資料庫物理設計時,降低範式,增加冗餘, 少用觸發器, 多用存儲過程。
(2) 當計算非常復雜、而且記錄條數非常巨大時(例如一千萬條),復雜計算要先在資料庫外面,以文件系統方 式用C++語言計算處理完成之後,最後才入庫追加到表中去。這是電信計費系統設計的經驗。
(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵 PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。
(4) 對資料庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩沖區個數。
(5) 在使用面向數據的SQL語言進行程序設計時,盡量採取優化演算法。
總之,要提高資料庫的運行效率,必須從資料庫系統級優化、資料庫設計級優化、程序實現級優化,這三個層次上同時下功夫。

上述十四個技巧,是許多人在大量的資料庫分析與設計實踐中,逐步總結出來的。對於這些經驗的運用,讀者不能生幫硬套,死記硬背,而要消化理解,實事求是,靈活掌握。並逐步做到:在應用中發展,在發展中應用。

F. 請問,如何將如圖所示的這張資料庫表分割成符合第三範式(3NF)的幾張表

1,範式
7大範式:1NF,2NF,3NF,BCNF,4NF,5NF,6NF

什麼是標准化?非規范化?

規范化資料庫的規范化,非規范化資料庫的非規范化。

關鍵的一步是在設計,操作和維護的資料庫,以確保數據正確分布到資料庫表中。使用正確的數據結構不僅是簡單的資料庫訪問操作,和其他應用程序內容(查詢,窗體,報表,代碼等)可以大大簡化。正確的表設計的正式名稱是「資料庫規范化」。目的:為了減少資料庫中的數據冗餘,提高了數據的一致性。

範式的概念:

1)1NF的目標是為每一個列的表是不可分割的;
2)2NF:我們的目標是在每一行表被識別。前提是要滿足1NF。關鍵字單場,你必須滿足2NF。當關鍵字組合欄位(即,多個欄位),可以不存在確定的非鍵的一部分的欄位中的關鍵字的組合中的一個領域。非部分地依賴於主磁場的主要領域,即,非鍵欄位必須依賴於關鍵字的組合,而不是組合的一部分的關鍵字。
3)3NF:目標是不依賴於非鍵列的表內表的所有列。前提,以滿足2NF,不存在非鍵欄位決定另一個非鍵欄位。即:有沒有非關鍵屬性傳遞依賴(X-> Y->非鍵屬性Z)
4)BCNF:前提是要滿足,2NF不存在非鍵欄位決定另一個非關鍵字關鍵領域。也沒有決定等重點領域的重點領域。 :3NF的基礎上加上約束條件:這里有一個關鍵領域確定的另一個重要領域。
1第一範式(1NF)
任何關系資料庫中,第一範式(1NF)是關系模型的基本要求,不符合第一範式(1NF)的資料庫不是一個關系資料庫。所謂第一範式(1NF)是基本的數據條目的資料庫表的每一列是不可分割的,不能有一個以上的值在同一列中,這是一個實體的屬性不能有一個以上的值或不能重復的屬性。復制的屬性,您可能需要定義一個新的實體,新的實體由重復的屬性的新實體與原實體之間的一個一對多的關系。第一範式(1NF)表,每行只包含一個實例的信息。例如,圖3-2中的員工信息表,不能在展會之一的員工信息,也可以兩個或多個列中顯示,員工信息表中的每一行代表一個員工信息,員工信息中只出現一次表。總之,第一範式是不重復的列。
第二範式(2NF)
第二範式(2NF)建立的第一範式(1NF),即滿足第二範式(2NF)的基礎上,必須滿足第一範式(1NF )。第二範式(2NF)要求資料庫表中的每個實例或行必須是唯一能夠分辨。一般需要被添加到該表來實現的列之間的區別,唯一地標識每個實例來存儲。圖3-2(EMP_ID)的雇員數列中的員工信息表,因為每個員工的員工號是唯一的,因此每個員工都可以只區分。唯一的屬性列被稱為主鍵或主鍵,主碼。第二範式(2NF)要求實體的屬性完全依賴於主鍵。所謂完全依賴不能只依賴於主鍵屬性的一部分,如果存在的話,那麼這個屬性,這部分應該被分離出來,形成一個新的實體,新實體與原實體的主鍵是一個一對多的關系。一般需要被添加到該表來實現的列之間的區別,唯一地標識每個實例來存儲。總之,第二範式的非主屬性部分依賴於主鍵。
3第三範式(3NF)
滿足第三範式(3NF)必須滿足第二範式(2NF)。簡而言之,第三範式(3NF)請求不包含一個非主鍵信息包含在一個資料庫表中的其他表。例如,有一個部門信息表,其中每個部門都有一個的部門編號(在DEPT_ID「),本部門,本部門的簡要信息的名稱。所以在部門列出的電話號碼表中的圖3-2中的員工可以不再被相關部門的信息部門名稱,部門簡要的員工信息表。部門信息表不存在,根據第三範式(3NF)應該構建它,否則會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於非主屬性。例如:

第一範式(1NF):資料庫表中的欄位都是單一的財產,不能進行細分。單個屬性由基本類型包括整數,實數,字元,邏輯型,日期型。
例如,資料庫表是符合第一範式:場1場2場3場
這不符合第一範式的資料庫表是不符合第2場3場1個字場4場31場32
顯然,在任何關系型資料庫管理系統(S),一個傻子不能讓第一範式的資料庫,因為這些S不會讓你把一個資料庫表,然後再除以分成兩列或多列。因此,你要設計不符合第一範式的資料庫,是不可能在現有的S.
第二範式(2NF):有沒有非鍵欄位在資料庫表中的一部分,任何候選人函數依賴(部分函數依賴的存在為關鍵欄位決定關鍵字的組合),即是一些領域的關鍵領域,所有的非鍵欄位是完全依賴於任意一組候選關鍵字。
假定選課關系表中的SS(學號,姓名,年齡,課程名稱,成績,學分),關鍵字為組合關鍵字(學號,課程名稱),因為存在之間的關系以下決定:
(學號,課程名稱) - >(姓名,年齡,成績,學分)
資料庫表不符合第二範式,因為存在之間的關系如下決定: BR />(課程名稱)→(學分)
(學號)→(姓名,年齡)
中的關鍵字的欄位決定非關鍵字的組合。
一個學生選修,因為他們不符合2NF,這個選課關系表中有以下問題:1)數據冗餘:同一門課程由n個學生選修,「學分」重復n-1次;課程名稱和年齡對反復-1。 2)更新異常:調整課程的學分,數據表中的值的所有行的「學分」?必須更新,否則會出現同一門課程學分。 3)插入異常:假設你想創建一個新的課程,沒有一門選修課。還沒有「學號」關鍵字,課程名稱和信用記錄到資料庫中。 4)刪除異常:假設一組學生已完成課程選修記錄應該從資料庫表中刪除。然而,在同一時間,也將被刪除的過程名和信用信息。顯然,這將導致插入異常。
選修的關系表SS變更為以下三個表:
學生們:錫(學號,姓名,年齡);
課程設置:(課程名稱,學分);
選修關系:SS(學號,課程名稱,成績)。
這個資料庫表是符合第二範式的,消除了數據冗餘,更新異常,插入異常和刪除異常。
所有單關鍵字的資料庫表第二範式,因為有可能是一個組合關鍵字。
第三範式(3NF):在第二範式的表中的數據的基礎上,如果沒有非鍵欄位的任何候選人相關傳遞函數符合第三範式的重點領域。所謂的傳遞函數依賴,指的決定「A→→」關系存在,則傳遞函數依賴於A.,所以,第三範式的資料庫表中應該不存在依賴關系如下:非鍵欄位,重點領域→X→Y
非鍵欄位假定學生關系表錫(學號,姓名,年齡,其中[]學院[],讀大學學院電話),關鍵字為單一關鍵字「研究「,因為存在之間的關系如下決定:
(學號)→(姓名,年齡,其中[]學院這個資料庫是一致的[]學院[]的位置,[]學院[]電話)
2NF,但不符合3NF,因為一項決定存在以下關系:
(學生證)→(其中[]學院[])→([]學院[]位置[]學院[]電話)
非鍵欄位「[]學院[]位置」,「[]學院[]電話」依賴「研究」的重點領域傳遞函數。
它也存在數據冗餘,更新異常,插入異常和刪除異常讀者自己分析表明。
學生關系表分為以下兩個表:
學生們:(學號,姓名,年齡,其中[]學院[]);
[]學院[]:([學院[],位置,電話)。
這個資料庫表是符合第三範式的,消除了數據冗餘,更新異常,插入異常和刪除異常。
·博伊斯 - 科範式(BCNF):第三範式的基礎上,資料庫表中不存在任何領域的任何相關的傳遞函數的一個候選關鍵領域,到滿足BCNF的
The>的假設倉庫管理關系表Ssanag(倉庫,存儲物品,管理員,數量),管理員只在一個倉庫工作,倉庫可以存放各種物品。資料庫中的表存在以下關系:一項決定
(倉庫,存儲物品)→(管理員)
(管理員,存儲項目)→(倉庫,數量)
所以, (倉庫,儲存項目)和(管理員,存儲資料)Ssanag候選鍵,唯一的非鍵欄位的表的數量,它是在第三範式。然而,由於存在之間的關系如下決定:
(倉庫)→(管理員)
(管理員)→(倉庫)
存在的關鍵領域確定重點領域,其不符合BCNF範式。它會出現以下異常:1)刪除異常:當倉庫是空的,所有儲存的項目「和」數量「信息被刪除的同時,」倉庫「和」管理員「也被刪除。2)插入一個例外:管理員可以分配到倉庫,當倉庫沒有存儲任何物品。3)更新異常:如果該存儲庫的管理員,管理員必須表中的所有行。
倉庫管理關系表分解為兩個關系表:
倉庫管理:Ssanag(倉庫管理員);
倉庫:SS(倉庫,儲存項目,數量)。
這是在資料庫表BCNF範式的,消除刪除異常,插入異常和更新異常。
在短的五個最大的資料庫範式:
第一範式:對於表中的每一行,必須和唯一的價值線唯一的值嗎?成一排,每列和原子操作。
(第一範式是重復的組,每個單獨的表,這些表的聯系,通過這種方式來消除重復組的一個to-many關聯)</第二範式:第二範式要求非主鍵列是主鍵的一個子集,非主鍵列活動必須完全依賴於整個主鍵,主鍵必須有一個獨特的電阻元件,主鍵所組成的一個或多個唯一值。一旦創建後,不能更改主鍵,外鍵與主鍵的表。與手段 - 許多關系的主外鍵(Delete(刪除)第二範式處理問題。冗餘數據表中的信息時,通常違反了第二範式取決於以外的主鍵的一部分)
第三範式:第三範式要求非主鍵的表中的列列是相互依存的。(第三範式規則查找以消除第一範式和第二範式的表中不直接依賴於主鍵的屬性,我們沒有相關的所有信息的表的主鍵建??立一個新的每個新表的表從源表中保存的信息,它們依賴於主鍵)
第四範式:第四範式禁止主鍵列和非主鍵列一對多關系不受約束的 BR />第五範式:第五範式的表被劃分成盡可能小的塊,以排除多餘的表格。

G. 高中數學公式

nmmnmSqSS.
46、等差數列的一個性質:設nS是數列na的前n項和,na為等差數列的充要條件是
bnanSn2 (a, b為常數)其公差是2a.
47、你知道怎樣的數列求和時要用「錯位相減」法嗎?(若nnnbac,其中na是等差數列,nb是等
比數列,求nc的前n項的和)
48、用1nnnSSa求數列的通項公式時,你注意到11Sa了嗎? 49、你還記得裂項求和嗎?(如
1
1
1)1(1nnnn .)
四、排列組合、二項式定理
50、解排列組合問題的依據是:分類相加,分步相乘,有序排列,無序組合.
51、解排列組合問題的規律是:相鄰問題捆綁法;不鄰問題插空法;多排問題單排法;定位問題優先法;
多元問題分類法;有序分配問題法;選取問題先排後排法;至多至少問題間接法,還記得什麼時候用隔板法?
52、排列數公式是: 組合數公式是: 排列數與組合數的關系是:m
n
mnCmP! 組合數性質:m
nC
=
mnn
C
 mnC
+
1
mn
C
=m
nC
1
n
rrn
C
0
=n
2
1
121rnrnrrrrrrCCCCC
二項式定理: 222110)( 二項展開式的通項公式:r
rnrnrbaCT1)210(nr,,,
 五、立體幾何
53、有關平行垂直的證明主要利用線面關系的轉化:線//線線//面面//面,線⊥線線⊥面
面⊥面,垂直常用向量來證。
54、作出二面角的平面角主要方法是什麼?(定義法、三垂線法)三垂線法:一定平面,二作垂線,三
作斜線,射影可見.
55、二面角的求法主要有:解直角三角形、餘弦定理、射影面積法、法向量 56、求點到面的距離的常規方法是什麼?(直接法、等體積變換法、法向量法) 57、你記住三垂線定理及其逆定理了嗎?
58、有關球面上兩點的球面距離的求法主要是找球心角,常常與經度及緯度聯系在一起,你還記得經度
及緯度的含義嗎?(經度是面面角;緯度是線面角)
59、你還記得簡單多面體的歐拉公式嗎?(V+F-E=2,其中V為頂點數,E是棱數,F為面數),棱的兩種
演算法,你還記得嗎?(①多面體每面為n邊形,則E=
2nF;②多面體每個頂點出發有m條棱,則E=2
mV
) 六、解析幾何
60、設直線方程時,一般可設直線的斜率為k,你是否注意到直線垂直於x軸時,斜率k不存在的情況?
(例如:一條直線經過點
23,3,且被圓2522yx截得的弦長為8,求此弦所在直線的方程。該題就要注意,不要漏掉x+3=0這一解.)
61、定比分點的坐標公式是什麼?(起點,中點,分點以及值可要搞清)
線段的定比分點坐標公式
設P(x,y) ,P1(x1,y1) ,P2(x2,y2) ,且

21PPPP ,則

112121yyyxxx 中點坐標公式

22
21
21yyyxxx

62、若),(),(),(332211yxCyxByxA,,,則△ABC的重心G的坐標是


33321321yyyxxx,在利
用定比分點解題時,你注意到1了嗎?
63、在解析幾何中,研究兩條直線的位置關系時,有可能這兩條直線重合,而在立體幾何中一般提到的
兩條直線可以理解為它們不重合.
64、直線方程的幾種形式:點斜式、斜截式、兩點式、截矩式、一般式.以及各種形式的局限性.(如點
斜式不適用於斜率不存在的直線)
65、對不重合的兩條直線0:1111CyBxAl,0:2222CyBxAl,有:

122
11
22121//CACABABAll; 0212121BBAAll. 66、直線在坐標軸上的截矩可正,可負,也可為0. 67、直線在兩坐標軸上的截距相等,直線方程可以理解為
1b
y
ax,但不要忘記當 a=0時,直線y=kx在兩條坐標軸上的截距都是0,也是截距相等.
68、兩直線01CByAx和02CByAx的距離公式d=——————————
69、直線的方向向量還記得嗎?直線的方向向量與直線的斜率有何關系?當直線L的方向向量為m=(x0,y0)時,直線斜率k=———————;當直線斜率為k時,直線的方向向量m=————— 70、到角公式及夾角公式———————,何時用? 71、處理直線與圓的位置關系有兩種方法:(1)點到直線的距離;(2)直線方程與圓的方程聯立,判別
式. 一般來說,前者更簡捷.
72、處理圓與圓的位置關系,可用兩圓的圓心距與半徑之間的關系.
73、在圓中,注意利用半徑、半弦長、及弦心距組成的直角三角形並且要更多聯想到圓的幾何性質. 74、在利用圓錐曲線統一定義解題時,你是否注意到定義中的定比的分子分母的順序?兩個定義常常結
伴而用,有時對我們解題有很大的幫助,有關過焦點弦問題用第二定義可能更為方便。(焦半徑公式:橢圓:|PF1|=———— ;|PF2|=———— ;雙曲線:|PF1|=———— ;|PF2|=———— (其中F1為左焦點F2為右焦
點 );拋物線:|PF|=|x0|+
2
p
) 75、在用圓錐曲線與直線聯立求解時,消元後得到的方程中要注意:二次項的系數是否為零?判別式
0的限制.(求交點,弦長,中點,斜率,對稱,存在性問題都在0下進行).
76、橢圓中,a,b,c的關系為————;離心率e=————;准線方程為————;焦點到相應准線距離為———— 雙
曲線中,a,b,c的關系為————;離心率e=————;准線方程為————;焦點到相應准線距離為———— 77、通徑是拋物線的所有焦點弦中最短的弦.
78、你知道嗎?解析幾何中解題關鍵就是把題目中的幾何條件代數化,特別是一些很不起眼的條件,有
時起著關鍵的作用:如:點在曲線上、相交、共線、以某線段為直徑的圓經過某點、夾角、垂直、平行、中點、角平分線、中點弦問題等。圓和橢圓參數方程不要忘,有時在解決問題時很方便。數形結合是解決解幾問題的重要思想方法,要記得畫圖分析喲!
79、你注意到了嗎?求軌跡與求軌跡方程有區別的。求軌跡方程可別忘了尋求范圍呀!
80、在解決有關線性規劃應用問題時,有以下幾個步驟:先找約束條件,作出可行域,明確目標函數,
其中關鍵就是要搞清目標函數的幾何意義,找可行域時要注意把直線方程中的y的系數變為正值。如:求2<5a-2b<4,-3<3a+b<3求a+b的取值范圍,但也可以不用線性規劃。 七、向量
81、兩向量平行或共線的條件,它們兩種形式表示,你還記得嗎?注意ba是向量平行的充分不必要
條件。(定義及坐標表示) 82、向量可以解決有關夾角、距離、平行和垂直等問題,要記住以下公式:|a|2
=a·a,
cosθ=
2
22221212
121|
|||yxyxyyxxbaba

83、利用向量平行或垂直來解決解析幾何中的平行和垂直問題可以不用討論斜率不存在的情況,要注意

0ba是向量ba和向量夾角為鈍角的必要而非充分條件。
84、向量的運算要和實數運算有區別:如兩邊不能約去一個向量,向量的乘法不滿足結合律,即
cbacba)()(,切記兩向量不能相除。
85、你還記得向量基本定理的幾何意義嗎?它的實質就是平面內的任何向量都可以用平面內任意不共線
的兩個向量線性表示,它的系數的含義與求法你清楚嗎?
86、一個封閉圖形首尾連接而成的向量和為零向量,這是題目中的天然條件,要注意運用,對於一個向
量等式,可以移項,兩邊平方、兩邊同乘以一個實數,兩邊同時取模,兩邊同乘以 一個向量,但不能兩邊同除以一個向量。 87、 向量的直角坐標運算
設321321,,,,,bbbbaaaa

,則332211,,babababa


332211,,babababa

Raaaa
321,,
332211babababa
 2
3
2221aaaaaa

23
222123
22
2
1
332211,cosb
bba
aababababa


Rbabababa

,,,//332211, 0332211

babababa
設A=111,,zyx, B=222,,zyx,
則


OAOBAB222,,zyx- 111,,zyx=121212,,zzyyxx 212212212zzyyxxABABAB




八、導數
88、導數的幾何意義即曲線在該點處的切線的斜率,學會定義的多種變形。 89、幾個重要函數的導數:①0'
C,(C為常數)②Qnnxxnn
1
'

導數的四運演算法則'''
90、利用導數可以證明或判斷函數的單調性,注意當f 』(x)≥0或f 』(x)≤0,帶上等號。
91、f(x0)=0是函數f(x)在x0處取得極值的非充分非必要條件,f(x)在x0處取得極值的充分要條件是
什麼? 92、利用導數求最值的步驟:(1)求導數xf
'
(2)求方程xf'=0的根nxxx,,,21
(3)計算極值及端點函數值的大小
(4)根據上述值的大小,確定最大值與最小值.
93、求函數極值的方法:先找定義域,再求導,找出定義域的分界點,根據單調性求出極值。告訴函數
的極值這一條件,相當於給出了兩個條件:①函數在此點導數值為零,②函數在此點的值為定值。 九、概率統計
94、有關某一事件概率的求法:把所求的事件轉化為等可能事件的概率(常常採用排列組合的知識),轉
化為若干個互斥事件中有一個發生的概率,利用對立事件的概率,轉化為相互獨立事件同時發生的概率,看作某一事件在n次實驗中恰有k次發生的概率,但要注意公式的使用條件。 (1)若事件A、B為互斥事件,則P(A+B)=P(A)+P(B) (2)若事件A、B為相互獨立事件,則P(A·B)=P(A)·P(B) (3)若事件A、B為對立事件,則P(A)+P(B)=1一般地,
APAp1
(4)如果在一次試驗中某事件發生的概率是p,那麼在n次獨立重復試驗中這個事恰好發生K次的概
率: 
k
nk
knnppCKP1
95、抽樣方法主要有:簡單隨機抽樣(抽簽法、隨機樣數表法)常常用於總體個數較少時,它的主要特徵是從總體中逐個抽取;系統抽樣,常常用於總體個數較多時,它的主要特徵就是均衡成若幹部分,

每一部分只取一個;分層抽樣,主要特徵分層按比例抽樣,主要使用於總體中有明顯差異。它們的共同特徵是每個個體被抽到的概率相等。
96、用總體估計樣本的方法就是把樣本的頻率作為總體的概率。 十、解題方法和技巧
97、總體應試策略:先易後難,一般先作選擇題,再作填空題,最後作大題,選擇題力保速度和准確度
為後面大題節約出時間,但准確度是前提,對於填空題,看上去沒有思路或計算太復雜可以放棄,對於大題,盡可能不留空白,把題目中的條件轉化代數都有可能得分,在考試中學會放棄,擺脫一個題目無休止的糾纏,給自己營造一個良好的心理環境,這是考試成功的重要保證。 98、解答選擇題的特殊方法是什麼?
(順推法,估演算法,特例法,特徵分析法,直觀選擇法,逆推驗證法、數形結合法等等) 99、 答填空題時應注意什麼?(特殊化,圖解,等價變形) 100、解答應用型問題時,最基本要求是什麼?
101、 審題、找准題目中的關鍵詞,設未知數、列出函數關系式、代入初始條件、註明單位、作答學會
跳步得分技巧,第一問不會,第二問也可以作,用到第一問就直接用第一問的結論即可,要學會用「由已知得」「由題意得」「由平面幾何知識得」等語言來連接,一旦你想來了,可在後面寫上「補證」即可。

數學高考應試技巧
數學考試時,有許多地方都要考生特別注意.在考試中掌握好各種做題技巧,可以幫助各位在最後關頭鯉魚躍龍門。 考試注意:
1.考前5分鍾很重要
在考試中,要充分利用考前5分鍾的時間。考卷發下後,可瀏覽題目。當准備工作(填寫姓名、考號等)完成後,可以翻到後面的解答題,通讀一遍,做到心中有數。
2.區別對待各檔題目
考試題目分為易、中、難三種,它們的分值比約為3:5:2。考試中大家要根據自身狀況分別對待。
⑴做容易題時,要爭取一次做完,不要中間拉空。這類題要100%的拿分。 ⑵做中等題時,要靜下心來,盡量保證拿分,起碼有80%的完成度。 ⑶做難題時,大家通常會感覺無從下手。這時要做到: ①多讀題目,仔細審題。 ②在草稿上簡單感覺一下。
③不要輕易放棄。許多同學一看是難題、大題,不多做考慮,就徹底投降。解答題多為小步設問,許多小問題同學們都是可以解決的,因此,每一個題、每一個問,考生都要認真對待。

3.時間分配要合理
⑴考試時主要是在選擇題上搶時間。
⑵做題時要邊做邊檢查,充分保證每一題的正確性。不要抱著「等做完後再重新檢查」的念頭而在後面浪費太多的時間用於檢查。
⑶在交卷前30分鍾要回頭再檢查一下自己的進度。注意及時填機讀卡。

熱點內容
sql登陸不了 發布:2025-03-09 20:45:16 瀏覽:923
如何用本機做伺服器 發布:2025-03-09 20:43:54 瀏覽:43
新時達伺服器如何查故障 發布:2025-03-09 20:31:14 瀏覽:948
sql2005server 發布:2025-03-09 20:31:08 瀏覽:112
過濾sql注入 發布:2025-03-09 20:23:25 瀏覽:991
華為榮耀6大容量存儲 發布:2025-03-09 20:22:34 瀏覽:456
php流圖片 發布:2025-03-09 20:22:27 瀏覽:43
農行密碼多少位 發布:2025-03-09 20:21:55 瀏覽:147
林肯冒險家兩驅車型配置怎麼選 發布:2025-03-09 20:18:34 瀏覽:23
安卓模擬器大師有什麼作用 發布:2025-03-09 20:14:24 瀏覽:528