資料庫基礎 關係數據模型

来源:https://www.cnblogs.com/gaoguowen/archive/2019/09/18/11542457.html
-Advertisement-
Play Games

概敘 關係資料庫的基本特征是使用關係模型的組織數據,20世紀80年代以後,在商用DBMS中,關係模型逐步取代早期的網狀模型和層次模型。 關係數據模型 作為數據模型,關係模型包含三個組成要素:關係數據結構、關係操作集合和關係完整性約束。 關係數據結構 重點 結構只包含單一的數據結構(關係),現實世界的 ...


概敘

關係資料庫的基本特征是使用關係模型的組織數據,20世紀80年代以後,在商用DBMS中,關係模型逐步取代早期的網狀模型和層次模型。

關係數據模型

作為數據模型,關係模型包含三個組成要素:關係數據結構、關係操作集合和關係完整性約束。

關係數據結構

結構只包含單一的數據結構(關係),現實世界的實體與實體間的各種聯繫均用關係來表示。關係模型是吧資料庫比賽為關係的集合,並以二維表格的形式組織數據。

錄入一張二維表格如:

學號 姓名 性別 籍貫 民族 ...
001 張三 陝西 ...
002 李四 湘西 ...
003 王五 河北 ...
004 趙六 東北 ...
...

基本術語

  1. 表(Table):也稱為關係,是二維數據結構,由表名、構成表的各列及若幹行數據組成,每個表由唯一的表名,每一行數據描述一條具體的記錄值。
  2. 關係(Relation):一個關係邏輯上對應一張二維表,可以為每個關係取一個名稱來標識。關係有三種類型:基本關係(基表,實際存在的表,是實際存儲數據的邏輯表示)、查詢表(查詢結構對應的表)和視圖表(由基本表或其他視圖導出的表,不對應實際存儲的數據)。
  3. 列(Column):稱為欄位(Field)或屬性(Attribute)。每一列有一個名稱,表示實體屬性,具有相同數據類型。在一個資料庫中,表名,欄位名必須唯一,不同的表可以有相同的欄位名,且命名須有意義,簡單。
  4. 屬性(Attribute):表列即屬性,給屬性起名即屬性名。屬性的個數稱為關係的元或度。列值為屬性值;取值範圍為值域。
  5. 行(Row):稱為元組(Tuple)或記錄(Record)。表中的數據按行存儲,一行數據即一條記錄或元組,每行又若幹個欄位值組成。
  6. 分量(Component):元組的屬性值為分量
  7. 碼/鍵(key):在一個關係中,有一個屬性或屬性組,能用來標識該關係的元組,則為該關係的碼或鍵。
  8. 超碼或超鍵(Super Key):從碼中去除某個屬性,它仍然是對應關係的碼,則為超碼;每個關係至少有一個預設的超碼(所有屬性的集合)。
  9. 候選碼或鍵(Candidate Key):關係中的一個碼或鍵中,不能去除任何一個屬性,否則它就不是對應關係表的碼或鍵,則此碼為候選碼(鍵),它是關係表中最小的超碼或超鍵。
  10. 主鍵/碼(Primary Key):在一張關係表中的若幹候選鍵中指定一個用來唯一標識該關係的元組,則該候選鍵為主鍵。
  11. 全鍵/碼(All-Key):一個關係中所有的屬性集合是是這個關係是主鍵/碼,則為全鍵/碼。
  12. 主/非屬性(Primary Attribute/Nonprimary Attribute):關係中包含任何一個候選鍵/碼的屬性為主/碼屬性,不包含任何一個候選碼的屬性為非主/碼屬性。
  13. 外鍵/碼(Foreign Key):關係中的某個屬性或屬性組不是這個關係的主鍵或候選鍵,而是另一個關係的主鍵,則該屬性(屬性組)為關係的外鍵/碼。
  14. 參照關係(Referencing Relation)/被參照關係(Referenced Relation):參照關係也稱從關係,被參照關係又稱主關係,它們指以外碼相關聯的兩個關係。而以外碼為主碼的關係為被參照關係;外碼所在的關係為參照關係,這種聯繫通常是一對多關聯。
  15. 域(Domain):指屬性取值範圍。
  16. 數據類型(Data Type):每列(元關係)都有相應的數據類型,用於限制該列中存儲的數據。
  17. 關係模式(Relation Schema):通數據模型一樣,資料庫也有型和值,在關係資料庫中關係模式是型,關係是值,關係模式是對關係的描述。
中文欄位名 數據類型 寬度 ...
學號 字元類型 8 ...
姓名 字元類型 10 ...
身份證 字元類型 18 ...
... ... ... ...

上表是學生基本星系登記表關係的結構定義,關係則是元組的集合,是關係模式在某一時刻的狀態或內容

實際工作中關係模式和關係統稱為關係。

18.關係資料庫(Relation Database):以關係模型作為數據的邏輯模型,並採用關係作為數據組織方式的一類資料庫,其資料庫操作建立在關係代數的基礎上。在給定的應用領域中,所以關係的集合構成一個關係資料庫。
在實際的資料庫應用系統中,一般使用英文作為表名、欄位名等。因為在編寫資料庫應用程式時,表名、欄位名會作為變數名,使用中文不方便標識,且有些DBMS不能很好的相容中文。
因此上表應該變更為:

含義 欄位名 數據類型 寬度 ...
學號 studentNo 字元類型 8 ...
姓名 sutdentName 字元類型 10 ...
身份證 studentId 字元類型 18 ...
... ... ... ... ...

關係資料庫對關係的限定:

  • 每個屬性都不可分解,是關係資料庫對關係的最基本的限定,要求關係的每個分量必須是一個不可分的數據項,即不允許表中有表
  • 一個關係對應一種關係模式,模式中的屬性的數據類型及屬性的個數是相對固定的
  • 每個關係模式中的屬性必須命名,在同一模式中,屬性名必須是不同的
  • 同一關係中不允許出現候選碼或鍵值完全相同的元組
  • 關係中的元組順序是可任意交換
  • 關係中的屬性順序可以任意交換

關係操作集合

基本的關係操作

增(插入 Insert)、刪(Delete)、改(Update)、查(Query)。關係的查詢表達能力是關係操作最主要的部分。查又可分為選擇、投影、連接、除、並、差、交、笛卡爾積。集合操作方式(操作的對象和結果都是集合)。又稱為一次一集合(set-at-a-time)

關係數據語言的分類

通過關係語言實現關係操作。用戶不必請求DBM為其建立特殊的存取路徑,由 DBMS 的優化機制來完成。

  1. 代數方式:主要有關係代數,通過對關係的操作來表達查詢要求
  2. 邏輯方式:主要有關係演算,是用謂詞來表達查詢要求,關係演算又按謂詞變元的基本對象(元組變數或域變數),分為元組關係演算和域關係演算。
  3. 介於前兩者之間的結構化查詢語言(Structured Query Language,SQL):SQL具有豐富的查詢功能、數據定義和數據控制功能。集查詢、數據定義語言(DDL)、數據操作語言(DML)和數據控制語言(Data Control Language, DCL)於一體;是關係資料庫的標準語言。

關係代數

關係代數是關係操作語言中的傳統表示方式,以集合代數為基礎發展而來。任何一種操作都是將一定的操作符作用域一定的操作對象上,得到預期的操作結果。
而對象和結果均為關係。關係代數直接應用關係的運算來表達操作的目的,運算符包括集合運算符和專門的關係運算符。

關係代數的運算符
運算符 含義
集合運算符
× 笛卡爾積
專門的關係運算符 σ 選擇
π 投影
連接
÷
比較操作符 > 大於
大於等於
< 小於
小於等於
等於
不等於
比較操作符 ¬

關係代數操作經過有限次複合的式子稱為關係代數操作表達式(關係代數表達式),可使用表達式表示所需要執行的各種數據查詢和修改處理,所有關係代數是一種抽象的查詢語言,通過對關係的操作來表達查詢。

按運算符分類,關係代數操作可分為:傳統的集合運算和專門的關係運算

集合運算

傳統集合運算是二目運算,將關係看成元組集合,運算從行的角度來進行,具有 並、差、交、迪卡爾積四種運算。
example:

表 T1

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0001 張三 N101
0002 王二 N101
0003 李梅 C101

表 T2

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0004 劉八 D101
0005 趙二 B201
0003 李梅 C101
並(UNION)

表T1 和 表T2 使用並運算產生一個新表T3,(T3 = T1 ∪ T2)它是由T1和T2所有不同元組所組成,且 T1和T2屬性個數、值域相同。下表為 T1 ∪ T2的結果
表 T3

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0001 張三 N101
0002 王二 N101
0003 李梅 C101
0004 劉八 D101
0005 趙二 B201
差(DIFFERENCE)

表T1 和 表T2 使用差運算產生一個新表T4,(T4 = T1 - T2)它有T1的所有元組但不包含T2的元組,且 T1和T2屬性個數、值域必須相同。下表為 T1 - T2的結果

表 T4

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0001 張三 N101
0002 王二 N101
交(INTERSECTION)

表T1 和 表T2 使用交運算產生一個新表T5,(T5 = T1 ∩ T2)它同時包含T1和T2相同的所有元組,且 T1和T2屬性個數、值域必須相同,交運算可由差運算表示(T1∩T2 = T1-(T1-T2))。下表為 T1 ∩ T2的結果

表 T5

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0003 李梅 C101
笛卡爾積(CARTESIAN PRODUCT)

表T6 和 表T7 使用笛卡爾積運算產生一個新表T8,(T8 = T6 × T7)它是T6和T7的所有元組連接而成,即將兩張表的元關係合併,且T6的每一元組都對應T7所有的元組
下表為 T6 × T7的結果

表 T6

學號(SNO) 姓名(SNAME)
0001 張三
0002 王二

表 T7

課程號(CNO) 課程名(CNAME) 教室(SSEX)
1 資料庫 C-101
2 操作系統 C-102

表 T8

學號(SNO) 姓名(SNAME) 課程號(CNO) 課程名(CNAME) 教室(SSEX)
0001 張三 1 資料庫 C-101
0001 張三 2 操作系統 C-102
0002 王二 1 資料庫 C-101
0002 王二 2 操作系統 C-102
專門的關係運算

此運算即涉及行,又涉及列,分為一元專門關係操作和二元專門關係操作

  • 一元關係操作:對單個關係進行垂直分解的投影運算和進行水平分解選擇運算
  • 二元關係操作:對兩個關係進行操作,包括連運算和除運算
選擇(SELECT)

選擇運算( $σ_F(R)$ ),F為條件表達式,R為指定的被運算關係名。 從指定關係中選取滿足條件的若幹元組組成一個新關係

SELECT 關係名 WHERE 條件語句(表達式)

條件語句:由常數、屬性名或列名、比較操作符及邏輯操作符組成

example:

SELECT T8 WHERE 姓名 = "張三"

表 T9

學號(SNO) 姓名(SNAME) 課程號(CNO) 課程名(CNAME) 教室(SSEX)
0001 張三 1 資料庫 C-101
0001 張三 2 操作系統 C-102
投影(PROJECTION)

投影運算( $π_A(R)$ ), R為被運算關係,A為屬性序列,從指定關係中選取指定的若幹屬性值組成新關係

PROJECTION 關係名 ( 屬性名1, 屬性名2 ,... )

組成的新關係自動去重

example:

PROJECTION T8 (課程號,課程名)

表 T10

課程號(CNO) 課程名(CNAME)
1 資料庫
2 操作系統
θ連接(JOIN)

連接運算($R\cfrac{⋈}{xθy}S$),其中,R和S 代表兩個不同的關係;x 和 y 分別表示R中的第x列和S中的第y列屬性;θ表示比較運算符,從笛卡爾積R×S中選取R的第x列屬性值與S的第y列屬性值滿足θ的那些元組組成一個新關係。

JOIN 關係1 AND 關係2 WHERE 條件語句

條件語句:由比較操作符和屬性名或列名組成的表達式

  • 等值連接:θ值為 "=",從R和S的笛卡爾積中選取 x、y 屬性值相等的元組
    example:

表 T11

A B C
a b c
d e f

表 T12

D E A
g h a
b c d
JOIN  T11 AND T12 WHERE A = A

T11 × T12

A B C D E A
a b c g h a
a b c b c d
d e f g h a
d e f b c d

等值結果為:

表 T13

A B C D E A
a b c g h a
d e f b c d
  • 自然連接:是一種特殊的等值連接,要求兩個關係中比較的分量必須是

表 T14

A B C D E
a b c g h
d e f b c

自然連接是構造新關係的有效方法,投影和選擇是分解關係的有效方法,自然連接中如果兩個關係沒有公共屬性則變成笛卡爾積

除(DIVISION)

待續。。。

Owen 的個人博客
博客園


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在做一個VPN中間件的配置工作,在配置iptables的時候,當用戶想刪除EIP(即釋放當前連接),發現使用iptables的相關命令會提示錯誤。 我就納悶了,怎麼會出現這個問題,按照官方的文檔也有錯? "官方文檔地址" 解決方法: 1. 按行刪除 如果按照行號刪除,就不會有這篇文章了,當然如果 ...
  • 利用 pandas庫讀取excel表格數據 初入IT行業,願與大家一起學習,共同進步,有問題請指出!! 還在為數據讀取而頭疼呢,請看下方簡潔介紹: 數據來源為國家統計局網站下載: 具體方法 代碼: 結果: 讀出x列的結果可以用matplotlib.pyplot庫繪製直線圖、餅圖、折線圖 ...
  • 系統:win10(其他版本系統不在本次內容) MYSQL下載地址:https://dev.mysql.com/downloads/mysql/ MySQL安裝主流分為兩種:msi,zip Zip:壓縮版,這需要配置init文件,然後通過win+R 進入cmd控制台進行操作(本次 以msi版本為主,後 ...
  • Redis事務控制 1、Redis事務控制的相關命令彙總 |命令名|作用| | | | |MULTI|表示開始收集命令,後面所有命令都不是馬上執行,而是加入到一個隊列中。| |EXEC|執行MULTI後面命令隊列中的所有命令。| |DISCARD|放棄執行隊列中的命令。| |WATCH|“觀察”、“ ...
  • Redis實例安裝 安裝說明:自動解壓縮安裝包,按照指定路徑編譯安裝,複製配置文件模板到Redis實例路的數據徑下,根據埠號修改配置文件模板 配置文件,當前shell腳本,安裝包 參數1:basedir,redis安裝包路徑 參數2:安裝實例路徑 參數3:安裝包名稱 參數4:安裝實例的埠號 #! ...
  • [root@localhost ~]# firewall-cmd --zone=public --add-port=1521/tcp --permanent success [root@localhost ~]# firewall-cmd --reload success ...
  • Spark 的 RDD 學習第二節,筆記相關: 1.如何向 Spark 傳遞函數 2.Spark 常用的一些轉化和行動操作 3.Spark 的持久化級別 ...
  • [toc] 發表日期:2019年9月18日 什麼是ElasticSearch ElasticSearch是一個集 數據存儲 、 數據搜索 和 數據分析 為一體的系統。它是分散式的,所以能利用分散式來提高其處理能力,具有高可用性和高伸縮性。如果你需要一個能夠提供高性能的搜索服務的系統,那麼它或許是一個 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...