數據庫系統 --- 關系模型

一、關系模型的數據結構以及形式化定義

? ? ? ? 1.關系

? ? ? ? 域:一組具有相同數據結構的值的集合。

? ? ? ? 笛卡爾積:域上的一種集合運算。多個集合做笛卡爾積的結果是每個集合取一個元素組合得到的一個新的集合。

? ? ? ? 域的基數:一個域上允許的不同取值的個數。

? ? ? ? 關系:在關系模型D1、D2、D3、...的笛卡爾積是沒有實際語意的,只有它的某個真子集才有實際含義。

????????給定一組域D1,D2,D3,…,Dn,允許其中某些域是相同的,D1,D2,D3,…,Dn。的笛卡兒積D1×D2xD3×...Dn的子集稱為這組域上的關系,表示為R(D1,D2,…,Dn)。

????????這里R表示關系名,n是關系的目或度(degree)。

????????當n=1時,稱該關系為一元關系(unary?relation)或單元關系、單目關系。
????????當n=2時,稱該關系為二元關系(binary?relation)或二目關系。

????????關系中的每個元素是關系中的元組,通常用t來表示。

????????關系是笛卡兒積的有限子集,所以關系是一張二維表,表的每一行對應一個元組,表的每一列對應一個域。由于域可以相同,為了加以區分,必須對每一列起一個名字,稱為屬性。n目關系必有n個屬性。

????????關系可以有三種類型:基本關系 (通常又稱為基本表或基表)、查詢結果視圖。其中,基本關系是實際存在的表,它是實際存儲數據的邏輯表示;查詢結果是查詢執行產生的結果對應的臨時表;視圖是由基本表或其他視圖導出的虛表,不存儲實際數據。

????????基本關系具有6條性質:①.列是同質的(homogeneous),即每一列中的分量是同一類型的數據,來自同一個域。②.不同的列可出自同一個域,稱其中的每一列為一個屬性,不同的屬性要給予不同的屬性名。③.列的順序無所謂,即列的次序可以任意交換。由于列順序是無關緊要的,因此在許多實際的關系數據庫產品中增加新屬性時,永遠是將其插至最后。④.任意兩個元組的碼不能取相同的值。⑤.行的順序無所謂,即行的次序可以任意交換。⑥.分量必須取原子值,即每一個分量都必須是不可分的數據項。

????????關系模型要求關系必須滿足一定的規范條件,其最基本的一條就是元組的每一個分量必須是一個不可分的數據項。

????????規范化的關系簡稱為范式(normal?form,?NF)

? ? ? ? 2.關系模式

? ? ? ? 關系模式是“型”,關系是“值”。

????????關系的描述稱為關系模式(relation?schema)。它可以形式化地表示為

????????R(U,D,DOM,F)

????????其中R為關系名,U為組成該關系的屬性的屬性名集合,D為U中屬性所來自的域,DOM為屬性向域的映像集合,F為屬性間數據依賴關系的集合。

????????關系模式通常簡記為

R(U)或者
R(A1,A2,…,An)

????????其中R為關系名,A,A,…,A,為屬性名;而域名及屬性向域的映像則常直接說明為屬性的類型、長度。

????????若關系模式中的某一個屬性或一組屬性的值能唯一地標識一個元組,而它的真子集不能唯一地標識一個元組,則稱該屬性或屬性組為候選碼(candidate?key)。

????????若一個關系有多個候選碼,則選定其中一個為主碼(primary?key),或稱主鍵。

????????候選碼的諸屬性稱為主屬性(prime?atnbute)。

????????不包含在任何候選碼中的屬性稱為非主屬性(non?prime?attribute)或非碼屬性(non-key?atribute)。

????????在最簡單的情況下,候選碼只包含一個屬性。在最極端的情況下,關系模式的所有屬性是這個關系模式的候選碼,稱為全碼(all-key)。

????????關系是關系模式在某一時刻的狀態或內容。

????????關系模式是靜態的、穩定的,而關系是動態的、隨時間不斷變化的,這是因為關系操作在不斷地更新著數據庫中的數據。

????????在實際工作中,人們常常把關系模式和關系都籠統地稱為關系。

? ? ? ? 3.關系數據庫

????????支持關系模型的數據庫系統稱為關系數據庫系統。在關系模型中,實體以及實體間的聯系都是用關系來表示的。

????????例如,“學生”實體、“課程”實體、學生與課程之間選修課程的多對多聯系都可以分別用一個關系模式來描述。

????????“學生”關系模式:Student(Sno,Sname,Ssex,Sbirthdate,Smajor),包括學號、姓名、性別、出生日期和主修專業等屬性。
????????“課程”關系模式:Course(Cno,Cname,Ccredit,Cpno),包括課程號、課程名、學分、先修課(直接先修課)等屬性。
????????“學生選課”關系模式:SC(Sno,Cno,Grade,Semester,Teachingclass),包括學號、課程號、成績、開課學期、教學班等屬性。

????????在一個關系數據庫中,某一時刻所有關系模式對應的關系的集合構成一個關系數據庫。

????????關系數據庫也有類型和值之分。

????????關系數據庫的類型就是關系數據庫中所有關系模式的集合,是對關系數據庫的描述,通常稱為關系數據庫模式。

????????關系數據庫的值是這些關系模式在某一時刻對應的關系的集合,通常將為關系數據庫。

? ? ? ? 4.關系模型的存儲結構

????????關系模型是關系數據的邏輯結構,用關系數據定義語言描述。例如關系數據庫標準語言SQL。

????????支持關系模型的關系數據庫管理系統(relational?database?management?system,?RDBMS)將以一定的組織方式存儲和管理數據,即設計和實現關系模型的存儲結構,這是關系數據庫管理系統的重要職責之一。

????????例如,有的關系數據庫管理系統中一個表對應一個操作系統文件,將物理數據組織的許多任務交給操作系統完成;有的關系數據庫管理系統則從操作系統那里申請若干個大的文件,自己劃分文件空間,組織表、索引等存儲結構并進行存儲管理。

二、關系操作

? ? ? ? 1.基本的關系操作

????????關系模型中常用的關系操作包括查詢(query)操作和更新操作兩大部分,而更新操作又可分為插入(insert)、刪除(delete)、修改(update)等操作。

? ? ? ? 關系的查詢表達能力很強,因此查詢操作是關系操作中最主要的部分。查詢操作又可進一步分為選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、差(difference)、交(intersection)、笛卡兒積等操作。其中選擇、投影、并、差、笛卡兒積是5種基本操作,其他操作可以用基本操作來定義和導出,就像乘法可以用加法來定義和導出一樣。?

????????關系操作的特點是集合操作方式,即操作的對象和結果都是集合。這種操作方式也稱為成組數據處理(set-at-a-time?processing),即一次一個集合的操作方式。相應地,層次模型和網狀模型的數據操作方式則為一次一個記錄(record-at-a-time)的方式。

????????這里強調一下,關系操作的所有輸入和輸出均是關系,包括關系操作的中間結果也是關系。

????????2.關系數據語言的分類

????????早期的關系操作能力通常用代數方式或邏輯方式來表示,分別稱為關系代數(relational?al-gebra)和關系演算(relational?calculus)。

????????關系代數用對關系的運算來表達查詢要求,關系演算則用謂詞來表達查詢要求。

????????關系演算又可按謂詞變元的基本對象是元組變量還是域變量分為元組關系演算和域關系演算。

????????一個關系數據語言能夠表示關系代數可以表示的查詢,稱為具有完備的表達能力,簡稱關系完備性。

????????此外,還有一種結構化查詢語言(structured?query?language,?SQL)。SQL不僅具有豐富的查詢功能,而且具有數據定義和數據控制功能,是集數據查詢語言(data?query?language,?DQL)、數據定義語言(DDL)、數據操縱語言(DML)和數據控制語言(data?control?language,?DCL)于一體的關系數據語言。它充分體現了關系數據語言的特點和優點,自20世紀80年代起成為關系數據庫的標準語言。

三、關系的完整性

????????關系模型的完整性約束是對關系的其種約束條件。也就是說關系的值隨著時間變化時應該滿足一些的約束條件,這些約束系件實際上是現實世界的要求。任何關系在任何時刻都要滿足這些語義約束。

????????關系模型中有三類完整性約束:實體完整性(cntiy?iteoity)、參照完整性(refecntial?inte
2)和用戶定義的完整性(ir-?Ihfind?imegrity)。

????????其中實體完整性和參照完整性是關系模型必級滿足的完整性約束,被稱作是關系的兩個不變性,應該由關系系統自動支持。用戶定義的完整性是應用領域需要遵循的約束條件,體現了具體領域中的語義約束。

? ? ? ? 1.實體完整性

????????關系數據庫中每個元組應該是可區分的,是唯一的。這樣的約束條件用實體完整性來保證。

????????實體完整性約束:若屬性(指一個或一組屬性)A是基本關系R的主屬性,則A不能取空值(null?value)。其中空值就是“不知道”或“不存在”或“無意義”的值。

????????對于實體完整性約束說明:
????????????????①.實體完整性約束是針對基本關系而言的。一個基本表通常對應現實世界的一個實體集。例如,“學生”關系對應學生的集合。
????????????????②.現實世界中的實體是可區分的,即它們具有某種唯一性標識。例如,每個學生都是獨立的個體,是不一樣的。
????????????????③.關系模型中以主碼作為唯一性標識。
????????????????④.主碼中的屬性不能取空值,如果取了空值,就說明存在某個不可標識的實體,即存在不可區分的實體。

? ? ? ? 2.參照完整性

????????現實世界中的實體之間往往存在某種聯系,在關系模型中實體及實體間的聯系都是用關系來描述的,這樣就自然存在著關系與關系間的引用。

????????定義? 設F是基本關系R的一個或一組屬性,但不是關系R的碼,Ks 是基本關系S的主碼。如果F與Ks相對應,則稱F是R的外碼(foreign key), 并稱基本關系R為參照關系(relerencing relation), 基本關系S為被參照關系( referenced relation) 或目標關系( targetrlation)。關系R和S不一定是不同的關系。顯然,目標關系S的主碼K。和參照關系R的外碼F必須定義在同一個(或同一組)域上。

? ? ? ? 外碼并不一定要與相應的主碼同名。

????????參照完整性約束就是定義外碼與主碼之間的引用規則。

? ? ? ? 參照完整性約束:若屬性( 或屬性組)F是基本關系R的外碼,它與基本關系S 的主碼K相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值 必須:

????????①或者取空值(F的每個屬性值均為空值)。

????????②或者等于S中某個元組的主碼值。

? ? ? ??在參照完整性約束中,R與S可以是同一個關系。

? ? ? ? 3.用戶定義完整性

????????任何關系數據庫系統都應該支持實體完整性和參照完整性,這是關系模型所要求的。除此
之外,不同的關系數據庫根據其應用場景不同,往往還需要一些特殊的約束條件。 用戶定義的
完整性就是針對某一具體關系數據庫的約束條件,它反映某一縣體應用所涉及的數據必須滿足
的語義要求。例如,某個屬性必須取唯一值,某個非主屬性不能取空值等。
????????關系模型應提供定義和檢驗這類完整性約束的機制,以便用統一的系統的方法處理它們,
而不需要由應用程序承擔這一功能。

四、關系代數

? ? ? ? 關系代數是一種抽象的查詢語言,它用對關系的運算來表達查詢。

? ? ? ? 運算對象、運算符、運算結果是運算的三大要素。

????????關系代數的運算對象是關系,運算結果亦為關系。關系代數用到的運算符包括兩類:集合運算符和專門的關系運算符。

? ? ??

????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215612.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mac 安裝anaconda和lightgbm

mac安裝anaconda不要去清華大學的anaconda的安裝包列表去下載安裝包, 去[官網](Free Download | Anaconda)下載, 清華的版本太老了, 老到臉conda 安裝lightgbm都不只支持 安裝好anaconda 后, 能用conda install xxx 的盡量不用pip install 其他的不知道, 用pip install ligh…

護眼臺燈為什么護眼?適合備考使用的臺燈推薦

臺燈是大家生活中必不可少的一盞燈具,尤其是當夜幕降臨時,許多仍然需要工作、或者學習的人,都要使用臺燈來提供充足的照明環境。如今隨著生活的高度發展,大家對臺燈的要求也愈發精進了一步,不僅需要能夠提供照明的&…

報表控件FastReport .NET v2024功能演示—更改圖圖片形狀

報表生成器FastReport .NET 是適用于.NET Core 3,ASP.NET,MVC和Windows窗體的全功能報告庫。使用FastReport .NET,您可以創建獨立于應用程序的.NET報告。 FastReport .net下載(qun:585577353)https://www.e…

webpack的使用

一、5 大核心概念 entry(入口) 指示 Webpack 從哪個文件開始打包 output(輸出) 指示 Webpack 打包完的文件輸出到哪里去,如何命名等 loader(加載器) webpack 本身只能處理 js、json 等資源…

配電箱安全檢查

配電箱怎么檢查,如何識破電箱安全隱患? (1)一物一碼:每個配電箱都有獨一無二標識二維碼,巡檢人員到達現場掃碼即可填寫巡檢記錄,查看配電箱的參數、負責人、操作規則等信息; &#x…

如何用PHP寫一個1688平臺下的商品API接口代碼?

一 定義 PHP(全稱:Hypertext Preprocessor)是一種廣泛用于開發Web應用程序的服務器端腳本語言。它是一種開源的編程語言,特別適用于快速構建動態網頁和Web應用程序。 在PHP中,您可以使用1688商品API接口來獲取和操作…

韻達速遞查詢,韻達速遞單號查詢,對需要的單號記錄進行標記

批量查詢韻達速遞單號的物流信息,對需要的單號記錄進行標記。 所需工具: 一個【快遞批量查詢高手】軟件 韻達速遞單號若干 操作步驟: 步驟1:運行【快遞批量查詢高手】軟件,并登錄 步驟2:點擊主界面左上角…

starknet學習資料匯集這一篇就夠了(持續更新)

文章目錄 官方資料wtf starknet學習資料Starknet Astro 社區官方資料 starknet-foundry 官方github:https://github.com/foundry-rs/starknet-foundry 官方文檔:https://foundry-rs.github.io/starknet-foundry/ https://book.cairo-lang.org/zh-cn/index.html https://boo…

數據結構:第9關:刪除鏈表中滿足區間值的結點

任務描述編程要求 輸入輸出測試說明來源 任務描述 本關任務:利用單鏈表表示一個遞增的整數序列,刪除鏈表中值大于等于mink且小于等于maxk的所有元素(mink和maxk是給定的兩個參數,其值可以和表中的元素相同,也可以不同…

銀行如何篩選跨網文件交換產品,提升業務效率?

銀行業在我國經濟發展和社會運轉中承載著舉足輕重的作用和意義,進入互聯網時代,網絡的運算和數據管理能力助力銀行業高速發展,但同樣帶來了一些網絡安全隱患,網絡攻擊、數據竊取、敏感信息泄露等問題影響著銀行業的根基。為響應和…

python作業題百度網盤,python123作業答案

大家好,小編來為大家解答以下問題,python作業題百度網盤,python123作業答案,今天讓我們一起來看看吧! 完整項目分享: 鏈接: https://pan.baidu.com/s/1CTMOgLYteLrWRaRnouB0SQ?pwd12hf 提取碼: 12hf &…

[Linux 基礎] Linux使用git上傳gitee三板斧

文章目錄 1、使用git1.1 安裝git1.2 在Gitee上創建項目1.2.1 使用Gitee創建項目1.2.2 上傳本地代碼到遠端倉庫 1.3 git上傳三板斧1.3.1 三板斧第一招:git add1.3.2 三板斧第二招:git commit1.3.3 三板斧第三招:git push 1、使用git 1.1 安裝…

【教3妹學編程-算法題】下一個更大元素 IV

3妹:“太陽當空照,花兒對我笑,小鳥說早早早,你為什么背上炸藥包” 2哥 :3妹,什么事呀這么開發。 3妹:2哥你看今天的天氣多好啊,陽光明媚、萬里無云、秋高氣爽,適合秋游。 2哥&#x…

商城免費搭建之java商城 java電子商務Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 鴻鵠云商

鴻鵠云商 SAAS云產品概述 【SAAS云平臺】打造全行業全渠道全場景的SaaS產品,為店鋪經營場景提供一體化解決方案;門店經營區域化、網店經營一體化,本地化、全方位、一站式服務,為多門店提供統一運營解決方案;提供豐富多…

使用C++和雙指針算法移除數組中的元素,且原地移除,不使用額外的空間

輸入一個數組nums和一個值val&#xff0c;在該數組中&#xff0c;凡是與val相等的元素全部移除&#xff0c;并最終輸出該數組&#xff0c;C代碼如下&#xff1a; #include<iostream> #include<vector> #include<ctime>//計算代碼所需要的時間 using namespac…

qt 容器QVector,QMap,QHash的常見使用與該迭代器的簡單介紹

一. QVector容器是一個動態數組&#xff0c;可以容納任意數量的元素,在相鄰的內存中存儲給定的數據類型作為一組數據,在QVector前部或中間位置插入元素都會導致內存中大量的數據元素移動,這使得操作速度會減慢.可使用迭代器對這組數據進行訪問. 和其他的容器類型類似,QVector…

AE無法連接到ME怎么辦?

最近學習了一下adobe的系列軟件 ae是2018的 me是2023的 本來想用me來做渲染的 發現鏈接不上 試了一下重裝ae&#xff0c;升級版本到2023 鏈接還是不行 幸好看了這篇博客解決了我的問題&#xff01;&#xff01; AE無法連接到ME怎么辦? AE和ME沒有裝在一個盤無法識別的 用了第二…

【Netty為什么適合做網絡編程】

Netty為什么適合做網絡編程 描述優點 描述 Netty是由JBOSS提供的一個Java開源框架。Netty提供異步的、基于事件驅動的網絡應用程序框架&#xff0c;用以快速開發高性能、高可靠性的網絡IO程序。Netty主要用來做網絡通信&#xff0c;一般可以用來做RPC框架的通信工具、實現即時…

特發性震顫的嚴重程度如何評估?

特發性震顫的嚴重程度評估是一個相對主觀和復雜的過程&#xff0c;需要醫生綜合考慮患者的多種癥狀和體征進行判斷。通常&#xff0c;評估特發性震顫的嚴重程度會考慮以下幾個方面&#xff1a; 一、震顫的頻率和強度 評估特發性震顫的嚴重程度時&#xff0c;首先要觀察患者震…

RS485網關如何采集傳感器和儀器儀表數據-天拓四方

在自動化生產和監測系統中&#xff0c;傳感器和儀器儀表扮演著重要的角色&#xff0c;它們可以收集各種數據&#xff0c;如溫度、壓力、流量等&#xff0c;并對這些數據進行必要的分析和處理。然而&#xff0c;如何有效地采集這些數據是一個關鍵問題。RS485網關是一種常見的設備…