Ⅰ SQL實戰新手入門:關系型資料庫管理系統
關系型資料庫管理系統
本書是講述SQL的 它是一種關系型資料庫或者關系型資料庫管理系統(RDBMS)的語言 自從Codd博士在 世紀 年代奠定關系型資料庫的理論基礎以來 已經產生了相當多的關系型資料庫實現 一些新的關系型資料庫實現也不斷出現
很多人將DB 視為所有資料庫的鼻祖 IBM的研究員Edgar Frank Codd博士在 年的一份IBM的研究報告中發表他的論文 Derivability Rendancy and Consistency of Relations Stored inLarge Data Banks 時 給這種資料庫理論定義了一個非常恰當的術語 關系型 關系型資料庫被其他兩種技術競爭 一種是Honeywell Information Systems在 年銷售的Multics RelationalData Store 另一種是密歇根大學從 年起作為實驗性設計的Micro DBMS(它開創了Codd博士兩年之後提出的規范化理論) Micro DBMS的最後一個產品已經於 年退役 這兩種技術演變成了 年發布的Oracle V 商業資料庫 在通往RDBMS的道路上 包含了很多其他公司的產品所樹立的里程碑(當然偶爾也有墓碑) 這些產品包括 IBM PRTV( ) IBM SQL/DS( ) QBE( ) Informix( ) Sybase( ) Teradata( ) Ingres 一個給其他很多成功的系統帶來靈感的開源項目 例如PostgreSQL( ) Nonstop SQL( )和MicrosoftSQL Server( )等 這些系統使用了原始SQL的不同方言 SEQUEL QUEL Informix SQL等 直到 年 人數培們才第一次試圖為SQL語言制定標准 毫無疑問 各個廠商關於SQL語言的戰爭仍在繼續
當前的RDBMS市場已經被幾個重量級的專有關系型資料庫瓜分 Oracle( %) IBM( %)和Microsoft( %) 更小的專有資料庫系統Teradata和Sybase 每種不到 %的市場份額 其他資料庫廠商 包括開源資料庫轎畢旁 大約佔有 %的市場份額
對於大型企業來說 選擇一個資料庫產品作為應用程序的基礎並不是一個簡單的任務 這不僅僅是因為資料庫系統軟體需要花費好幾萬美元的許可證費用 幾十萬美金的維護和技術支持費 而且在於與其他軟體 硬體和人力資源投資相比 資料庫軟體的投資還是一個決定整個企業架構的關鍵要素 盡管近年來從一個RDBMS遷移到另一個RDBMS變得更加容易 但考慮選擇哪一種資料庫依然會給CFO帶來噩夢
IBM DB LUW
從帶有MVS系列操作系統的大型機到z/OS 以及閉橡後來的UNIX和Windows系統 IBM在RDBMS領域都是一個長期的領跑者 IBM資料庫的當前版本是IBM DB LUW(Linux UNIX和Windows)
IBM DB 在事務處理速度上保持了絕對領先的記錄(更多信息請參見第 章) 它具有多個不同的版本 從Advanced Server Enterprise版本到免費的DB Express C版本(盡管功能上有限制) 免費的DB Express C版本可用於運行本書中的示例
直到DB 的 版本 依然遵循ANSI/ISO SQL Entry標准(請參考本章後面的內容)並支持由其他標准化組織制定的一些高級功能 例如Open Geospatial Consortium(開放地理信息聯盟) JDBC X/Open XA 它還包含了最新SQL: 標準的部分功能 除了自己內置的過程化擴展語言SQL PL之外 它還支持使用Oracle的PL/SQL語言 Java語言 甚至Microsoft的 NET家族的語言來創建存儲過程(更多內容請參見第 章)
Oracle
Oracle資料庫可以追溯到 年第一次發布的Oracle V 開始時用於VAX/VMS系統 並於 年支持UNIX系統 經過多年發展 對於SQL標準定義的絕大多數功能 Oracle資料庫都添加了相應的支持 在最新發布的Oracle g版本中功能支持達到了極致 它聲稱遵循最新SQL: 標準的很多功能
在高性能事務處理的標桿上 Oracle占據了第二名的位置 它是企業生態系統的核心 Oracle是一個安全的 健壯的 可伸縮的 高性能的資料庫系統 它統治UNIX市場長達數十年 除了對SQL標準的支持之外 Oracle還提供了一種內置的過程化語言PL/SQL(關於過程化擴展的更多內容 請參見第 章) 另外它還支持通用的程序設計語言 例如Java
在寫作本書之時 Oracle的最新版本是Oracle g 只有Oracle g有免費的速成版 該版本在數據存儲的容量和RDBMS能夠利用的處理器(CPU)數量上存在一定的限制 速成版完全支持本書所討論的所有SQL功能
Microsoft SQL Server
SQL Server來源於Microsoft Ashton Tate和Sybase合作的結果 開始的目標是改寫已有的 僅適用於UNIX的Sybase SQL Server資料庫 使之適用於新的IBM操作系統OS/ Ashton Tate隨後退出了這一合作 IBM OS/ 操作系統也逐漸被人淡忘 Microsoft和Sybase為了分享成果 開始小心地避免觸犯彼此 Microsoft致力於發展並支持Windows和OS/ 系統上的SQL Server 而Sybase則致力於UNIX平台 盡管在SQL Server的核心技術上Microsoft依然採用了相當多的Sybase技術 但雙方的合作關系於 年正式結束 Microsoft於 年發布了Microsoft SQLServer 它消除了Sybase余留的痕跡 為世界(Windows系統的世界)帶來了一個完全嶄新的RDBMS系統 時至今日 Microsoft占據了RDBMS大約 %的市場份額 而在Windows系統上它占據了至高無上的位置
在寫作本書之時 最新版本是Microsoft SQL Server Release Microsoft還提供了一個免費但有限制的Express版本 它支持本書所介紹的全部SQL功能
Microsoft Access
Microsoft Access也被稱為Microsoft Office Access 它是一個桌面型關系資料庫(相對來說是關系型的) Microsoft Access的設計目標是成為一個集成的解決方案 結合關系型資料庫引擎的要素和應用程序開發的基礎結構(配套有內置的程序設計語言和程序設計模型) 並作為一個報表平台 與本書中討論的其他RDBMS不同的是 Microsoft Access是一個基於文件的資料庫 因此它在性能和可伸縮性方面都存在固有的局限 例如 雖然最新版本的Access理論上允許最多 個並發用戶 但在實踐中超過 多個用戶就會減慢Access的性能 Access僅支持SQL標準的一個子集 它提供了許多僅在Access環境中有效的功能
Access提供的功能之一就是從遠程資料庫鏈接表的能力 該功能使Access可以作為應用程序
PostgreSQL
PostgreSQL是從美國加州伯克利大學的Michael Stonebraker所領導的一個項目演變而來的 Michael Stonebraker是關系型資料庫理論的先驅 在最初的Ingres項目以及其繼任者PostgreSQL中採用的那些原則也以各種方式被其他RDBMS產品採用 例如Sybase Informix EnterpriseDB和Greenplum
PostgreSQL的第一個版本發布於 年 之後第二年以 版本的名義發布 並保留了一個由一組專門的開發人員維護的開源項目 PostgreSQL具有很多個商業版本 最著名的是EnterpriseDB 一個私人公司為該產品提供企業支持(以及大量專有的管理工具) 在一些苛刻的企業級應用環境中 很多高端客戶(例如Sony和Vonage)都採用了開源的RDBMS 這充分證明了EnterpriseDB的性能
在對SQL標準的支持方面 PostgreSQL可以說是最接近SQL標準的 另外它還提供了很多在其他資料庫中所沒有的功能 與它的開源夥伴(例如MySQL)不同 PostgreSQL從一開始就提供了參照完整性和事務支持 PostgreSQL內置了對PL/pgSQL過程化擴展語言的支持 另外實際上還具有適配其他任何語言來實現過程化擴展的功能
MySQL
MySQL最先是由Michael Widenius和David Axmark於 年開發的 並於 年發布了第一個版本 MySQL最初定位為一個輕量級的快速資料庫 用於作為數據驅動型網站的後台資料庫 盡管MySQL缺乏更加成熟的RDBMS產品所具有的許多功能 但在提供信息服務的速度上非常快 對於很多場合來說都已經 足夠好 (為了達到真正的快速 MySQL避開了參照完整性約束和事務支持 更多內容請參見第 章和第 章) 另外 MySQL有著無法抗拒的價格 它是免費的 因此 在中小規模的用戶群中 MySQL成為最流行的關系型資料庫 在資料庫產品的市場上 很多其他的免費產品在功能上都有所缺乏或者帶有近乎商業炒作的宣傳 資料庫產品的巨人 Oracle IBM Microsoft和Sybase在那時也都沒有提供各自RDBMS產品的免費速成版 在 年 Sun Microsystems公司收購了MySQL 隨後Sun公司又被Oracle收購
目前 Oracle提供了一個帶有商業支持的MySQL版本和一個Community Edition版本 伴隨著這一收購 出現了大量分支版本 例如MariaDB和 Percona Server 它們在通用公共許可證(General PublicLicense GPL)下繼續保持免費狀態 GPL是一種限制最小的開源許可證
MySQL的最新版本是 MySQL 也已經指日可待 它是多平台的(Linux/UNIX/Windows) 並且支持SQL: 的絕大多數功能 其中一些功能依賴於選定的配置選項(例如 存儲引擎)
存儲引擎選項是MySQL獨一無二的特性 它允許採用不同的方式處理不同的表類型 每一種引擎都有獨特的功能和一定的限制(例如事務支持 聚集索引 存儲限制等) 可以採用不同的存儲引擎選項來創建MySQL資料庫中的表 默認使用的是MyISAM引擎
HSQLDB和OpenOffice BASE
超結構化查詢語言資料庫(Hyper Structured Query Language Database HSQLDB)是一個用Java程序設計語言實現的關系型資料庫管理系統 它是伯克利軟體發行(BSD)許可證(這個許可證相當寬松)下的一個開源資料庫
HSQLDB是OpenOffice BASE自帶的默認RDBMS引擎 OpenOffice BASE是一個桌面型資料庫 被定位於和Microsoft Access進行市場競爭 OpenOffice BASE也是一個關系型資料庫 它健壯 功能豐富且相當快速 支持多種平台 包括Linux 各種版本的UNIX和Microsoft Windows OpenOffice BASE聲稱幾乎完全遵循SQL: 標准 該標准包含了本書所討論的絕大多數SQL子集
改寫過的HSQLDB可以作為OpenOffice 套件組件BADE的一個嵌入的後端 並從 版本開始成為OpenOffice 套件中的一部分 與Microsoft Access類似 假如有適當的驅動程序的話 OpenOffice BASE可以連接到多種不同的RDBMS 在OpenOffice BASE產品中 已經包含了大量可用的Java Database Connectivity(JDBC)和ODBC(Open Database Connectivity)驅動程序
隨著Oracle收購了OpenOffice 而其在Oracle的資助下作為開源項目的狀態並不明確 OpenOffice 社區決定啟動一個名為LibreOffice的新項目 意圖在原來的BSD許可證的授權下將LibreOffice作為一個免費軟體 實現OpenOffice的所有功能
關系型資料庫並不是資料庫領域中唯一的主角 一些似乎已經被關系型資料庫理論打敗的舊技術在更快和更便宜的硬體以及軟體創新的幫助下卷土重來 對更高性能和更容易創建應用程序的需求催生了對列式資料庫(columnar database)和面向對象資料庫 使 將所有數據放在一個桶中 方法可行的框架 特定領域擴展(例如測地數據管理或多媒體)以及各種數據訪問機制的研究 第 章將討論這些話題
返回目錄 SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
lishixin/Article/program/SQL/201311/16492
Ⅱ 有人教我資料庫原理與應用嗎
資料庫原理與應用教程(全套)內容簡介:
資料庫技術是計算機學科的一個重要分支,它反映了數據管理的最新技術。第一視頻教程分享的這部資料庫原理與應用教程內容豐富,結構清晰。它給大家全面講述了資料庫系統的基本概念、基本原理和應用技術,主要內容包括資料庫技術概述、關系資料庫、關系資料庫的標准語言SQL、關系資料庫設計、資料庫保護、網路資料庫等。
資料庫技術從誕生到現在,在不到半個世紀的時間里,形成了堅實的理論基礎、成熟的商業產品和廣泛的應用領域,吸引越來越多的研究者加入。資料庫的誕生和發展給計算機信息管理帶來了一場巨大的革命。三十多年來,國內外已經開發建設了成千上萬個資料庫,它已成為企業、部門乃至個人日常工作、生產和生活的基礎設施。同時,隨著應用的擴展與深入,資料庫的數量和規模越來越大,資料庫的研究領域也已經大大地拓廣和深化了。30年間資料庫領域獲得了三次計算機圖靈獎(C.W. Bachman,E.F.Codd, J.Gray),更加充分地說明了資料庫是一個充滿活力和創新精神的領域。就讓我們沿著歷史的軌跡,追溯一下資料庫的發展歷程。
傳統上,為了確保企業持續擴大的IT系統穩定運行,一般用戶信息中心往往不僅要不斷更新更大容量的IT運維軟硬體設備,極大浪費企業資源;更要長期維持一支由資料庫維護、伺服器維護、機房值班等各種維護人員組成的運維大軍,維護成本也隨之節節高升。為此,企業IT決策者開始思考:能不能像擰水龍頭一樣按需調節的使用IT運維服務?而不是不斷增加已經價格不菲的運維成本。
隨著信息技術和市場的發展,人們發現關系型資料庫系統雖然技術很成熟,但其局限性也是顯而易見的:它能很好地處理所謂的「表格型數據」,卻對技術界出現的越來越多的復雜類型的數據無能為力。九十年代以後,技術界一直在研究和尋求新型資料庫系統。但在什麼是新型資料庫系統的發展方向的問題上,產業界一度是相當困惑的。受當時技術風潮的影響,在相當一段時間內,人們把大量的精力花在研究「面向對象的資料庫系統(object oriented database)」或簡稱「OO資料庫系統」。值得一提的是,美國Stonebraker教授提出的面向對象的關系型資料庫理論曾一度受到產業界的青睞。而Stonebraker本人也在當時被Informix花大價錢聘為技術總負責人。
然而,數年的發展表明,面向對象的關系型資料庫系統產品的市場發展的情況並不理想。理論上的完美性並沒有帶來市場的熱烈反應。其不成功的主要原因在於,這種資料庫產品的主要設計思想是企圖用新型資料庫系統來取代現有的資料庫系統。這對許多已經運用資料庫系統多年並積累了大量工作數據的客戶,尤其是大客戶來說,是無法承受新舊數據間的轉換而帶來的巨大工作量及巨額開支的。另外,面向對象的關系型資料庫系統使查詢語言變得極其復雜,從而使得無論是資料庫的開發商家還是應用客戶都視其復雜的應用技術為畏途。
Ⅲ 關系資料庫規范化理論的基礎和內容
一個關系資料庫模式由一組關系模式組成,一個關系模式由一組屬性名組成。關系資料庫設計,就是如何把已給定的相互關聯的一組屬性名分組,並把每一組屬性名組成關系的問題。然而,屬性的分組不是唯一的,不同的分組對應著不同的資料庫應用系統,它們的效率往往相差很遠。
為了使資料庫設計合理可靠,簡單實用,長期以來,形成了關系資料庫設計的理論——規范化理論。
6.1 關系規范化的作用
規范化,就是用形式更為簡潔,結構更加規范的關系模式取代原有關系模式的過程。
如果將兩個或兩個以上實體的數據存放在一個表裡,就會出現下列三個問題:
Ø 數據冗餘度大
Ø 插入異常
Ø 刪除異常
所謂數據冗餘,就是相同數據在資料庫中多次重復存放的現象。數據冗餘不僅會浪費存儲空間,而且可能造成數據的不一致性。
插入異常是指,當在不規范的數據表中插入數據時,由於實體完整性約束要求主碼不能為空的限制,而使有用數據無法插入的情況。
刪除異常是指,當不規范的數據表中某條需要刪除的元組中包含有一部分有用數據時,就會出現刪除困難。
(以P98工資表為例)
解決上述三個問題的方法,就是將不規范的關系分解成為多個關系,使得每個關系中只包含一個實體的數據。
(講例子解)
當然,改進後的關系模式也存在另一問題,當查詢職工工資時需要將兩個關系連接後方能查詢,而關系連接的代價也是很大的。
那麼,什麼樣的關系需要分解?分解關系模式的理論依據又是什麼?分解完後能否完全消除上述三個問題?回答這些問題需要理論指導。下面,將加以討論:
6.2 函數依賴
6.2.1屬性間關系
實體間的聯系有兩類:一類是實體與實體之間聯系;另一類是實體內部各屬性間的聯系。資料庫建模一章中討論的是前一類,在這里我們將學習第二類。
和第一類一樣,實體內部各屬性間的聯系也分為1:1、1:n和m:n三類:
例:職工(職工號,姓名,身份證號碼,職稱,部門)
1、 一對一關系(1:1)
設X、Y是關系R的兩個屬性(集)。如果對於X中的任一具體值,Y中至多有一個值與之對應,反之,對於Y中的任一具體值,X中也至多有一個值與之對應,則稱X、Y兩屬性間是一對一關系。
如本例職工關系中職工號與身份證號碼之間就是一對一關系。
2、一對多關系(1:n)
設X、Y是關系R的兩個屬性(集)。如果對於X中的任一具體值,Y中可以找到多個值與之對應,而對於Y中的任一具體值,X中至多隻有一個值與之對應,則稱屬性X對Y是一對多關系。
如職工關系中職工號與職稱之間就是一對多的關系。
3、多對多關系(m:n)
設X、Y是關系R的兩個屬性(集)。如果對於X中的任一具體值,Y中有n個值與之對應,而對於Y中的任一具體值,X中也有m個值與之對應,則稱屬性X對Y是一對多(m:n)關系。
例如,職工關系中,職稱與部門之間就是多對多的關系。
上述屬性間的三種關系,實際上是屬性值之間相互依賴與相互制約的反映,因而稱之為屬性間的數據依賴。
數據依賴共有三種:
Ø 函數依賴(Functional Dependency,FD)
Ø 多值依賴(Multivalued Dependency,MVD)
Ø 連接依賴(Join Dependency,JD)
其中最重要的是函數依賴和多值依賴。
6.2.2 函數依賴
函數依賴,是屬性之間的一種聯系。在關系R中,X、Y為R的兩個屬性或屬性組,如果對於R的所有關系r 都存在:對於X的每一個具體值,Y都只有一個具體值與之對應,則稱屬性Y函數依賴於屬性X。或者說,屬性X函數決定屬性Y,記作X→Y。其中X叫作決定因素,Y叫作被決定因素。
上述定義,可簡言之:如果屬性X的值決定屬性Y的值,那麼屬性Y函數依賴於屬性X。換一種說法:如果知道X的值,就可以獲得Y的值,則可以說X決定Y。
若Y函數不依賴於X,記作:X→Y。
X Y
若X→Y,Y→X,記作:
前面學習的屬性間的三種關系,並不是每種關系中都存在著函數依賴。
u 如果X、Y間是1:1關系,則存在函數依賴 X←→Y
u 如果X、Y間是1:n關系,則存在函數依賴: X→Y或Y→X(多方為決定因素)
u 如果X、Y間是m:n關系,則不存在函數依賴。
注意,屬性間的函數依賴不是指R的某個或某些關系子集滿足上述限定條件,而是指R的一切關系子集都要滿足定義中的限定。只要有一個具體的關系r(R的一個關系子集)不滿足定義中的條件,就破壞了函數依賴,使函數依賴不成立。
這里的關系子集,指的是R的某一部分元組的集合,例如:地測學院的學生關系中只包含了地測學院學生的數據,所以它是長安大學學生關系的一個子集。
6.2.3 碼的定義
前面,我們對碼進行了直觀化的定義,下面用函數依賴的概念對碼作出較為精確的形式化的定義:
設K是關系模式R(U,F)中的屬性或屬性組,K』是K的任一子集。若K→U,而不存在K』→U,則K為R的候選碼(Candidate Key)
Ø 若候選碼多於一個,則選其中的一個為主碼(Primary Key);
Ø 包含在任一候選碼中的屬性,叫做主屬性(Primary Attribute);
Ø 不包含在任何碼中的屬性稱為非主屬性(Nonprime Attribute)或非碼屬性(Nonkey Attribute)
Ø 關系模式中,最簡單的情況是單個屬性是碼,稱為單碼(Single Key);最極端的情況是整個屬性組是碼,稱為全碼(All-Key)。
前面已多次遇到單碼的情況,下面是一個全碼的例子:
簽約(演員名,製片公司,電影名)
外碼:設有兩個關系R和S,X是R的屬性或屬性組,並且X不是R的碼,但X是S的碼(或與S的碼意義相同),則稱X是R的外部碼(Foreign Key),簡稱外碼或外鍵。
如:職工(職工號,姓名,性別,職稱,部門號)
部門(部門號,部門名,電話,負責人)
其中職工關系中的「部門號」就是職工關系的一個外碼。
在此需要注意,在定義中說X不是R的碼,並不是說X不是R的主屬性,X不是碼,但可以是碼的組成屬性,或者是任一候選碼中的一個主屬性。
如:學生(學生號,姓名,性別,年齡…)
課程(課程號,課程名,任課老師…)
選課(學生號,課程號,成績)
在選課關系中,(學生號,課程號)是該關系的碼,學生號、課程號又分別是組成主碼的屬性(但單獨不是碼),它們分別是學生關系和課程關系的主碼,所以是選課關系的兩個外碼。
關系間的聯系,可以通過同時存在於兩個或多個關系中的主碼和外碼的取值來建立。如要查詢某個職工所在部門的情況,只需查詢部門表中的部門號與該職工部門號相同的記錄即可。所以,主碼和外碼提供了一個表示關系間聯系的途徑。
6.2.4 函數依賴和碼的唯一性
由上述碼的形式化定義,我們可以說:碼是由一個或多個屬性組成的,可唯一標識元組的最小屬性組。
碼在關系中總是唯一的,即一個碼函數唯一地決定一行。如果碼的值重復,則整個元組都會重復。否則,違反了實體完整性規則。而元組的重復則表示存在兩個完全相同的實體,這顯然是不可能的,所以碼是不允許重復取值的。
所以,只有當某個屬性或屬性組能夠函數決定關系中的每一個其它的屬性,且該屬性組的任何一個真子集都做不到這一點時,該屬性或屬性組才是該關系的碼。
函數依賴是一個與數據有關的事物規則的概念。如果屬性B函數依賴於屬性A,那麼若知道了A的值,則完全可以找到B的值。這並非是可以由A的值計算出B的值,而是邏輯上只能存在一個B的值。
6.3 關系模式的規范化
一、非規范化的關系
當一個表中存在還可以再分的數據項時,這個表就是非規范化的表。非規范化表存在兩種情況:
Ø 表中具有組合數據項(P102表6-4)
Ø 表中具有多值數據項(P103表6-5)
例:
職工號
姓名
工資
基本工資
職務工資
工齡工資
1002
張三
1000
800
200
職工號
姓名
職稱
系名
系辦地址
學歷
畢業年份
001
張三
教授
計算機
1305
大學
研究生
1963
1982
那麼什麼是規范化關系呢?
當一個關系中的所有分量都是不可再分的數據項時,該關系是規范化的。即當表中不存在組合數據項和多值數據項,只存在不可分的數據項時,這個表是規范化的。
二維表按其規范化程度從低到高可分為5級範式(Normal Form),分別稱為1NF、2NF、3NF(BCNF)、4NF、5NF。規范化程度較高者必是較低者的子集,即:
1NF 2NF 3NF BCNF 4NF 5NF
二、第一範式(1NF)
定義1:如果關系模式R中不包含多值屬性,則R滿足第一範式(First Normal Form),記作:
R∈1NF
1NF是對關系的最低要求,不滿足1NF的關系是非規范化的關系。
非規范化關系轉化為規范化關系1NF方法很簡單,只要上表分別從橫向、縱向展開即可。如下表:
職工號
姓名
基本工資
職務工資
工齡工資
1002
張三
1000
800
200
1005
李四
1200
900
150
職工號
姓名
職稱
系名
系辦地址
學歷
畢業年份
1002
張三
教授
計算機
1305
大學
1963
1002
張三
教授
計算機
1305
研究生
1982
1005
李四
講師
信電
2206
大學
1989
上表雖然符合1NF,但仍是有問題的關系,表中存在大量的數據冗餘和潛在的數據更新異常。原因是(職工號,學歷)是右表的碼,但姓名、職稱、系名、系辦地址卻與學歷無關,只與碼的一部分有關。所以上表還需進一步地規范化。
三、第二範式(2NF)
定義1:設X、Y是關系R的兩個不同的屬性或屬性組,且X → Y。如果存在X的某一個真子集X』,使X』 → Y成立,則稱Y部分函數依賴於X,記作:X P→ Y(Partial)。反之,則稱Y完全函數依賴於X,記作:X F→ Y (Full)
定義2:如果一個關系 R∈1NF,且它的所有非主屬性都完全函數依賴於R的任一候選碼,則R屬於第二範式,記作:R∈2NF。
說明:上述定義中所謂的候選碼也包括主碼,因為碼首先應是候選碼,才可以被指定為碼。
例如關系模式:
職工(職工號,姓名,職稱,項目號,項目名稱,項目角色)中
(職工號,項目號)是該關系的碼,而職工號→姓名、職工號→職稱、項目號→項目名稱…
所以(職工號,項目號)P→ 職稱、(職工號,項目號)P→ 項目名稱
故上述職工關系不符合第二範式要求。它存在三個問題:插入異常、刪除異常和修改異常。
其中修改異常是這樣的,當職工關系中項目名稱發生變化時,由於參與該項目的人員很多,每人一條記錄,要修改項目信息,就得對每一個參加該項目的人員信息進行修改,加大了工作量,還有可能發生遺漏,存在著數據一致性被破壞的可能。
可把上述職工關系分解成如下三個關系:
職工(職工號,姓名,職稱)
參與項目(職工號,項目號,項目角色)
項目(項目號,項目名稱)
上述三個關系都符合定義2的要求,所以都符合2NF
推論:如果關系模式R∈1NF,且它的每一個候選碼都是單碼,則R∈2NF
符合第二範式的關系模式仍可能存在數據冗餘、更新異常等問題。如關系
職工信息(職工號,姓名,職稱,系名,系辦地址)
雖然也符合2NF,但當某個系中有100名職工時,元組中的系辦地址就要重復100次,存在著較高的數據冗餘。原因是關系中,系辦地址不是直接函數依賴於職工號,而是因為職工號函數決定系名,而系名函數決定系辦地址,才使得系辦地址函數依賴於職工號,這種依賴是一個傳遞依賴的過程。
所以,上述職工信息的關系模式還需要進一步的規范化。
四、第三範式(3NF)
定義1:在關系R中,X、Y、Z是R的三個不同的屬性或屬性組,如果X→Y,Y→Z, 但Y→X,且Y不是X的子集,則稱Z傳遞函數依賴於X。
定義2:如果關系模式R∈2NF,且它的每一個非主屬性都不傳遞依賴於任何候選碼,則稱R是第三範式,記作:R∈3NF
推論1:如果關系模式R∈1NF,且它的每一個非主屬性既不部分依賴、也不傳遞依賴於任何候選碼,則R∈3NF
推論2:不存非主屬性的關系模式一定為3NF
五、改進的3NF——BCNF(Boyee-Codd Normal Form)
定義:設關系模式R(U,F)∈1NF,若F的任一函數依賴X→Y(Y X)中X都包含了R的一個碼,則稱R∈BCNF。
換言之,在關系模式R中,如果每一個函數依賴的決定因素都包含碼,則R∈BCNF
推論:如果R∈BCNF,則:
Ø R中所有非主屬性對每一個碼都是完全函數依賴;
Ø R中所有主屬性對每一個不包含它的碼,都是完全函數依賴;
Ø R中沒有任何屬性完全函數依賴於非碼的任何一組屬性。
定理:如果R∈BCNF,則R∈3NF一定成立。
證明:(結合傳遞依賴的定義,用反證法)
注意:當R∈3NF時,R未必屬於BCNF。因為3NF比BCNF放寬了一個限制,它允許決定因素不包含碼。例如:
通訊(城市名,街道名,郵政編碼)中:
F={(城市名,街道名)→郵政編碼,郵政編碼→城市名}
非主屬性郵政編碼完全函數依賴於碼,且無傳遞依賴,故屬於3NF,但郵政編碼也是一個決定因素,而且它沒有包含碼,所以該關系不屬於BCNF。
又如:
Teaching(Student,Teacher,Course) 簡記為Teaching(S,T,C)
規定:一個教師只能教一門課,每門課程可由多個教師講授;學生一旦選定某門課程,教師就相應地固定。
F={T→C,(S,C)→T,(S,T) →C}
該關系的候選碼是(S,C)和(S,T),因此,三個屬性都是主屬性,由於不存在非主屬性,該關系一定是3NF。但由於決定因素T沒包含碼,故它不是BCNF。
關系模式Teaching仍然存在著數據冗餘問題,因為存在著主屬性對碼的部分函數依賴問題。
確切地表示:F={T→C,(S,C)P→T,(S,T) P→C}
所以Teaching關系可以分解為以下兩個BCNF關系模式:
Teacher(Teacher,Course) Student(Student,Teacher)
3NF的「不徹底」性,表現在可能存在主屬性對碼的部分依賴和傳遞依賴。
一個關系模式如果達到了BCNF,那麼,在函數依賴范圍內,它就已經實現了徹底的分離,消除了數據冗餘、插入和刪除異常。
6.4 多值依賴和第四範式
一、多值依賴(Multivalued Dependency)
課程C
教員T
參考書B
物理
李勇
普通物理學
物理
李勇
光學原理
物理
李勇
物理習題集
物理
王軍
普通物理學
物理
王軍
光學原理
物理
王軍
物理習題集
數學
李勇
數學分析
數學
李勇
微分方程
數學
李勇
高等代數
數學
張平
數學分析
數學
張平
微分方程
數學
張平
高等代數
計算數學
張平
數學分析
計算數學
張平
計算數學
計算數學
周峰
數學分析
計算數學
周峰
計算數學
課程C
教員T
參考書B
物理
李勇
王軍
普通物理學
光學原理
物理習題集
數學
李勇
張平
數學分析
微分方程
高等代數
計算數學
張平
周峰
數學分析
計算數學
例:學校中某一門課程由多個教員講授,他們使用相同的一套參考書,每個教員可以講授多門課程,每種參考書可以供多門課程使用。下列是用一個非規范化的表來表示教員T,課程C和參考書B之間的關系。
把上表變換成一張規范化的二維表Teaching,如右表
關系模式Teaching(C,T,B)的碼是(C,T,B),即All-Key。因而Teaching∈BCNF。按照上述語義規定,當某門課程增加一名講課教員時,就要向Teaching表中增加與相應參考書等數目的元組。同樣,某門課程要去掉一本參考書時,則必須刪除相應數目的元組。
對數據的增、刪、改很不方便,數據的冗餘也十分明顯。如果仔細考察這類關系模式,會發現它具有一種稱之為多值依賴的數據依賴關系。
定義:設R(U)是屬性集U上的一個關系模式,X,Y,Z是U的子集,且Z=U-X-Y。如果對R(U)的任一關系r,給定一對(x,z)值,都有一組y值與之對應,這組y值僅僅決定於x值而與z值無關。則稱Y多值依賴於X,或X多值決定Y,記作:X→→Y。――
例如,在關系模式Teaching中,對於一個(C,B)值(物理,普通物理學),有一組T值{李勇,王軍},而這組值僅僅決定於課程C上的值(物理)。即對於另一個(物理,光學原理),它對應的T值仍然是{李勇,王軍},所以T的值與B的值無關,僅決定於C的值,即C→→T 。
多值依賴的另一個等價的形式化定義為:
設關系模式R(U),X、Y、Z是U的子集,Z=U-X-Y,r是R的任意一個關系,t1、t2是r的任意兩個元組。如果t1[X]=t2[X],並在r中存在兩個元組t3、t4,使得:
t3[X]=t4[X]=t1[X]
t3[Y]=t1[Y],t3[Z]=t2[Z],
t4[Y]=t2[Y],t4[Z]=t1[Z]
成立,則X→→Y。
換句話說:如果X→→Y在R(U)中成立,則只要在R的任一關系r中存在兩個元組t1、t2在X屬性上的值相等,則交換這兩個元組在Y(或Z)上的值後得到的兩個新元組t3、t4也必是關系r中的元組。
定義中如果Z=Ф(空集),則稱X→→Y為平凡的多值依賴,否則為非平凡的多值依賴。
多值依賴具有如下性質:
1. 對稱性:若X→→Y,則X→→Z,其中Z=U-X-Y
2. 傳遞性:若X→→Y,Y→→Z,則X→→Z-Y
3. 若X→→Y,X→→Z,則X→→YZ
4. 若X→→Y,X→→Z,則X→→Y∩Z
5. 若X→→Y,X→→Z,則X→→Y-Z,X→→Z-Y
多值依賴與函數依賴相比,具有下面兩個基本區別:
(1)多值依賴的有效性與屬性集的范圍有關
若X→→Y在U上成立,則在V(XY V U)上一定成立;反之則不然,即X→→Y在V(V U)上成立,在U上並不一定成立。這是因為多值依賴的定義中不僅涉及屬性組X、Y,而且涉及U中的其餘屬性Z(Z=U-X-Y)。
一般地說,在R(U)上若有X→→Y在V(V U)上成立,則稱X→→Y為R(U)的嵌入型多值依賴。
而在關系模式R(U)中函數依賴X→Y的有效性,僅決定於X和Y這兩個屬性集的值。只要在R(U)的任何一個關系r中,元組在X和Y上的值使得X→Y成立,則X→Y在任何屬性集V(XY V U)上也成立。
(2)若函數依賴X→Y在R(U)上成立,則對於任何Y』 Y 均有X→Y』 成立。而多值依賴X→→Y若在R(U)上成立,卻不能斷言對於任何Y』 Y有X→→Y』 成立。
多值依賴的約束規則:在具有多值依賴的關系中,如果隨便刪去一個元組,就會破壞其對稱性,那麼,為了保持多值依賴關系中的「多值依賴」性,就必須刪去另外的相關元組以維持其對稱性。這就是多值依賴的約束規則。目前的RDBMS尚不具有維護這種約束的能力,需要程序員在編程中實現。
函數依賴可看成是多值依賴的特例,即函數依賴一定是多值依賴。而多值依賴則不一定就有函數依賴。
二、第四範式(4NF)
定義:如果關系模式R∈1NF,對於R的每個非平凡的多值依賴X→→Y(Y X),X含有碼,則稱R是第四範式,即R∈4NF
課程C
教員T
參考書B
物理
李勇
普通物理學
物理
李勇
光學原理
物理
李勇
物理習題集
物理
王軍
普通物理學
物理
王軍
光學原理
物理
王軍
物理習題集
數學
李勇
數學分析
數學
李勇
微分方程
數學
李勇
高等代數
數學
張平
數學分析
數學
張平
微分方程
數學
張平
高等代數
計算數學
張平
數學分析
計算數學
張平
計算數學
計算數學
周峰
數學分析
計算數學
周峰
計算數學
Teaching關系
關系模式R∈4NF時,R中所有的非平凡多值依賴實際上就是函數依賴。因為每一個決定因素中都含有碼,所以R一定屬於BCNF。
4NF實際上就是限制關系模式的屬性間不允許有非平凡,而且非函數依賴的多值依賴存在。反過來說,4NF所允許的非平凡多值依賴實際上是函數依賴。
例題中的Teaching關系屬於BCNF,但它不屬於4NF。因為它的碼是(C,T,B),關系中存在非平凡多值依賴C→→T ,C→→B,但C不包含碼,而只是碼的一部分。
課程C
參考書B
物理
普通物理學
物理
光學原理
物理
物理習題集
數學
數學分析
數學
微分方程
數學
高等代數
計算數學
數學分析
計算數學
計算數學
CB關系
課程C
教員T
物理
李勇
物理
王軍
數學
李勇
數學
張平
計算數學
張平
計算數學
周峰
CT關系
要使Teaching關系符合4NF,必須將其分解為CT(C,T)和CB(C,B)兩個關系模式。如右表:
從表中顯而易見,符合BCNF的關系Teaching仍然存在著數據冗餘,而分解後的關系CT和CB中只有平凡多值依賴,所以符合4NF,它們已經消除了數據冗餘。可以說:BCNF是在只有函數依賴的關系模式中,規范化程度最高的範式,而4NF是在有多值依賴的關系模式中,規范化程度最高的範式。
如果關系模式中存在連接依賴,即便它符合4NF,仍有可能遇到數據冗餘及更新異常等問題。所以對於達到4NF的關系模式,還需要消除其中可能存在的連接依賴,才可以進一步達到5NF的關系模式。
關於連接依賴和5NF的內容,已超出了本課程教學大綱的要求,在此不再介紹。
Ⅳ 誰能說一說資料庫技術的應用與發展
資料庫技術是現代信息科學與技術的重要組成部分,是計算機數據處理與信息管理系統的核心。資料庫技術研究和解決了計算機信息處理過程中大量數據有效地組織和存儲的問題,在資料庫系統中減少數據存儲冗餘、實現數據共享、保障數據安全以及高效地檢索數據和處理數據。
隨著計算機技術與網路通信技術的發展,資料庫技術已成為信息社會中對大量數據進行組織與管理的重要技術手段及軟體技術,是網路信息化管理系統的基礎。本章主要介紹資料庫技術的應用與發展、關系模型的基本概念、關系資料庫的設計理論及資料庫設計方法等內容,是學習和掌握現代資料庫技術的基礎。
1.1 資料庫技術的發展與應用
從20世紀60年代末期開始到現在,資料庫技術已經發展了30多年。在這30多年的歷程中,人們在資料庫技術的理論研究和系統開發上都取得了輝煌的成就,而且已經開始對新一代資料庫系統的深入研究。資料庫系統已經成為現代計算機系統的重要組成部分。
1.1.1 資料庫技術與信息技術
信息技術(Information Technology,IT)是當今使用頻率最高的名詞之一,它隨著計算機技術在工業、農業以及日常生活中的廣泛應用,已經被越來越多的個人和企業作為自己趕超世界潮流的標志枯斗之一。而資料庫技術則是信息技術中一個重要的支撐。沒有資料庫技術,人們在浩瀚的信息沒悉磨世界中將顯得手足無措。
資料庫技術是計算機科學技術的一個重要分支。從20世紀50年代中期開始,計算機應用從科學研究部門擴展到企業管理及政府行政部門,人們對數據處理的要求也越來越高。1968年,世界上誕生了第一個商品化的信息管理系統IMS(Information Management System),從此,資料庫技術得到了迅猛發展。在互聯網日益被人們接受的今天,Internet又使資料庫技術、知識、技能的重要性得到了充分的放大。現在資料庫已經成為信息管理、辦公自動化、計陸謹算機輔助設計等應用的主要軟體工具之一,幫助人們處理各種各樣的信息數據。
1.1.2 資料庫技術的應用及特點
資料庫最初是在大公司或大機構中用作大規模事務處理的基礎。後來隨著個人計算機的普及,資料庫技術被移植到PC機(Personal Computer,個人計算機)上,供單用戶個人資料庫應用。接著,由於PC機在工作組內連成網,資料庫技術就移植到工作組級。現在,資料庫正在Internet和內聯網中廣泛使用。
20世紀60年代中期,資料庫技術是用來解決文件處理系統問題的。當時的資料庫處理技術還很脆弱,常常發生應用不能提交的情況。20世紀70年代關系模型的誕生為資料庫專家提供了構造和處理資料庫的標准方法,推動了關系資料庫的發展和應用。1979年,Ashton-Tate公司引入了微機產品dBase Ⅱ,並稱之為關系資料庫管理系統,從此資料庫技術移植到了個人計算機上。20世紀80年代中期到後期,終端用戶開始使用區域網技術將獨立的計算機連接成網路,終端之間共享資料庫,形成了一種新型的多用戶數據處理,稱為客戶機/伺服器資料庫結構。現在,資料庫技術正在被用來同Internet技術相結合,以便在機構內聯網、部門區域網甚至WWW上發布資料庫數據。
1.1.3 資料庫技術發展歷史
數據模型是資料庫技術的核心和基礎,因此,對資料庫系統發展階段的劃分應該以數據模型的發展演變作為主要依據和標志。按照數據模型的發展演變過程,資料庫技術從開始到現在短短的30年中,主要經歷了三個發展階段:第一代是網狀和層次資料庫系統,第二代是關系資料庫系統,第三代是以面向對象數據模型為主要特徵的資料庫系統。資料庫技術與網路通信技術、人工智慧技術、面向對象程序設計技術、並行計算技術等相互滲透、有機結合,成為當代資料庫技術發展的重要特徵。
1. 第一代資料庫系統
第一代資料庫系統是20世紀70年代研製的層次和網狀資料庫系統。層次資料庫系統的典型代表是1969年IBM公司研製出的層次模型的資料庫管理系統IMS。20世紀60年代末70年代初,美國資料庫系統語言協會CODASYL(Conference on Data System Language)下屬的資料庫任務組DBTG(Data Base Task Group)提出了若干報告,被稱為DBTG報告。DBTG報告確定並建立了網狀資料庫系統的許多概念、方法和技術,是網狀資料庫的典型代表。在DBTG思想和方法的指引下資料庫系統的實現技術不斷成熟,開發了許多商品化的資料庫系統,它們都是基於層次模型和網狀模型的。
可以說,層次資料庫是資料庫系統的先驅,而網狀資料庫則是資料庫概念、方法、技術的奠基者。
Ⅳ 自考計算機信息管理科目:資料庫及其應用課程簡介
《資料庫原理及應用》以目前比較流行的大型關系型資料庫SQLServer為載體,向學生講述了大型關系資料庫的概念、管理、設計和開發。本課程主要介紹資料庫基礎知識和SQLServer資料庫管理系統這兩個方面。資料庫基礎知識主要介紹資料庫組織、管理和使用的一般知識,包括數據模型、資料庫結構、資料庫系統、資料庫設計、關系運算、關系規范化、關系查詢(SQL語言)等內容;SQLServer資料庫管理系統主要介紹表、視圖、索引、存儲過程、觸發器、數據安全措施、游標與程序設計等內容。通過本課程的學習,要求學生能從實用性的角度出發理解並掌握資料庫的安全性、並發控制和恢復技術,能熟練的編寫基本的SQL語句,掌握索引、數據完整性、視圖、存儲過程、觸發器等概念及使用方法,並能進行資料庫的設計、開發與管理。但是,學習本課程前要求學生對計算機系統的構成和Windows操作界面的使用有所了解,掌握一種高級程序設計語言;在使用VB、Delphi、PB等軟體開發工具進行應用系統開發時,通常都需要資料庫知識的支持。碼租
本課程理論性、實踐性和應用性都很強。在理論方面涉及到集合理論、關系理論、資料庫設計理論等;實踐性強體現為:資料庫設計理論是隨著計算機技術遲明兆和人們的設計實踐不斷地豐富和發展的,將不斷地產生出新的設計技術和理論;應用性強是指:現在每一個實用的計算機信息管理系統幾乎都涉及到資料庫應用,通常為後台應用。每個企業都需要專門進行計算機信息處理人員或專業的信息管理系槐蠢統對信息進行收集、存儲、處理及運用。因此自考計算機信息管理專業受到報考考生的青睞,越來越多考生選擇報考自考計算機信息管理專業,一方面可以掌握專業知識技能,一方面能拿到這所名牌高校的畢業證書。想要報考自考計算機信息管理專業的考生可以通過網上報名或現場報名的形式進行報考。詳情可咨詢獵考網
Ⅵ 資料庫原理與應用的內容簡介
該書以關系資料庫系統為核心,系統全面地闡述了資料庫系統的基本概念、基本原理和應用技術,主要內容包括資料庫技術概述、關系資料庫、關系資料庫的標准語言SQL、關系資料庫設計、資料庫保護、網路資料庫、網路資料庫管理系統SQL Server 2000、分布式資料庫系統、XML資料庫等。
本書概念清楚、重點突出、章節安排合理,理論與實踐結合緊密。每章配以豐富的習題、案例及實驗,有助於讀者加深對內容的理解、掌握並鞏固概念;案例為讀者提供了真實的資料庫應用場景,有助於讀者從實際應用的角度出發,聯系所學理論,掌握所學內容;而實驗為讀者提供了將理論與實踐相結合的具體上機操作途徑,最終鞏固所學內容。習題、案例與實驗的設計也是本書一個比較突出的特點。
本書既可作為高等學校本科計算機專業(信息技術方向)、信息管理與信息系統專業及相關專業資料庫課程的教學用書,也可作為從事信息領域工作的科技人員的自學參考書。
Ⅶ 資料庫原理及應用
《資料庫原理及應用》是2012年清華大學出版社出版的圖書,作者是雷景生。
《資料庫原理及應用》較系統全面地闡述了資料庫系統的基礎理論、資料庫系統是在計算機系統中引入資料庫後的系統構成資料庫系統,基本技術和基本方法,共分11章和2個附錄。
既可以作為高等院校計算機、軟體工程、信息安全、信息管理與信息系統、信息與計算科學等相關專業本科生資料庫課程的教材,也可以作為電氣工程相關專業研究生資料庫課程及電力企業信息化教材。
Ⅷ 什麼是關系資料庫其特點是什麼
資料庫系統DBS(Data Base System,簡稱DBS)通常由軟體、資料庫和數據管理員組成。其軟體主要包括操作系統、各種宿主語言、實用程序以及資料庫管理系統。資料庫由資料庫管理系統統一管理,數據的插入、修改和檢索均要通過資料庫管理系統進行。數據管理員負責創建、監控和維護整個資料庫,使數據能被任何有權使用的人有效使用。資料庫管理員一般是由業務水平較高、資歷較深的人員擔任。
資料庫系統
資料庫系統的個體含義是指一個具體的資料庫管理系統軟體和用它建立起來的資料庫;它的學科含義是指研究、開發、建立、維護和應用資料庫系統所涉及的理論、方法、技術所構成的學科。在這一含義下,資料庫系統是軟體研究領域的一個重要分支,常稱為資料庫領域。
資料庫系統是為適應數據處理的需要而發展起來的一種較為理想的數據處理的核心機構。計算機的高速處理能力和大容量存儲器提供了實現數據管理自動化的條件。
資料庫研究跨越於計算機應用、系統軟體和理論三個領域,其中應用促進新系統的研製開發,新系統帶來新的理論研究,而理論研究又對前兩個領域起著指導作用。資料庫系統的出現是計算機應用的一個里程牌,它使得計算機應用從以科學計算為主轉向以數據處理為主,並從而使計算機得以在各行各業乃至家庭普遍使用。在它之前的文件系統雖然也能處理持久數據,但是文件系統不提供對任意部分數據的快速訪問,而這對數據量不斷增大的應用來說是至關重要的。為了實現對任意部分數據的快速訪問,就要研究許多優化技術。這些優化技術往往很復雜,是普通用戶難以實現的,所以就由系統軟體(資料庫管理系統)來完成,而提供給用戶的是簡單易用的資料庫語言。由於對資料庫的操作都由資料庫管理系統完成,所以資料庫就可以獨立於具體的應用程序而存在,從而資料庫又可以為多個用戶所共享。因此,數據的獨立性和共享性是資料庫系統的重要特徵。數據共享節省了大量人力物力,為資料庫系統的廣泛應用奠定了基礎。資料庫系統的出現使得普通用戶能夠方便地將日常數據存入計算機並在需要的時候快速訪問它們,從而使計算機走出科研機構進入各行各業、進入家庭。
資料庫系統有大小之分,大型資料庫系統有SQL Server、Oracle、DB2等,中小型資料庫系統有Foxpro、Access。