1. 程式人生 > >復習三——關系數據模型

復習三——關系數據模型

AS 級聯刪除 uno 聚集 design 函數 key) 有意義 得出

數據模型

描述現實世界實體,實體間聯系以及數據語義和一致性約束的模型。這個定義看起來沒什麽實際用途,但是理解了對使用power designer設計數據庫有好處。嘛。。。反正我沒理解透。

按照模型應用的不同目的,可以分為

  • 概念數據模型(概念模型):按用戶的觀點對數據進行建模,強調語義表達功能。主要用於數據庫的概念設計。
  • 結構數據模型(數據模型):按計算機系統的觀點對數據進行建模,直接面向數據庫的邏輯結構。

現實世界——>信息世界 概念模型(如E-R模型,即實體-聯系模型)——>機器世界 數據模型

數據模型的三要素

  • 數據結構:實體之間的聯系
  • 數據操作:檢索和更新的實現
  • 數據的完整性約束:數據之間的聯系具有的制約和依賴關系

關系模型

形式化定義

R(U,D,dom,F)

R為關系模式名,U是屬性集,D是U中屬性的值所來自的值域,Dom是屬性向域的映射集合,F是屬性間的依賴關系。可以簡寫為

R(U)

重要概念

超碼(Super Key)

唯一標識一個元組的屬性集

候選碼(Candidate Key)

不含多余屬性的超碼。包含在任何一個候選碼的屬性成為主屬性(Primary Attribute),否則稱為非主屬性

主碼(Primary Key)

用戶選作元組標識的一個候選碼稱為主碼,其余的候選碼稱為替換碼(Alternate Key)。

外碼(Foreign Key)

關系模式R的外碼是它的一個屬性集FK,滿足:

  • 存在帶有候選碼CK的關系模式S
  • R的任一非空FK值在S的CK中有一個相同的值

S稱為被參照關系,R稱為參照關系。

總之就是說,我的屬性裏用到你的已經有的屬性,並且那個屬性被你用來當作候選碼。比如銀行系統裏面,如果bank表有屬性name,staff表裏面有屬性bank_name,並且bank_name的實例來自name已經有的實例,就說bank_name是外鍵,引用bank的name屬性。

被引用了的表不能夠直接刪除(參照完整性)。比如bank裏面有中國銀行,staff裏面有小明,來自中國銀行。如果直接把bank刪除,那麽小明來自的中國銀行就無從查找來自何處。有些數據庫系統提供刪除的級聯操作,就是說,刪除bank表的同時,把其他表中所有引用了它的實例都刪除掉,mysql提供這種操作,不過需要解除外鍵檢查。

SET FOREING_KEY_CHECKS=0

oracle就不支持級聯刪除。官方給出的解釋是:這是沒有意義的操作。想要刪除的話,需要先刪掉相應的外鍵約束,刪除之後再加上外鍵約束。

三類完整性規則

  • 實體完整性(Entity Integrity):主碼的所有屬性不可為空
  • 參照完整性(Referential Integrity):參照關系R的任意一個外碼值必須來自於參照關系S中所參照的候選碼的某個值,或者為空。
  • 用戶自定義完整性(User-Defined Integrity):針對某一數據的約束條件,比如成績取值0到100,或者性別不能為空啥的。

關系代數

返回兩個關系中所有元組

返回兩個關系共同的元組

返回屬於第一個關系但不屬於第二個關系的元組

笛卡爾積

返回兩個關系的元組的任意組合所得到的元組集合

選擇

返回指定關系中滿足給定條件的元組

投影

返回指定關系中去掉若幹屬性後所得的元組

聯接

從兩個關系的笛卡爾積中選區屬性間滿足給定條件的元組

  • 自然聯接:相當於在R×S中選取R和S的所有公共屬性值都相等的元組,並在結果中去掉重復屬性
  • θ聯接:相當於在R×S中選取R的屬性A值與S的屬性B值滿足比較關系θ的元組。
  • 等值聯接:θ關系為相等的時候,即為等值聯接。比較的屬性是兩個公共屬性時,為自然聯接。

除的結果與第二個關系的笛卡爾積包含在第一個關系中

(氣死我了,這個編輯器竟然不支持latex數學公式的編輯,好多符號打不出來)

附加的關系代數操作

擴展投影(廣義投影)

投影列表可以是R的一個或多個屬性,或者是重命名得出的屬性,或者通過原關系模式多個屬性運算得出的新屬性。

聚集函數(aggregate)

  • SUM(求和)
  • COUNT(計數)
  • AVG(求均值)
  • MAX(求最大值)
  • MIN(求最小值)

分組(Group)

排序(sort)

賦值

數據更新

(感覺如果不是需要使用這些理論上的關系代數運算,可以直接看mysql或者oracle等的相關對應操作的解釋或教程。菜鳥教程

復習三——關系數據模型