資料庫基礎 關係數據模型

来源: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...